No me hago responsable si copiaste mal algún código que sale en las páginas de este sitio.
Ojalá sea de ayuda para más de alguno este sitio.
Se agradece si deja algún comentario.

miércoles, 22 de septiembre de 2010

Habilitar/Deshabilitar campos según roles

Ref: http://ms-dynamics-crm.blogspot.com/2008/07/habilitardeshabilitar-campos-segn-roles.html

Este link si funciona!..

Este código Javascript que expongo sirve para obtener el rol del usuario que está navegando por el CRM.
Una vez tenemos el rol, con la funcion UserHasRole compruebo si es igual que un rol a mi elección y según si lo es o no bloqueo un campo del formulario o lo dejo habilitado para escribir en él.


Edito los permisos de un campo según el rol:



if (UserHasRole("System Administrator"))

{

// Permito la escritura en el campo

//alert('Es administrador');


}

else

{

// Pongo sólo lectura el campo que quiero

//alert('No es administrador');
//Oculta el campo new_fechacierrecaso y new_recepcionsolicitudcaso
crmForm.all.new_recepcionsolicitudcaso_c.style.display='none';
crmForm.all.new_recepcionsolicitudcaso_d.style.display='none';
crmForm.all.new_fechacierrecaso_c.style.display='none';
crmForm.all.new_fechacierrecaso_d.style.display='none';

}
Compruebo si el rol es el mismo que le paso a la función:
function UserHasRole(roleName)  

{  

//oXml es un objeto que llama a obtener el rol  

var oXml = GetCurrentUserRoles();  

if(oXml != null)  

{  

  //Selecciono el nodo Texto  

  var roles = oXml.selectNodes("//BusinessEntity/q1:name");  

  if(roles != null)  

  {  

   for( i = 0; i < roles.length; i++)  

   {      

   if(roles[i].text == roleName)  

     {  

     //Devuelve true si el rol es el indicado  

     return true;  

     }  

   }  

  }  

}  

//Sino devuelve falso  

return false;  

}  

Obtengo el rol del usuario que entra en el CRM:
function GetCurrentUserRoles()  

{

// Compongo el xml 

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>role</q1:EntityName>" +  

" <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +  

" <q1:Attributes>" +  

" <q1:Attribute>name</q1:Attribute>" +  

" </q1:Attributes>" +  

" </q1:ColumnSet>" +  

" <q1:Distinct>false</q1:Distinct>" +  

" <q1:LinkEntities>" +  

" <q1:LinkEntity>" +  

" <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +  

" <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +  

" <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +  

" <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +  

" <q1:JoinOperator>Inner</q1:JoinOperator>" +  

" <q1:LinkEntities>" +  

" <q1:LinkEntity>" +  

" <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +  

" <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +  

" <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +  

" <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +  

" <q1:JoinOperator>Inner</q1:JoinOperator>" +  

" <q1:LinkCriteria>" +  

" <q1:FilterOperator>And</q1:FilterOperator>" +  

" <q1:Conditions>" +  

" <q1:Condition>" +  

" <q1:AttributeName>systemuserid</q1:AttributeName>" +  

" <q1:Operator>EqualUserId</q1:Operator>" +  

" </q1:Condition>" +  

" </q1:Conditions>" +  

" </q1:LinkCriteria>" +  

" </q1:LinkEntity>" +  

" </q1:LinkEntities>" +  

" </q1:LinkEntity>" +  

" </q1:LinkEntities>" +  

" </query>" +  

" </RetrieveMultiple>" +  

" </soap:Body>" +  

"</soap:Envelope>" +  

"";  

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);  

var resultXml = xmlHttpRequest.responseXML;  

return(resultXml);  

}

Nota: Cuidado con las comillas, \, '.

No hay comentarios:

Publicar un comentario