La pregunta surgió cuando querían saber el usuario conectado y a la vez su rol, para sí poder ocultar los campos.
Bueno en el SDK hay algunos ejemplos de cómo hacerlo, tratare de explicarlo de una forma más "castellanisada"
Este query nos traerá el BussisnesId, el primer y segundo nombre, el nombre completo, el id de la organización y el ir del usuario que está conectado,
" <q1:Attribute>businessunitid</q1:Attribute>" + " <q1:Attribute>firstname</q1:Attribute>" + " <q1:Attribute>fullname</q1:Attribute>" + " <q1:Attribute>lastname</q1:Attribute>" + " <q1:Attribute>organizationid</q1:Attribute>" + " <q1:Attribute>systemuserid</q1:Attribute>" +
Si deseamos que solo nos traiga el primer y segundo nombre, debemos de borrar todos las demás líneas menos esas dos opciones.
En este script hay un método muy importante ya que acá utilizamos un método ya escrito para el CRM, el método es el siguiente:
GenerateAuthenticationHeader()
Y bueno este script se encarga de completar algunos aspectos que necesita el script final.
Por último muestro el último script que vamos a utilizar:
var xml = "" + "<?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>businessunitid</q1:Attribute>" + " <q1:Attribute>firstname</q1:Attribute>" + " <q1:Attribute>fullname</q1:Attribute>" + " <q1:Attribute>lastname</q1:Attribute>" + " <q1:Attribute>organizationid</q1:Attribute>" + " <q1:Attribute>systemuserid</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>" + "";
Luego utilizamos el método xmlHttp para hacer la llamada al web services del Dynamics.
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", xml.length);
xmlHttpRequest.send(xml);
nos retorna un XML y buscamos solo lo que nos interesa.
var resultXml = xmlHttpRequest.responseXML;
var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
Ponemos en una variable todo lo que hemos pedido buscar.
var firstNameNode = entityNode.selectSingleNode("q1:firstname");
var lastNameNode = entityNode.selectSingleNode("q1:lastname");
var fullNameNode = entityNode.selectSingleNode("q1:fullname");
var systemUserIdNode = entityNode.selectSingleNode("q1:systemuserid");
var businessUnitIdNode = entityNode.selectSingleNode("q1:businessunitid");
var organizationIdNode = entityNode.selectSingleNode("q1:organizationid");
Y con esos datos ya podríamos hacer lo que queremos, ocultar campos por el rol del usuario conectado.
Ojala esto sea de bastante de utilidad, como lo fue para mí.
Salu2
Atilin








0 comentarios