jueves, 17 de septiembre de 2009

Cómo habilitar un campo en función del rol del usuario

Abrimos las propiedades del formulario.
Seleccionamos el evento OnLoad y pulsamos en el botón Editar.
Acuérdate de marcar el check "El evento está habilitado" porque si no, no funciona el codigo javascript que metas.

El código que tienes que meter dentro de function OnLoad() es:
if (UserHasRole("Director Ventas") || UserHasRole("Director Compras")) {    
   document.forms[0].all.new_validacioncomercial_d.disabled=false;
} 
else {   
   document.forms[0].all.new_validacioncomercial_d.disabled=true;
}


/* *************************************************** */


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


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

No hay comentarios: