Wednesday 28 November 2012

Get current user roles in CRM 2011 using javascript


// JScript source code
GetCurrentUserRoles = function () {

    var requestMain = ""

    requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
    requestMain += "  <s:Body>";
    requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
    requestMain += "      <request i:type=\"a:RetrieveMultipleRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\">";
    requestMain += "        <a:Parameters xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
    requestMain += "          <a:KeyValuePairOfstringanyType>";
    requestMain += "            <b:key>Query</b:key>";
    requestMain += "            <b:value i:type=\"a:QueryExpression\">";
    requestMain += "              <a:ColumnSet>";
    requestMain += "                <a:AllColumns>false</a:AllColumns>";
    requestMain += "                <a:Columns xmlns:c=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">";
    requestMain += "                  <c:string>name</c:string>";
    requestMain += "                </a:Columns>";
    requestMain += "              </a:ColumnSet>";
    requestMain += "              <a:Criteria>";
    requestMain += "                <a:Conditions />";
    requestMain += "                <a:FilterOperator>And</a:FilterOperator>";
    requestMain += "                <a:Filters />";
    requestMain += "              </a:Criteria>";
    requestMain += "              <a:Distinct>false</a:Distinct>";
    requestMain += "              <a:EntityName>role</a:EntityName>";
    requestMain += "              <a:LinkEntities>";
    requestMain += "                <a:LinkEntity>";
    requestMain += "                  <a:Columns>";
    requestMain += "                    <a:AllColumns>false</a:AllColumns>";
    requestMain += "                    <a:Columns xmlns:c=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" />";
    requestMain += "                  </a:Columns>";
    requestMain += "                  <a:EntityAlias i:nil=\"true\" />";
    requestMain += "                  <a:JoinOperator>Inner</a:JoinOperator>";
    requestMain += "                  <a:LinkCriteria>";
    requestMain += "                    <a:Conditions>";
    requestMain += "                      <a:ConditionExpression>";
    requestMain += "                        <a:AttributeName>systemuserid</a:AttributeName>";
    requestMain += "                        <a:Operator>Equal</a:Operator>";
    requestMain += "                        <a:Values xmlns:c=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">";
    requestMain += "                          <c:anyType i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">" + Xrm.Page.context.getUserId() + "</c:anyType>";
    requestMain += "                        </a:Values>";
    requestMain += "                      </a:ConditionExpression>";
    requestMain += "                    </a:Conditions>";
    requestMain += "                    <a:FilterOperator>And</a:FilterOperator>";
    requestMain += "                    <a:Filters />";
    requestMain += "                  </a:LinkCriteria>";
    requestMain += "                  <a:LinkEntities />";
    requestMain += "                  <a:LinkFromAttributeName>roleid</a:LinkFromAttributeName>";
    requestMain += "                  <a:LinkFromEntityName>role</a:LinkFromEntityName>";
    requestMain += "                  <a:LinkToAttributeName>roleid</a:LinkToAttributeName>";
    requestMain += "                  <a:LinkToEntityName>systemuserroles</a:LinkToEntityName>";
    requestMain += "                </a:LinkEntity>";
    requestMain += "              </a:LinkEntities>";
    requestMain += "              <a:Orders />";
    requestMain += "              <a:PageInfo>";
    requestMain += "                <a:Count>0</a:Count>";
    requestMain += "                <a:PageNumber>0</a:PageNumber>";
    requestMain += "                <a:PagingCookie i:nil=\"true\" />";
    requestMain += "                <a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>";
    requestMain += "              </a:PageInfo>";
    requestMain += "              <a:NoLock>false</a:NoLock>";
    requestMain += "            </b:value>";
    requestMain += "          </a:KeyValuePairOfstringanyType>";
    requestMain += "        </a:Parameters>";
    requestMain += "        <a:RequestId i:nil=\"true\" />";
    requestMain += "        <a:RequestName>RetrieveMultiple</a:RequestName>";
    requestMain += "      </request>";
    requestMain += "    </Execute>";
    requestMain += "  </s:Body>";
    requestMain += "</s:Envelope>";
    var req = new XMLHttpRequest();
    req.open("POST", _getServerUrl(), false)
    // Responses will return XML. It isn't possible to return JSON.
    req.setRequestHeader("Accept", "application/xml, text/xml, */*");
    req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
    var successCallback = null;
    var errorCallback = null;
    //req.onreadystatechange = function () { RetrieveMultipleResponse(req, successCallback, errorCallback); };
    req.send(requestMain);  
    var resultXml = req.responseXML;
    return (resultXml);
}

function rolename() {
    var oXml = GetCurrentUserRoles();
    if (oXml != null) {
        //select the node text
        var roles = oXml.selectNodes("//a:Entities/a:Entity/a:Attributes/a:KeyValuePairOfstringanyType");
        if (roles != null) {
            for (j = 0; j < roles.length; j++) {
                   alert(roles[j].childNodes[1].text);               
            }
        }

    }
}

No comments:

Post a Comment