Resources for IT Professionals > Dynamics Forums > Microsoft Dynamics CRM > Rollenbezogene Schreibrechte innerhalb einer Entität
Ask a questionAsk a question
 

AnswerRollenbezogene Schreibrechte innerhalb einer Entität

  • Wednesday, October 14, 2009 7:53 AMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hallo!

    Wir würden gerne innerhalb einer Entität (z. B. Firma) für einige Felder (eventuell auch ganze Tabs/Reiter) die Schreibrechte beschränken. Dies würden wir entweder an der Rolle oder am User festmachen können, wobei wir die Rolle bevorzugen würden.
    Welche Möglichkeiten bestehen hier?

    Gruß
    CSN22

Answers

  • Wednesday, October 14, 2009 12:13 PMMichael SulzMVPUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Hallo,

    ich verwende immer diesen Code, um die Daten zu ermitteln:
     

    function GetCurrentUserInfo()  

    {  

        var SERVER_URL = "http://CRM";  

        var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");  

        xmlhttp.open("POST", SERVER_URL + "/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);  

      

    }  

    In der ersten Zeile muss der richtige Server eingertagen werden, dann funktioniert das Script.


    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    • Marked As Answer byCSN22 Wednesday, October 14, 2009 12:42 PM
    •  
  • Wednesday, October 14, 2009 12:58 PMckeller Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer

All Replies

  • Wednesday, October 14, 2009 8:01 AMMichael SulzMVPUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hallo,

    der einfachste Weg ist sicherlich, die Felder per JavaScript auf ReadOnly zu setzen, wenn der Benutzer oder die Rolle das Recht zum Schreiben in diesem Feld nicht haben soll.
    Ansonsten gibt es auch ein 3th party tool, das Rechte auf Feldebene vergeben kann und du kannst natürlich ein entsprechendes PlugIn programmieren.
    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
  • Wednesday, October 14, 2009 11:53 AMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    Ich habe folgendes Skript gefunden, welches rollenbezogen das Formular verändert beim OnLoad-Event (in diesem Beispiel wird ein Tab ausgeblendet)

    HideTab();

    function HideTab()
    {
      var allowedRoles = [ "Vorstandsvorsitzender", "Marketingleiter" ];
      var roleAllowed = IsRoleAllowed(allowedRoles);

      if (! roleAllowed)
      {
        tab2Tab.style.display = 'none';
      }
    }

    function IsRoleAllowed(allowedRoles)
    {
      var result = RetrieveUserRoles();
      var foundResult = false;

      for (i=0;i<=allowedRoles.length;i++)
      {
        if (result.indexOf(allowedRoles[i]) > -1)
        {
          foundResult = true;
          break;
        }
      }
      return foundResult;
    }

    function RetrieveUserRoles()
    {
      var serverUrl = "/mscrmservices/2007/crmservice.asmx";
      var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      xmlhttp.open("POST", serverUrl, false);
      xmlhttp.setRequestHeader("Content-Type", "test/xml; charset=utf-8");
      xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
     
      var message = [
        "<?xml version='1.0' encoding='utf-8'?>",
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"xmlns:xsi=\"http://www.w3.org/2001/XML-Schema-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>Equal</q1:Operator>",
        "<q1:Values>",
        "<q1:Value xmlns:q2='http://microsoft.com/wsdl/types/' xsi:type='q2:guid'>",GetUserId(),
        "</q1:Value></q1:Values></q1:Condition></q1:Conditions>",
        "</q1:LinkCriteria></q1:LinkEntity></q1:LinkEntities>",
        "</q1:LinkEntity></q1:LinkEntities></query></RetrieveMultiple>",
        "</soap:Body></soap:Envelope>"
      ].join("");
     
      xmlhttp.send(message);
      return xmlhttp.responseXML.text;
    }

    function GetUserId()
    {
      var serverUrl = "/mscrmservices/2007/crmservice.asmx";
      var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      xmlhttp.open("POST", serverUrl, false);
      xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
      xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
     
      var message =
      [
      "<?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>",
      "<Execute xmlns='http://schemas.microsoft.com/crm/2007/Webservices'>",
      "<Request xsi:type='WhoAmIRequest' />",
      "</Execute",
      "</soap:Body>",
      "</soap:Envelope>"
      ].join("");
     
      xmlhttp.send(message);
      var result = xmlhttp.responseXML.xml;
      var doc = new ActiveXObject("MSXML2.DOMDocument");
      doc.async = false;
      doc.loadXML(result);
      var returnNode = doc.selectSingleNode("//UserId");
     
      if (returnNode != null)
      {
        return returnNode.text;
      }
      else
      {
        return null;
      }
    }


    Das skript funktioniert nicht. In den Funktionen RetrieveUserRoles und GetUserId treten vermutlich Fehler auf, welche dann das ganze skript als nichtig erscheinen lassen (der Tab wird nicht ausgeblendet).

    Wenn ich nur folgenden Code einsetze, dann wird das Tab ausgeblendet:
    HideTab();

    function HideTab()
    {
      var allowedRoles = [ "Vorstandsvorsitzender", "Marketingleiter" ];
      var roleAllowed = IsRoleAllowed(allowedRoles);

      if (! roleAllowed)
      {
        tab2Tab.style.display = 'none';
      }
      else
      {
         tab2Tab.style.display = 'none';
      }
    }

    Der Code ist natürlich nicht wirklich sinnvoll; aber ich konnte erkennen, dass der Tab ausgeblendet wird.


    Frage:
    Brauche ich wirklich so einen "Monster"-Code um Rollenbezogene Befehle durchzuführen?
    Gibt es irgendwo Beispielcode den man dafür verwenden kann? (dürfte ja im Prinzip immer gleich sein, oder?) Meine Idee ist, einfach im OnLoad die entsprechenden Felder auf "readonly" zu setzen ...


    Gruß
    CSN22

  • Wednesday, October 14, 2009 12:13 PMMichael SulzMVPUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Hallo,

    ich verwende immer diesen Code, um die Daten zu ermitteln:
     

    function GetCurrentUserInfo()  

    {  

        var SERVER_URL = "http://CRM";  

        var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");  

        xmlhttp.open("POST", SERVER_URL + "/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);  

      

    }  

    In der ersten Zeile muss der richtige Server eingertagen werden, dann funktioniert das Script.


    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    • Marked As Answer byCSN22 Wednesday, October 14, 2009 12:42 PM
    •  
  • Wednesday, October 14, 2009 12:31 PMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Danke, das sieht ja schon wesentlich übersichtlicher aus, aber: Ich bekomme eine Fehlermeldung. Ich habe es abgegrenzt und der Fehler erscheint, sobald ich diese Zeile im Code habe:
        xmlhttp.open("POST", SERVER_URL + "/mscrmservices/2007/crmservice.asmx", false);
    Also die 3. Zeile.

    Es erscheint die Meldung:
    Fehler im benutzerdefinierten Ereignis dieses Felds.
    Feld:window
    Ereignis:onload
    Fehler:unbekannter Fehler.

    Woran kann das liegen?


    PS: Ich habe den Code im OnLoad-Event des Kontaktformulars eingetragen.
  • Wednesday, October 14, 2009 12:42 PMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Ich habe es herausgefunden. Man muss die IP-Adresse einsetzen. Der Servername (klartext) funktioniert nicht.

    Klappt prima, allerbesten Dank!!!

    Jetzt muss ich nur noch gucken, wie ich über die GUID's an den Benutzernamen oder die Rollennamen komme...
    Der Benutzername würde evtl. reichen ...
  • Wednesday, October 14, 2009 12:50 PMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Ich versuche gerade den Code zu verstehen ...
    Dieser "WhoAmI"-request bringt ja vermutlich noch mehr als die 3 angezeigten Tags zurück.
    Wie kriege ich raus, welche Tags es noch gibt? Gibt es hierzu irgendwo eine Auflistung?
  • Wednesday, October 14, 2009 12:58 PMckeller Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
  • Wednesday, October 14, 2009 1:45 PMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Nach mehreren Versuchen bin ich schließlich mit dem Code von nachfolgender Seite zum Ziel gelangt:
    http://www.stunnware.com/crm2/topic.aspx?id=JS31

    Danke @ckeller + @Michael Sulz
  • Monday, October 19, 2009 9:08 AMmartin.diefenbach Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hallo ich möchte einen Reiter für alle Mitarbeiter ausblenden, die nicht die Rolle X haben.
    Folgenden Code habe ich in das Onload Ereignis eingetragen:

    HideTab();

    function HideTab()
    {
      var allowedRoles = [ "Vorstandsvorsitzender", "Marketingleiter" ];
      var roleAllowed = IsRoleAllowed(allowedRoles);

      if (! roleAllowed)
      {
        tab2Tab.style.display = 'none';
      }
      else
      {
         tab2Tab.style.display = 'none';
      }
    }

    Dabei kommt der Fehler Objekt erwartet.

    Kann mir jemand sagen wo er da ein Objekt erwartet?

    Bei dem ziemlich umfangreichen Text weiß ich nicht wo ich die Bedingung (tab2Tab.style.display = 'none';) eintragen muss.
    Wenn ich dies wüsste würde mir das auch helfen :)

    VG und im Vorraus bereits Vielen Dank

    Martin
  • Monday, October 19, 2009 10:32 AMMichael SulzMVPUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hallo Martin,

    der Code, um einen Tab auszublenden lautet:

    crmForm.all.tab3Tab.style.display = 'none';
    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
  • Monday, October 19, 2009 1:17 PMmartin.diefenbach Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hmm folgenden Code habe ich jetzt so wie er hier steht in meinem Onload Ereignis.
    wenn ich dies übernehme bekomme ich leider überhaupt kein ergebnis.
    Es wird weder ein fehler angezeigt, noch der tab ausgeblendet.
    Weiß gerade auch nicht recht weiter.
    Kann sich jemand mal den Code durchlesen und eventuell nach einem Fehler suchen?

    Vielen Dank bereits im Vorraus

    Hier der Code:

    HideTab();

    function HideTab()
    {
    alert('hallo')
      var allowedRoles = [ "Navision" ];
      var roleAllowed = IsRoleAllowed(allowedRoles);

      if ( roleAllowed)
      {
        crmForm.all.tab5Tab.style.display = 'none'
      }
    }

    function IsRoleAllowed(allowedRoles)
    {
      var result = RetrieveUserRoles();
      var foundResult = false;

      for (i=0;i<=allowedRoles.length;i++)
      {
    alert(result.indexOf(allowedRoles[i]);   
    if (result.indexOf(allowedRoles[i]) > -1)
        {
          foundResult = true;
          break;
        }
      }
      return foundResult;
    }

    function RetrieveUserRoles()
    {
      var serverUrl = "http://pmcs-crm/mscrmservices/2007/crmservice.asmx";
      var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      xmlhttp.open("POST", serverUrl, false);
      xmlhttp.setRequestHeader("Content-Type", "test/xml; charset=utf-8");
      xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
     
      var message = [
        "<?xml version='1.0' encoding='utf-8'?>",
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"xmlns:xsi=\"http://www.w3.org/2001/XML-Schema-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>Equal</q1:Operator>",
        "<q1:Values>",
        "<q1:Value xmlns:q2='http://microsoft.com/wsdl/types/' xsi:type='q2:guid'>",GetUserId(),
        "</q1:Value></q1:Values></q1:Condition></q1:Conditions>",
        "</q1:LinkCriteria></q1:LinkEntity></q1:LinkEntities>",
        "</q1:LinkEntity></q1:LinkEntities></query></RetrieveMultiple>",
        "</soap:Body></soap:Envelope>"
      ].join("");
     
      xmlhttp.send(message);
      return xmlhttp.responseXML.text;
    }

    function GetUserId()
    {
      var serverUrl = "/mscrmservices/2007/crmservice.asmx";
      var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      xmlhttp.open("POST", serverUrl, false);
      xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
      xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
     
      var message =
      [
      "<?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>",
      "<Execute xmlns='http://schemas.microsoft.com/crm/2007/Webservices'>",
      "<Request xsi:type='WhoAmIRequest' />",
      "</Execute",
      "</soap:Body>",
      "</soap:Envelope>"
      ].join("");
     
      xmlhttp.send(message);
      var result = xmlhttp.responseXML.xml;
      var doc = new ActiveXObject("MSXML2.DOMDocument");
      doc.async = false;
      doc.loadXML(result);
      var returnNode = doc.selectSingleNode("//UserId");
     
      if (returnNode != null)
      {
        return returnNode.text;
      }
      else
      {
        return null;
      }
    }
  • Monday, October 19, 2009 2:32 PMMichael SulzMVPUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hallo,

    ohne es genau zu überprüfen, der Aufruf der Funktion HideTab() muss auf jedem Fall ans Ende des Scripts.
    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
  • Tuesday, October 20, 2009 7:26 AMmartin.diefenbach Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Auch das hilft leider nicht.

    Herr Sulz folgendes Skript haben sie in einem früheren Beitrag gepostet.
    Kann man sich in diesem Skript auch die Sicherheitsrolle des jeweiligen Users ausweisen lassen?
    Falls ja, wie?

    VG


    Hier das Skript:

    function  GetCurrentUserInfo()  

    {  

         var  SERVER_URL =  " http://CRM " ;  

         var  xmlhttp =  new  ActiveXObject( "Msxml2.XMLHTTP" );  

        xmlhttp.open( "POST" , SERVER_URL +  "/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);  

     


  • Monday, November 02, 2009 11:07 AMmartin.diefenbach Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Hallo
    @ CSN22: könntest du vielleicht mal dein finales script hier posten wie du es letztendlich umgesetzt hast?

    VG
  • Monday, November 02, 2009 3:47 PMCSN22 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Has Code

    gerne, hier das fertige Skript (eingebaut im OnLoad-Ereignis des Hauptformulars der Entität "Firma"):

    ReadOnly();
    
    function ReadOnly()
    {
      var allowedRoles = [ "Mustermann, Max", "Schmidt, Stefan", "Testmeier, Dirk" ];
      var roleAllowed = IsRoleAllowed(allowedRoles);
    
      if (! roleAllowed)
      {
    crmForm.all.new_feld1.disabled = true;
    crmForm.all.new_feld1.readonly = true;
    crmForm.all.new_feld2.disabled = true;
    crmForm.all.new_feld2.readonly = true;
    crmForm.all.new_feld3.disabled = true;
    crmForm.all.new_feld3.readonly = true;
      }
    }
    
    function IsRoleAllowed(allowedRoles)
    {
      var result = GetCurrentUserInfo();
      var foundResult = false;
    
      for (i=0;i<=allowedRoles.length;i++)
      {
        if (result.indexOf(allowedRoles[i]) > -1)
        {
          foundResult = true;
          break;
        }
      } 
      return foundResult;
    }
    
    function GetCurrentUserInfo()
    {
    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>" + 
    "";
    
    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;
    var entityNode = resultXml.selectSingleNode("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
    
    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");
    
    return fullNameNode.text;
    }
    
    Gruß
    CSN22
  • Tuesday, November 03, 2009 11:44 AMmartin.diefenbach Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Ok werde den Code mal ausprobieren.
    Muss ich noch etwas spezielles beachten? irgendwelche Anpassungen, die nichts mit den Attributen zu tun haben ändern?

    VG und VD

    Martin
  • Tuesday, November 03, 2009 2:43 PMmartin.diefenbach Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    Habe es auf einem geringfügig anderem Weg gelöst.
    Wird auf folgender Seite beschrieben.
    Das schöne daran ist, dass es sehr leicht anzupassen ist auf das jeweillige Unternehmen.

    http://mscrmblogger.com/2009/09/30/hide-fields-or-tabs-by-role-with-javascript/comment-page-1/#comment-431

    Hoffe, dass dies anderen das Leben leichter machen wird :)

    @ CSN22: Vielen Dank für deinen Code!


    VG