Hace un tiempo en la versión 3.0 de Microsoft CRM mediante el uso de "RemoteCommand", podíamos obtener el UserId del usuario que estaba actualmente haciendo uso de la aplicación.
Con la venida de la versión 4.0 de CRM, y con el conocimiento de que el uso del comando "RemoteCommnad" no estaba soportado, nos dimos cuenta que para la nueva versión no funciona. (Por lo menos como es se esperaba).
Ahora bien, la necesidad de saber quien es el que esta logeado en el sistema desde codigo de scripting es muchas veces fundamental para hacer ciertas cosas desde Java Script. Lo cierto es que Microsoft no nos da la posibilidad hoy por hoy de saberlo. Por lo menos de una manera "soportada". Quizá el hecho de que no se provean de herramientas para conocer datos del usuario en el sistema sea por una cuestión de seguridad.
Pero como hay muchos que están dispuestos a asumir "ciertos riegos" (como yo). Les voy a dejar una forma de saber cual es el GUID del Usuario logeado, su organización e unidad de negocio.
Antes de pasar el código, le quiero agradecer a Jian Wang por la data.
Aca les va el código:
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");
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 += GenerateAuthenticationHeader();
soapXml += soapBody;
soapXml += "</soap:Envelope>";
xmlhttp.send(soapXml);
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(xmlhttp.responseXML.xml);
var userid = xmlDoc.getElementsByTagName("UserId")[0].childNodes[0].nodeValue;
var buid = xmlDoc.getElementsByTagName("BusinessUnitId")[0].childNodes[0].nodeValue;
var orgid = xmlDoc.getElementsByTagName("OrganizationId")[0].childNodes[0].nodeValue;
alert("UserId: " + userid + "\r\nBusinessUnitId: " + buid + "\r\nOrganizationId: " + orgid);
Espero que les sea de utilidad!!
Ah, ultima aclaración si se fijan bien dentro del xml hay una función GenerateAuthenticationHeader() - Esta función es global y propia de CRM que nos provee del token de autenticación. Esta función se encuentra solo en la version 4.0 y no esta disponible en las anteriores.
Ahora si, Saludos