none
Código para campo ser editável por determinado perfil RRS feed

  • Pergunta

  • Olá!

    Alguma sugestão de código html para somente permitir a digitação de um campo para determinado perfil de usuário?

    Obrigada

    Rosangela Oliveira
    Recife

    sexta-feira, 10 de julho de 2009 20:35

Respostas

  • Olá Rosangela,

    Utilize o seguinte:

    - AJAX para busca dos Perfis do usuário logado no CRM - para isto, via JScript, no OnLoad do Form do CRM, você faz a busca - http://technet.microsoft.com/en-us/library/cc677073.aspx;

    - De acordo com o Perfil, habilite ou desabilite os campos (Disabled property) - http://msdn.microsoft.com/en-us/library/cc189831.aspx

    P.S.: Apenas atente para o fato de que este tipo de desenvolvimento não é suportado pela MS. Isto significa que o suporte da MS não poderá lhe atenter neste ponto. Por outro lado, este método de desenvolvimento é bem utilizado e inclusive ensinado no curso Oficial da MS (CRM Extending).

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta RicardoAlves terça-feira, 9 de novembro de 2010 01:35
    segunda-feira, 13 de julho de 2009 13:17

Todas as Respostas

  • Olá Rosangela,

    Utilize o seguinte:

    - AJAX para busca dos Perfis do usuário logado no CRM - para isto, via JScript, no OnLoad do Form do CRM, você faz a busca - http://technet.microsoft.com/en-us/library/cc677073.aspx;

    - De acordo com o Perfil, habilite ou desabilite os campos (Disabled property) - http://msdn.microsoft.com/en-us/library/cc189831.aspx

    P.S.: Apenas atente para o fato de que este tipo de desenvolvimento não é suportado pela MS. Isto significa que o suporte da MS não poderá lhe atenter neste ponto. Por outro lado, este método de desenvolvimento é bem utilizado e inclusive ensinado no curso Oficial da MS (CRM Extending).

    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta RicardoAlves terça-feira, 9 de novembro de 2010 01:35
    segunda-feira, 13 de julho de 2009 13:17
  • Olá Rosangela,

    Já vivi uma situação parecida e utilizei este javascript que me atendeu perfeitamente. Este código delimita a edição de uma campo dependendo da função estabelecida para o usuário.

    Espero que te ajude.

    //FUNCAO QUE RETORNA O ID DO USUARIO LOGADO
    function getUserId()
    {
      
       var XMLRequest = "" +
       "<?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>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>" +
       "";

       try
       {
       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", XMLRequest.length);
       xmlHttpRequest.send(XMLRequest);

     var Result = xmlHttpRequest.responseXML;
     var BusinessEntityNodes = Result.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");

     if (BusinessEntityNodes.length != 0)
     {               
      var BusinessEntityNode = BusinessEntityNodes[0];
      var SystemUserId = BusinessEntityNode.selectSingleNode("q1:systemuserid");

      var SystemUserId = (SystemUserId == null) ? null : SystemUserId.text;

     }
      return SystemUserId ;
       }
       catch (e)
       {
      alert(e.message);
       }
    }


    function getUserRoles(userId)
    {
          try
          {
                var command = new RemoteCommand("UserManager", "GetUserRoles");
                command.SetParameter("userIds", "<guid>" + userId + "</guid>");
                var oResult = command.Execute();
                if (oResult.Success)
                {
                      return oResult.ReturnValue;
                }
          }
          catch(e)
          {
          return null;
          }
    }

    function userHasRole(userId, roleName)
    {
          var hasRole = false;
          result = getUserRoles(userId);
          if (result != null)
          {
                var oXml = new ActiveXObject("Microsoft.XMLDOM");
                oXml.resolveExternals = false;
                oXml.async = false;
                oXml.loadXML(result);
                roleNode = oXml.selectSingleNode("/roles/role[name='" + roleName + "']");
                if (roleNode != null)
                {
                      if (roleNode.selectSingleNode("roleid[@checked='true']") != null)
                      {
                            hasRole = true;
                      }
                }
          }
          return hasRole;
    }

    function currentUserHasRole(roleName)
    {
          userId = getUserId();
          return userHasRole(userId, roleName);
    }

    //INFORME AQUI A FUNÇÃO

    if( (currentUserHasRole('nome da função') ) )
    {

    //CAMPO A SER CONTROLADO(TORNANDO O CAMPO SOMENTE LEITURA)

    crmForm.all.<nome do campo>.readOnly = false;
    }
    else
    {
    crmForm.all.name.readOnly = true;
    }


    Att

    Aracy

    segunda-feira, 13 de julho de 2009 19:46
  • Rosangela,

    Eu já fiz pegando pelo usuário.

    Vê se lhe ajuda...


    if (GetLoggedUserName() == "nome da pessoa1"  || GetLoggedUserName() == "nome da pessoa2" || GetLoggedUserName() == "nome da pessoa3"  )

    {
          crmForm.all.new_campo.disabled = false;
         
      
    }


    function GetLoggedUserName()
    {
         //Create the XML that will fetch the required info.
         //You can inspect this web service call using a tool called FIDDLER.
         var XMLRequest = "" +
                       "<?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>systemuserid</q1:Attribute>" +
                       " <q1:Attribute>fullname</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>" +
                       "";
     
         //Create Http request object
         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=iso-8859-1");
         xmlHttpRequest.setRequestHeader("Content-Length", XMLRequest.length);
         xmlHttpRequest.send(XMLRequest);
     
         //Store the response which would be XML
         var Result = xmlHttpRequest.responseXML;
     
         /*
         The return is of type "BusinessEntity" if you were using similar code one server side.
         Hence we need to select node of type "BusinessEntity"
         In our case It should be not more one than one node
         */
         var BusinessEntityNodes = Result.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
     
         // Check If data was retrived
         if (BusinessEntityNodes.length != 0)
         {
              var BusinessEntityNode = BusinessEntityNodes[0];
              var SystemUserId = BusinessEntityNode.selectSingleNode("q1:systemuserid");
              var FullName = BusinessEntityNode.selectSingleNode("q1:fullname");
                                       
              var SystemUserId = (SystemUserId == null) ? null : SystemUserId.text;
              var FullName = (FullName == null) ? null : FullName.text;
          }
         
          return FullName;
    }

    terça-feira, 14 de julho de 2009 17:03