none
C# DynamicEntity auslesen RRS feed

  • Frage

  • Guten Morgen,

    ich habe wiedermal ein Problem. Ich schreibe seit einiger Zeit an ein Word Addin welches mir Daten über den Webservice (mittels QueryExpression) aus dem CRM holt, vorerst in eine Listbox schreibt und auf Knopfdruck auf dem Dokument ausgibt. Mit BusinessEntities geht dies auch tadellos. War schon fast soweit das Addin auch einzusetzen. Nun wurde ich aufgetragen dies mit einer selbst erstellten Entität zu tun. Hier hänge ich nun, da ich keine Ahnung habe wie ich an die Daten rankomme.

    Was ich habe ist folgendes:

    RetrieveMultipleRequest oRequest = new RetrieveMultipleRequest();
            oRequest.ReturnDynamicEntities = true;
            oRequest.Query = oQuery;
    
    //oQuery ist logischerweise die QueryExpression
    
    RetrieveMultipleResponse oResponse = (RetrieveMultipleResponse)oService.Execute(oRequest);

    Aus der BusinessEntityCollection habe ich die Daten von BusinessEntities (von System vorgegebene Entitäten) immer wie folgt ausgelesen:

    for (int i = 0; i < retrievedEntities.BusinessEntities.Count; i++)
            {
              lbxContactSearchResults.Items.Add((contact)retrievedEntities.BusinessEntities[i]);
              lbxContactSearchResults.DisplayMember = "fullname";
            }

    Nur dies geht bei DynamicEntities logischerweise leider nicht.

    Ich bitte wiedermal um eure Hilfe und danke euch schonmal im Vorraus!

     

    mfg Jasper

    Freitag, 18. Juni 2010 08:00

Antworten

  • Hi Jasper,

    das liegt daran, dass du vorher eine Instanz einer Klasse hattest, die über eine direkte Eigenschaft verfügte, die du in DisplayMember verwenden konntest. Die DynamicEntity verfügt aber nun nicht mehr über eine solche.

    Es gibt hierzu mehrere Lösungen. Am einfachsten wird es wohl sein, du erstellt speziell zur Visualisierung in der ComboBox eine eigene Klasse mit einer Eigenschaft, in der du die DynamicEntity abspeicherst und eine andere Eigenschaft, die du für DisplayMember verwendest und in der du auf die Property aus der DynamicEntity verweist.

    In einer Schleife durch die BusinessEntites füllst du dann eine Liste von dieser Klasse und bidest deine COmboBox an diese Liste.

    Alles klar?

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Freitag, 18. Juni 2010 18:45
    Moderator

Alle Antworten

  • Das steht eigentlich alles gut im SDK beschrieben.

     

    foreach(DynamicEntity de in retrievedEntites.BusinessEntites){
    
      lbxContactSearchResults.Items.Add((String)de.properties["fullname"]);
    
      ....
    
    }

    So in etwa ( für den Fall, dass dein Attribut vom Typ String ist... )

     

    Gruß

    Andreas

    Freitag, 18. Juni 2010 09:47
  • Mahlzeit,

    erstmal danke für deine schnelle Antwort. Leider stoße ich nun auf das nächste Problem.

    Vorher habe ich die Attribute, welche sich in der Entiät befinden wie folgt auf das Dokument bekommen:

    string selectedEntity = ((contact)lbxAccountSearchResults.SelectedItem).salutation + " ";
            selectedEntity += ((contact)lbxAccountSearchResults.SelectedItem).fullname + "\n";
            selectedEntity += ((contact)lbxAccountSearchResults.SelectedItem).address1_line1 + "\n";
            selectedEntity += ((contact)lbxAccountSearchResults.SelectedItem).address1_postalcode + " ";
            selectedEntity += ((contact)lbxAccountSearchResults.SelectedItem).address1_city;
            myRange.InsertAfter(selectedEntity);

    Mit den DynamicEntities ist das wiedermal anders. Das wäre auch das letzte was ich bräuchte.

     

    mfg Jasper

    Freitag, 18. Juni 2010 11:34
  • Essentiell: http://msdn.microsoft.com/en-us/library/aa685870.aspx

     

    ohne deinen Code jetzt zu kennen müsste folgendes in ähnlicher weise gehen:

     

    foreach(DynamicEntity de in retrievedEntites.BusinessEntites){


    lbxContactSearchResults.Items.Add(de);
    lbxContactSearchResults.DisplayMember = (String)de.Properties["fullname"] ;

    }

    ....
    string selectedEntity = ((DynamicEntity)lbxAccountSearchResults.SelectedItem).Properties["saluation"]..

    Andreas
    Freitag, 18. Juni 2010 12:35
  • Nochmals danke für deine Hilfe,

    das eintragen in das Formular geht soweit. Jedoch steht nun bei jedem Listboxeintrag nun nicht mehr der gewünschte Name sondern "Microsoft.Crm.Sdk.DynamicEntity". Was jedoch komisch ist, da er mir in der Lokalen Überwachung unter this.lbxContactSearchResults.base.DisplayMember jeweils den richtigen Wert ausgibt.

     

    mfg Jasper

    Freitag, 18. Juni 2010 14:45
  • Hi Jasper,

    das liegt daran, dass du vorher eine Instanz einer Klasse hattest, die über eine direkte Eigenschaft verfügte, die du in DisplayMember verwenden konntest. Die DynamicEntity verfügt aber nun nicht mehr über eine solche.

    Es gibt hierzu mehrere Lösungen. Am einfachsten wird es wohl sein, du erstellt speziell zur Visualisierung in der ComboBox eine eigene Klasse mit einer Eigenschaft, in der du die DynamicEntity abspeicherst und eine andere Eigenschaft, die du für DisplayMember verwendest und in der du auf die Property aus der DynamicEntity verweist.

    In einer Schleife durch die BusinessEntites füllst du dann eine Liste von dieser Klasse und bidest deine COmboBox an diese Liste.

    Alles klar?

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Freitag, 18. Juni 2010 18:45
    Moderator