none
Userid und Accountid herausfinden RRS feed

  • Frage

  • Hallo
    gibt es einen befehl wie ich die Roleid und die Accountid oder generell solche IDs mir anzeigen lassen kann bzw drauf zugreifen kann.

    Um auf ein Attributwert zuzugreifen gebe ich ja crmForm.Attributname.DataValue an, das ist ja soweit kein Problem.
    Kann ich ähnlich einfach auch auf die Roleid und Accountid zugreifen um diese für bestimmte Zwecke zu verwenden?

    Ich möchte es vermeiden einen riesen Code einzugeben.

    Vielen Dank shconmal.


    Montag, 2. November 2009 11:13

Antworten

  • Hallo Martin,

    ich nutze für derartige Anforderungen folgenden Code:


    /****************************************************************************
    * globale Funktion: prüft, ob der aktuelle Benutzer im angegebenen Team ist *
    ****************************************************************************/
    crmForm.isCurrentUserInTeam = function(teamName)
    {
       var oXml = crmForm.GetTeamsForCurrentUser();
       if(oXml != null)
       {
          var teams = oXml.selectNodes("//BusinessEntity/q1:name");
          if(teams != null)
          {
             for( i = 0; i < teams.length; i++)
             {
                if(teams[i].text == teamName)
                {
                   return true;
                }
             }
          }
       }
       return false;
    }


    /******************************************************************************************
    * globale Funktion: lädt die Liste der Teams, in denen der aktuelle Benutzer Mitglied ist *
    ******************************************************************************************/
    crmForm.GetTeamsForCurrentUser = function()
    {
       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>team</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>teamid</q1:LinkFromAttributeName>" +
       " <q1:LinkFromEntityName>team</q1:LinkFromEntityName>" +
       " <q1:LinkToEntityName>teammembership</q1:LinkToEntityName>" +
       " <q1:LinkToAttributeName>teamid</q1:LinkToAttributeName>" +
       " <q1:JoinOperator>Inner</q1:JoinOperator>" +
       " <q1:LinkEntities>" +
       " <q1:LinkEntity>" +
       " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +
       " <q1:LinkFromEntityName>teammembership</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);
    }


    /*****************************************************************************
    * globale Funktion: liefert zum aktuellen Benutzer das angeforderte Attribut *
    *****************************************************************************/
    crmForm.GetAttributeForCurrentUser = function(attributeName)
    {
       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>" + attributeName +"</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 attributeValue = resultXml.selectSingleNode("//q1:" + attributeName).text;

       return(attributeValue);
    }


          var CurrentUserDomainName = crmForm.GetAttributeForCurrentUser("domainname");
          var CurrentUserIstInTeam_1 = crmForm.isCurrentUserInTeam("DeinTeamName");


    Schöne Grüße aus Bayern Heiko Heinrich-Nestler XING: http://www.xing.com/profile/Heiko_HeinrichNestler
    Montag, 2. November 2009 11:59

