Benutzer mit den meisten Antworten
C# DynamicEntity auslesen

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
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
- Als Antwort vorgeschlagen JuergenBeckModerator Freitag, 18. Juni 2010 19:28
- Als Antwort markiert Michael Sulz Freitag, 25. Juni 2010 06:07
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
-
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
-
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 -
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
-
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
- Als Antwort vorgeschlagen JuergenBeckModerator Freitag, 18. Juni 2010 19:28
- Als Antwort markiert Michael Sulz Freitag, 25. Juni 2010 06:07