Thursday, November 18, 2010

To get the loggedin user id through Jscript

   var userId=getCurrentUser().toString ().toLowerCase();
   userId=userId.replace('{','').replace('}','').toLowerCase();






function getCurrentUser()
{
    var systemUserId="";
    if(AUTHENTICATION_TYPE==0)//
    {
        var soapBody = "<soap:Body>"+"<Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>"+"<Request xsi:type='WhoAmIRequest' />"+"</Execute></soap:Body>";
        var soapXml = "<soap:Envelope "+"xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' "+"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+"xmlns:xsd='http://www.w3.org/2001/XMLSchema'>";
        soapXml += "<soap:Header><CrmAuthenticationToken xmlns='http://schemas.microsoft.com/crm/2007/WebServices'><AuthenticationType xmlns='http://schemas.microsoft.com/crm/2007/CoreTypes'>0</AuthenticationType><OrganizationName xmlns='http://schemas.microsoft.com/crm/2007/CoreTypes'>"+ORG_UNIQUE_NAME+"</OrganizationName><CallerId xmlns='http://schemas.microsoft.com/crm/2007/CoreTypes'>00000000-0000-0000-0000-000000000000</CallerId></CrmAuthenticationToken></soap:Header>";
        soapXml += soapBody;
        soapXml += "</soap:Envelope>";
        // Create the XMLHTTP object for the execute method.
        var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        xmlhttp.open("POST", "/mscrmservices/2007/CrmService.asmx", false);
        xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
        //Send the XMLHTTP object.
        xmlhttp.send(soapXml);
        // Create an XML object to parse the results.
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async=false;
        xmlDoc.loadXML(xmlhttp.responseXML.xml);
        // Get the user's ID.
        var userid = xmlDoc.getElementsByTagName("UserId")[0].childNodes[0].nodeValue;
        systemUserId=userid;
    }
    else
    if(AUTHENTICATION_TYPE==2)//IFD
    {
        //Create the XML that will fetch the required info.
        //You can inspect this web service call using a tool called FIDDLER.
        var XMLRequest = "" + 
        "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + GenerateAuthenticationHeader() +
        " <soap:Body>" + 
        " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" + 
        " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" + 
        " <q1:EntityName>systemuser</q1:EntityName>" + 
        " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" + 
        " <q1:Attributes>" + 
        " <q1:Attribute>systemuserid</q1:Attribute>" + 
        " <q1:Attribute>fullname</q1:Attribute>" + 
        " </q1:Attributes>" + 
        " </q1:ColumnSet>" + 
        " <q1:Distinct>false</q1:Distinct>" + 
        " <q1:Criteria>" + 
        " <q1:FilterOperator>And</q1:FilterOperator>" + 
        " <q1:Conditions>" + 
        " <q1:Condition>" + 
        " <q1:AttributeName>systemuserid</q1:AttributeName>" + 
        " <q1:Operator>EqualUserId</q1:Operator>" + 
        " </q1:Condition>" + 
        " </q1:Conditions>" + 
        " </q1:Criteria>" + 
        " </query>" + 
        " </RetrieveMultiple>" + 
        " </soap:Body>" + 
        "</soap:Envelope>" + 
        "";


        try
        {
            //Create Http request object
            var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
            xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
            xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
            xmlHttpRequest.setRequestHeader("Content-Length", XMLRequest.length);
            xmlHttpRequest.send(XMLRequest);
            //Store the response which would be XML
            var Result = xmlHttpRequest.responseXML;
            /*
            The return is of type "BusinessEntity" if you were using similar code one server side.
            Hence we need to select node of type "BusinessEntity"
            In our case It should be not more one than one node
            */
            var BusinessEntityNodes = Result.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");


            // Check If data was retrived
            if (BusinessEntityNodes.length != 0)
            {
                var BusinessEntityNode = BusinessEntityNodes[0]; 
                var SystemUserId = BusinessEntityNode.selectSingleNode("q1:systemuserid");
                var FullName = BusinessEntityNode.selectSingleNode("q1:fullname");
                var SystemUserId = (SystemUserId == null) ? null : SystemUserId.text;
                var FullName = (FullName == null) ? null : FullName.text;
            }
               systemUserId=SystemUserId ;
        }
        catch (e)
        {
            alert(e.message);
        }
    }//Else for IFD end
    systemUserId=systemUserId.replace('{','');
    systemUserId=systemUserId.replace('}','');
    systemUserId=systemUserId.toLowerCase();
    return systemUserId
}

No comments:

Post a Comment