Alle Antworten

  • Hallo Martin,

    siehe  http://jianwang.blogspot.com/2008/01/crm-40-check-current-users-security.html

    Um die Verwendung von Fetch-XML wirst du nicht herum kommen, du benötigst den Webdienst um die Werte zu ermitteln.



    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    Montag, 2. November 2009 11:58
  • Hallo Martin,

    ich nutze für derartige Anforderungen folgenden Code:


    /****************************************************************************
    * globale Funktion: prüft, ob der aktuelle Benutzer im angegebenen Team ist *
    ****************************************************************************/
    crmForm.isCurrentUserInTeam = function(teamName)
    {
       var oXml = crmForm.GetTeamsForCurrentUser();
       if(oXml != null)
       {
          var teams = oXml.selectNodes("//BusinessEntity/q1:name");
          if(teams != null)
          {
             for( i = 0; i < teams.length; i++)
             {
                if(teams[i].text == teamName)
                {
                   return true;
                }
             }
          }
       }
       return false;
    }


    /******************************************************************************************
    * globale Funktion: lädt die Liste der Teams, in denen der aktuelle Benutzer Mitglied ist *
    ******************************************************************************************/
    crmForm.GetTeamsForCurrentUser = function()
    {
       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>team</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>teamid</q1:LinkFromAttributeName>" +
       " <q1:LinkFromEntityName>team</q1:LinkFromEntityName>" +
       " <q1:LinkToEntityName>teammembership</q1:LinkToEntityName>" +
       " <q1:LinkToAttributeName>teamid</q1:LinkToAttributeName>" +
       " <q1:JoinOperator>Inner</q1:JoinOperator>" +
       " <q1:LinkEntities>" +
       " <q1:LinkEntity>" +
       " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +
       " <q1:LinkFromEntityName>teammembership</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);
    }


    /*****************************************************************************
    * globale Funktion: liefert zum aktuellen Benutzer das angeforderte Attribut *
    *****************************************************************************/
    crmForm.GetAttributeForCurrentUser = function(attributeName)
    {
       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>" + attributeName +"</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 attributeValue = resultXml.selectSingleNode("//q1:" + attributeName).text;

       return(attributeValue);
    }


          var CurrentUserDomainName = crmForm.GetAttributeForCurrentUser("domainname");
          var CurrentUserIstInTeam_1 = crmForm.isCurrentUserInTeam("DeinTeamName");


    Schöne Grüße aus Bayern Heiko Heinrich-Nestler XING: http://www.xing.com/profile/Heiko_HeinrichNestler
    Montag, 2. November 2009 11:59
  • Hallo, danke für die Information.

    Nur zum Verständnis, wie gehe ich hier vor und wo gebe ich den Code ein.
    Sprich, was gebe ich ins OnLoad Ereignis ein und muss ich den Rest dann auslagern in eine Seite im IIS?

    Bin noch recht grün hinter den Ohren was solche Programmierungsgeschichten angeht, entschuldigt desshalb bitte solche Fragen.

    VG
    Martin
    Montag, 2. November 2009 12:36
  • Hallo Martin,

    was möchtest du denn mit dem Code erreichen? Wenn du Felder und/oder Tabs benutzerdefiniert anzeigen willst, gehört das ganze in das OnLoad des jeweiligen Formulares.
    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    Montag, 2. November 2009 13:35
  • ja die userrole benötige ich um einen tab auszublenden, die accountid benötige ich um einen outlook button einzufügen, in dem der link zu der bestimmten firma stehen soll.

    Um auf die Rollen zuzugreifen gibt es ja bereits einen thread, den ich auch gefunden habe.
    Mir war nur noch nicht ganz klar ob das dann alles auch in das onload ereignis reinkann.
    Also der komplette code der oben angeführt ist kommt in dieses onload ereignis herein?

    Die Anpassungen bekomme ich denke ich mal schon hin.

    VG
    Montag, 2. November 2009 15:21
  • Hallo Vielen Dank für die Hilfe bisher,

    das mit der UserID hat funktioniert,

    bezüglich der Accounid:

    An diese komme ich ja relativ einfach heran mit folgendem script:

    var Accid = crmForm.ObjectId;

    Nun soll diese in ein Feld auf dem Firmenobjekt gepastet werden:

    crmForm.all.new_accid = Accid

    Soweit funktioniert das alles super.

    Nun habe ich diesen Code ins Onload Event hereingeschrieben.
    Sprich ich bekomme zwar die Accountid wunderbar dort angezeigt aber logischerweise wird dann jeder Mitarbeiter beim Schließen der Firma dazu aufgefordert zu speichern, da sonst die Änderungen verloren gehen.

    Wie bekomme ich das nun hin, dass er dies automatisch in das Feld reinpastet um sicherzustellen, dass bei einem Statischen Excel Export einer bestimmten Auswahl an Firmen dieses Feld mit Exportiert werden kann ohne, dass ich jede Firma zunächst öffnen muss und wieder abspeichern muss.

    VG und VD im Vorras

    Martin

    Mittwoch, 4. November 2009 09:16
  • Hallo Martin,

    dafür ist doch ein Workflow geradezu prädistiniert. Du erstellst einen Workflow, der bei der Änderung des Feldes die entsprechenden Anpassungen durchführt.
    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    Mittwoch, 4. November 2009 09:50
  • Und wie bekomme ich die AccountID nun darein?

    Irgendwo habe ich glaube ich gerade einen Denkfehler :)

    kann ich in das Feld beim Workflow assistent einfach diesen ausdruck hier -> crmForm.ObjectId   reinfügen und auf irgendeine syntax achten oder wird das so nicht funktionieren?
    Weil ich kann aktuell nicht auf die Accountid über einen Workflow zugreifen.

    VG
    Mittwoch, 4. November 2009 11:32
  • nein, nicht das JavaScript einfügen, sondern das Feld, aus dem die AccountID kommt, z.B. ParentAccount, in das Zielfeld einfügen.
    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    Mittwoch, 4. November 2009 11:55
  • Das ist ja gerade das Problem dieses Feld gibt es nicht.
    Habe keines gefunden.
    Es besteht zwar das Attribut accountid als typ primary key, was ja auch logisch ist aber auf dieses feld kann ich nicht zugreifen im workflow assistenten oder sonst irgendwo.

    Der ParentAccount ist das die MasterID, die zum Zusammenführen von Datensätzen notwendig ist?
    Ich brauche hier die Accountid des jeweilligen Firmendatensatzes und diese soll in dem selben als Feld angezeigt werden.
    Dies kann ich bislang nur erreichen, wenn ich das in einem OnLoad oder OnSave Ereignis einfüge.

    Dazu müsste aber jede Firma geöffnet und gespeichert werden. Ist ja dann auch nicht so die feine Art.

    Es soll irgendwie automatisiert in ein neues Feld eingetragen werden.

    VG und weiterhin Vielen Dank für die Hilfe
    Martin
    Mittwoch, 4. November 2009 12:09
  • Hallo Martin,

    vielleicht erklärst du noch einmal genau, was du jetzt erreichen möchtest.
    Eventuell habe ich nicht alles richtig verstanden.
    Du hast doch ein Lookup in deiner Entität, aus der du die ID holst, oder nicht?

    Ist dies nicht eigentlich eine ganz neue Frage, die in einem neuen Thread behandelt werden solte? Wenn ja, wäre es nett, wenn du einen neuen Thread erstellen könntest. DU erleichterst damit anderen Benutzern des Forums die Suche nach den gewünschten Informationen.

    Viele Grüße

    Michael Sulz
    axcentro GmbH
    MVP für Microsoft Dynamics CRM
    Mittwoch, 4. November 2009 13:26