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
4 comentarios:
17 de abril de 2008, 7:32 p. m.
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the TV de Plasma, I hope you enjoy. The address is http://tv-de-plasma.blogspot.com. A hug.
15 de julio de 2008, 7:01 p. m.
Este codigo lo debo de pegar en el ISVCONFIG?.
Gracias.
16 de julio de 2008, 9:19 a. m.
Hola,
el codigo podes utilizarlo en los eventos de formulario (OnLoad - OnSave) o en el evento de algún campo (OnChange).
Si lo necesitas utilizar en un boton/menu personalizado que agregaste en tu isv.config podes hacerlo en la sección JavaScript del control que agregaste en el isv.config.
Saludos!
7 de noviembre de 2008, 9:48 p. m.
Me parece muy importante la informacion que estas mencionando de obtener el id, pero en caso de que quiera reflejar ese id dentro de un correo para poder ligarlo a un sistema externo, podria hacerlo, ojala y puedas ayudarme
Saludos
CRMUser
Publicar un comentario