Dieser Artikel wurde maschinell übersetzt.

Silverlight

Nutzung der Leistung der Dynamics CRM 4.0-API aus Silverlight 4

Mark Beckner

Herunterladen des Codebeispiels

Unternehmen Sind Zunehmend Microsoft Dynamics CRM 4.0 Lösungen Implementieren Und suchen Die the Externe Anwendungen Erstellen, Die Mit der Vorhandenen Service-Basierte API Integriert Werden Kann.

Erstellen von Silverlight-Anwendungen, die Direkt Mit Microsoft Dynamics CRM 4.0 (CRM 4.0 Nachstehend aus Platzgründen) Can Interagieren Können Schwierig Erweisen, Dienste Aufgrund der Natur asynchroner Mehrfachaufrufe von Silverlight Und Seine Unfähigkeit, Rufen Sie Die CRM 4.0 Web Direkt. In Diesem Artikel Erhalten Sie Einen Detaillierten Einblick in Eine Silverlight-Anwendung Erstellen die Sie Lesen Und Schreiben von Daten Über Die CRM 4.0 Web Service-API.

Übersicht Über Die Lösung

Silverlight 4 Und CRM 4.0 Sind Beide Leistungsstarken Technologien – Aber Sie Sind Nicht am Einfachsten Integrierte. Die Umsatzsteuer Hinter Dieser Integration Durch Die Erforschung der Asynchroner Kommunikation Zwischen Silverlight Und Die CRM 4.0 Web Service-API Erstellen Werden Betrachten Werden.

In Typischen Nicht-Silverlight-Anwendungen ist Ein Aufruf einer Einen Webdienst Synchron – der Anruf Ausgeht, Und die Anwendung Wartet, bis Eine Rückmeldung Empfangen Wird. Während Dieser Zeit Kann der Benutzer Kann Nicht Mit der Anwendung Interagieren Und Den Vollständigen Roundtrip Abgeschlossen Warten Muss. Die in Einer Asynchronen Anwendung Wie Silverlight der Aufruf des Diensts Erlischt Aber die Anwendung Weiterhin Voll Funktionsfähig Sein, Bevor Die Antwort Zurückgegeben Wird. Dies Schafft Eine Vielseitige Und Dynamische Benutzerfreundlichkeit, Aber es Stellt Höhere Anforderungen einer der Entwickler.

Um Zu Verstehen, Wie Diese Kommunikation Place Kann, Werde Ich Verschiedene Einzelfunktionen Präsentieren. Zunächst Werde Ich, Wie Eine Silverlight-Anwendung Einrichten Und Arbeiten Über Die replaces Schritte Zum Interagieren Mit Einem Webdienst, der als Wrapper Für Die CRM 4.0-API Location. Als Nächstes Gehe Ich Über Die Details der Arbeit Mit der CRM 4.0-API Und Zum Lesen Und Schreiben von Daten Mithilfe des Web Service-Wrappers. Ich Werde Mit Dem Core System User Entität in CRM 4.0 Arbeiten Und Auch Einen Blick Auf Das Arbeiten Mit Dynamischen Entitäten. Abschließend Werde Ich bin Umgang Mit Den Resultsets, Die Auf Silverlight Zurückgegeben Werden. Am Ende Werden Sie Ihre Eigenen Silverlight/CRM 4.0-Integrationen Mit Leichtigkeit Erstellen Können.

Erstellen der Anwendung Für Silverlight-4.

Es Gibt Eine Reihe von Message Durch Arbeiten, um Eine Silverlight-Anwendung from so, Dass die Interaktion Mit CRM 4.0 Zu Erhalten. Es ist Zwar Möglich, die CRM 4.0 SDK Oder der Webdienst-API Direkt in Das Silverlight-Projekt Verweisen Können Die Meisten Schnittstellen Und Methoden Tatsächlich aus Dem Code Aufgerufen Werden. Um die CRM 4.0-API Zu Interagieren, Muss Ein Wrapper-Webdienst Erstellt Werden. Dieser Webdienst Wird Broker Mehrfachaufrufe Zwischen der Silverlight-Anwendung Und die CRM 4.0-API in Einem Format, Das von Silverlight Behandelt Werden Kann. Der Webdienst-Wrapper Kann Direkt eine Die SilverlightCRMDemo.Web-Anwendung Hinzugefügt Werden.

Starten Sie Diesen Prozess Durch Erstellen Einer Neuen Silverlight-Lösung Im Visual Studio 2010 CRM40SilverlightDemo Aufgerufen. Beim Erstellen Einer Silverlight-Anwendungs-Im Visual Studio Werden Immer Zwei Projekte Erstellt. Eine ist der Kern der Silverlight-Anwendung; die Zweite ist Die ASP.NET-Anwendung, Die die Silverlight-Anwendung in Eine Webseite Eingebettet. Diese ASP.NET-Anwendung Werden Auch Privat an Den Web Service-Wrapper, Die Die CRM 4.0-API Interagiert. Die Silverlight-Anwendung Wird Über Einen Dienstverweis Diesen Webdienst Verweisen.

Um den Web Service-Wrapper Erstellen, Fügen Sie Einen Neuen Webdienst an Den ASP.NET-Anwendung, Und Nennen Sie es CrmServiceWrapper. In Diesem Beispiel Fügen Sie Zwei Web-Methoden Mit Dem Dienst – Eine CRM-Daten Und Eine Zum Buchen von CRM-Daten Zu Erhalten. Abbildung 1 Zeigt, Welche Diese Stub-Out-Methoden Aussehen Sollte Jetzt. Einmal Erhalten Sie die Silverlight-Anwendung Kommuniziert Erfolgreich Mit Diesem Wrapper Service Müssen Sie Diese Methoden Aufrufen, Die Tatsächliche CRM 4.0-API Aktualisieren.

Abbildung 1 Die Web-Methoden-Stubs

public class CrmServiceWrapper : System.Web.Services.WebService
{
  [WebMethod]
  public string GetCRMData()
  {
    return "This is the stubbed return for retrieving";
  }
 
  [WebMethod]
  public string PostCRMData()
  {
    return "This is the stubbed return for posting data";
  }
}

Nachdem die ASP-Web-Service-Wrapper Hinzugefügt Wurde.NET-Anwendung, das Die Einfachste Möglichkeit, Fügen Sie Einen Verweis Darauf in der Silverlight-Anwendung ist Im Debug-Modus Ausführen Und Erfassen Die URL, Auf Dem der Debugger Läuft die Anwendung aus (Sie Können Die URL aus Dem Browserfenster, Das Erscheint Einfach Greifen) an. Einmal Erfasst, Können Sie Einen Neuen Dienstverweis Aufgerufen CrmServiceReference , die Silverlight-Anwendung Und Fügen Sie Diese URL. Alle Zugehörigen Konfigurationsdateien Und Code Werden Automatisch Korrigiert. Wenn Sie Nicht Dazu Entscheiden, Müssen Sie Domänenübergreifenden Referenz Ausnahmen Behandeln – Und Einiges Mehr Einrichten, um die Anwendung Zu Debuggen.

Nun, da der Verweis Vorhanden ist, Kann Die Echte Codierung Innerhalb der Silverlight-Anwendungs-Erfolgen. Der Code Besteht aus einem Ereignishandler Für Jede Webmethode Verdrahtung Und Erstellen Zwei Methoden, um Daten Zu Verarbeiten, Sobald Diese Webmethoden Mehrfachaufrufe Abgeschlossen Sind. Der Code in Abbildung 2 Können Direkt in der Page.XAML.cs-Datei in der Silverlight-Anwendung Hinzugefügt Werden. Ausführen Dieser Bewirkt, Dass Beide Methoden Gleichzeitig Ausführen.

Abbildung 2 Hinzufügen von Code Zu Page.XAML.cs

using CRM40SilverlightDemo.CrmServiceReference;
 
public partial class MainPage : UserControl
{
  public MainPage()
  {
    InitializeComponent();
 
    // Call the GetCRMData Web method.
CrmServiceWrapperSoapClient proxyGet =
      new CrmServiceWrapperSoapClient();
    proxyGet.GetCRMDataCompleted +=
      new EventHandler<GetCRMDataCompletedEventArgs>(proxy_GetCRMDataCompleted);
    proxyGet.GetCRMDataAsync();
 
    // Call the PostCRMData Web method.
CrmServiceWrapperSoapClient proxyPost = new CrmServiceWrapperSoapClient();
    proxyPost.PostCRMDataCompleted +=
      new EventHandler<PostCRMDataCompletedEventArgs>(proxy_PostCRMDataCompleted);
    proxyPost.PostCRMDataAsync();
  }
 
  // Called asynchronously when the GetCRMData Web method returns data.
void proxy_GetCRMDataCompleted(object sender, GetCRMDataCompletedEventArgs e)
  {
    // Do something with the data returned.
string result = e.Result.ToString();
  }
 
  // Called asynchronously when the PostCRMData Web method returns data.
void proxy_PostCRMDataCompleted(object sender, PostCRMDataCompletedEventArgs e)
  {
    // Do something with the data returned.
string result = e.Result.ToString();
  }
}

Wenn Sie, Die Ihre Silverlight-Anwendung Ohne Fehler Ausgeführt Und zur Rückgabe von Daten aus Dem Webdienst Überprüft Haben, Können Sie Ihre Aufmerksamkeit Zu Aktivieren, die Mehrfachaufrufe ein sterben CRM 4.0-API Erstellen. These Mehrfachaufrufe Werden Alle in der Wrapper-GetCRMData Und PostCRMData Web-Webdienstmethoden Enthalten Sein, Die Bereits Erstellt Wurden.

Interaktion Mit der CRM 4.0-API

Es Gibt Zwei Primäre Webdienste Über CRM 4.0 Verfügbar: die CRMService Und Die MetadataService. Diese Web-Dienste Stehen Im Allgemeinen in Jedem Projekt Verweisen (Aber Viel Funktionalität, Wenn aus Einer Silverlight-Anwendung Verwiesen Wird Nicht Tatsächlich Ermöglichen). Die Häufigsten Und Effiziente Weise Arbeiten Sie Mit der API Verwendet Die MICROSOFT DYNAMICS CRM-SDK (Verfügbar Unter bit.ly/6M3PvV Zum Download). Das SDK Enthält Zahlreiche Klassen Und Methoden, Und Die Kommunikation Zwischen Vereinfacht.NET Framework-Code Und Die Webdienste von CRM 4.0. In Diesem Abschnitt Erfahren Sie, Wie Sie Interagieren Mit der API Mithilfe des SDK aus Dem Web Service-Wrapper.

Der Erste Schritt ist Auf Die Entsprechenden CRM SDK-Produktepräsentationen Verweisen. In der ASP.NET-Anwendung, Die Den Web Service-Wrapper Enthält Einen Verweis Auf Zwei SDK-Produktepräsentationen Hinzufügen: microsoft.crm.sdk.dll Und microsoft.crm.sdktypeproxy.dll. Sobald Diese Referenziert Wurden, Fügen Sie Die Entsprechenden Richtlinien an Den Anfang der Seite CrmServiceWrapper.asmx unterstützt:

using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Sdk.Query;

Der Nächste Schritt ist, Schreiben von Code Zum eine von CRM-Dienst, der Ihnen Erlaubt, Eine Verbindung Zu Einer Instanz von CRM 4.0. Dieser Code Wird Durch die GetCRMData Und Die PostCRMData Web-Methoden Verwendet Werden, so Dass es Eine Eigene Methode Gespeichert Wird. Diese Methode (See Abbildung 3) Erfordert Zwei Schlüsselfelder: der Name der Organisation Ihrer CRM 4.0-Instanz Und Die URL des der CRM-Hauptdienst (am /MSCRMServices/2007/crmservice.asmx). Beachten Sie, Dass Diese Felder am Besten in Einer Konfigurationsdatei Für easily Take Nach Dem Kompilieren des Codes Untergebracht Sind.

Abbildung 3 Die GetCRMService-Methode

static public CrmService GetCRMService()
{
  CrmService service = new CrmService();
  CrmAuthenticationToken token =
    new Microsoft.Crm.Sdk.CrmAuthenticationToken();
  token.OrganizationName = "Contoso";
  service.Url = "http://localhost:5555/MSCRMServices/2007/crmservice.asmx";
  service.Credentials = System.Net.CredentialCache.DefaultCredentials;
  service.CrmAuthenticationTokenValue = token;
  return service;
}

Abfragen von CRM-Daten

You can now Ihre Aufmerksamkeit Auf Das Abfragen von Daten aus Dem CRM 4.0 Aktivieren. Es ist Wichtig Zu Wissen, es Gibt Zwei Arten von Entitäten in CRM 4.0: core Systementitäten Und Benutzerdefinierten Entitäten. Die Core Systementitäten Können Mit Ein Wenig Einfacher als Benutzerdefinierte Entitäten Gearbeitet Werden. Standardmäßig Können Alle Eigenschaften Auf Kernentitäten Über stark Typisierte Objekte in C# Abgerufen Werden. Benutzerdefinierte Entitäten Werden Im Allgemeinen als Dynamische Entitäten Abgefragt, Obwohl Alternative Auch als stark Typisierte Objekte Worten accessed. Abfragen von Daten Mit Beiden Typen von Entitäten Vorgestellt Werden.

Ein Beispiel Für Das Abfragen Einer Systementität Core – die Systembenutzer-Entität – Wird Angezeigt, Abbildung 4. Dieser Code Ersetzt Die Webmethode Mit Dem Gleichen Namen, der Zuvor in Diesem Artikel aus Stub Wurde. In Diesem Neuen Code, Welche Abfragen CRM 4.0 Für Alle Benutzer des Systems, Sehen Sie Einige Wichtige Dinge. Erstens ist der Typ des Objekts Worten "Multiswitch-Systembenutzer." Alle Entitäten Core Haben Ihre Eigenen Typen. Zweitens ist Das Ergebnis Zurückgegeben Wird Eine String-Darstellung Eines XML-Dokuments.

Abbildung 4 Die Systementität Benutzer Abfragen

[WebMethod]
public string GetCRMData()
{
  // This will return all users in CRM in a single XML structure.
StringBuilder xml = new StringBuilder();
  CrmService service = GetCRMService();
 
  QueryExpression query = new QueryExpression();
  query.EntityName = "systemuser";
  query.ColumnSet = new AllColumns();
 
  RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
  retrieve.Query = query;
  retrieve.ReturnDynamicEntities = false;
 
  RetrieveMultipleResponse retrieved =
    (RetrieveMultipleResponse)service.Execute(retrieve);
 
  xml.Append("<Users>");
 
  for (int i = 0; i <
    retrieved.BusinessEntityCollection.BusinessEntities.Count; i++)
  {
    systemuser user =
      (systemuser)retrieved.BusinessEntityCollection.BusinessEntities[i];
 
    // Create a string represenation to return to Silverlight app.
xml.Append("<User");
    xml.Append(" FirstName ='" + user.firstname + "'");
    xml.Append(" LastName = '" + user.lastname + "'");
    xml.Append(" SystemUserId = '" + user.systemuserid.ToString() + "'");
    xml.Append(" JobTitle = '" + user.jobtitle + "'");
    xml.Append("/>");
  }
 
  xml.Append("</Users>");
 
  return xml.ToString();
}

Sie Werden Feststellen, Dass Die Optionen Für die Rückgabe von Daten eine Silverlight Ziemlich Beschränkt Sind. Beispielsweise Können Sie die BusinessEntityCollection Zu Arbeiten Nicht Zurückkehren, da Silverlight Die API Direkt Bearbeiten Kann. Zweitens Sind Einschränkungen Mit XML Über Einen Webdienst eine Silverlight Übergeben. So ist Umgang Mit Einer Einfachen Zeichenfolge am Ende Wahrscheinlich Die Beste Option.

Abfragen von benutzerdefinierten Entitäten Kann Ein Wenig Mehr Einbezogen Werden. Die Gängigste Methode Zum Abrufen von Daten Mithilfe Einer Dynamischen Entität Zum Abrufen der Ergebnisse-ist (ist Ein Beispiel Für Diese Art von Abrufen Abbildung 5). Die Herausforderung Dieser Vorgehensweise ist Im Umgang Mit Bestimmten Attributen in Filtern in Abfrageausdrücken. Alles ist, Zwar Möglich Kann IntelliSense Nicht Viel Helfen.

Abbildung 5 Abrufen, Die Mit Eine Dynamische Entität

public static DynamicEntity GetCRMEntity(
  CrmService tmpService, String entityId, String entityName)
{
  DynamicEntity crmEntity = null;
 
  TargetRetrieveDynamic targetRetrieve = new TargetRetrieveDynamic();
 
  // Set the properties of the target.
targetRetrieve.EntityName = entityName;
  targetRetrieve.EntityId = new Guid(entityId);
 
  // Create the request object.
RetrieveRequest retrieve = new RetrieveRequest();
 
  // Set the properties of the request object.
retrieve.Target = targetRetrieve;
  retrieve.ColumnSet = new AllColumns();
 
  // Retrieve as a DynamicEntity.
retrieve.ReturnDynamicEntities = true;
 
  // Execute the request.
RetrieveResponse retrieved = (RetrieveResponse)tmpService.Execute(retrieve);
 
  // Extract the DynamicEntity from the request.
DynamicEntity entity = (DynamicEntity)retrieved.BusinessEntity;
 
  crmEntity = entity;
 
  return crmEntity;
}

Obwohl der Dynamischen Entität Ansatz Die am Häufigsten zeigt want to you Haben Vollen Einblick in Die Struktur der Die Entität Im Visual Studio Und Die Interaktion Mit Genauso als Standard Entität, Können Sie Einen Proxy Für Den CrmService Erstellen. Stirbt in Vielen Fällen Kann Erheblich Verbessern Die Entwicklungsumgebung Und Ermöglichen Mehr Flexibilität Im Wie Code Geschrieben Werden Kann. Ein Proxy ist Nichts Anderes als Eine Generierte C# Datei, Basierend Auf Die Aktuelle Instanz der WSDL-Datei CrmService. Zum Erstellen Einer Proxyklasse Für Den CrmService-Hauptdienst Öffnen Eine Eingabeaufforderung den Befehl Visual Studio Und Geben Sie Folgendes Ein, Ersetzen Sie Die URL Mit Den Entsprechenden Link, um Ihre crmservice.asmx Seite:

wsdl.exe /out:CrmSdk.cs /namespace:CRM40SilverlightDemo.WebReferences.CrmSdkhttp://localhost:5555/mscrmservices/2007/crmservice.asmx?wsdl

Dieser Befehl Erstellt Eine C#-Datei Namens CrmSdk.cs Im Verzeichnis aus, in Dem Sie Das Created wsdl.exe Ausführbare Ausgeführt Haben. Diese Datei Sollte Dem Projekt Hinzugefügt Werden. Sobald Hinzugefügt, Können Sie Mit Jedem Benutzerdefinierten Entität in Genau Dieselbe Weise Wie Core Systementitäten Arbeiten. Wenn Die Entität Ändert, C# Proxydatei Einfach Aktualisieren Und Die Neuen Attribut (Oder Andere Änderungen) Werden Zur Verfügung are. Für die Zwecke der Aktuellen Übung Wird Nicht Die Proxydatei C# Verwendet Werden.

CRM 4.0 Aktualisieren Daten

Gewusst Wie: Abrufen von Daten aus CRM 4.0 Sah Haben, Können Sie Jetzt Arbeiten Über Das Zurücksenden von Daten. Der Code in Abbildung 6 Zeigt, Wie ein System-Benutzer-Datensatz Zu Aktualisieren. Es Erfordert, Dass Zwei Eigenschaften Übergeben Werden: der Eindeutige Bezeichner des Datensatzes CRM 4.0 Und Den Spitznamen. Um Diese von Zeichenfolgen Übergeben werden, muss Eine Codezeile in der Page.XAML.cs, Hier Gezeigt Geändert Werden:

proxyPost.PostCRMDataAsync("f04b02d9-ad5f-e011-a513-000c29330bd5","My Nickname");

Beachten Sie, Dass die ID in Den Aufruf der Methode PostCRMData Hartcodiert ist. You want to Einen Mechanismus Für Die ID Dynamisch grab Kommen.

Abbildung 6 CRM 4.0 Buchen Daten

 

[WebMethod]
public string PostCRMData(string userId, string nickname)
{
  CrmService service = GetCRMService();
 
  Key kid = new Key();
  kid.Value = new Guid(userId);
  systemuser entity = new systemuser();
  entity.systemuserid = kid;
 
  entity.
nickname = nickname;
 
  service.Update(entity);
 
  return "success";
}

Verarbeitung der Ergebnisse in Silverlight

Die Lösung Sollte Zu Diesem Zeitpunkt Abrufen Und Daten Zu Und von CRM 4.0 Buchen. Allerdings ist Nichts Mit Den Ergebnissen der Zeichenfolge ausgeführt Wird, die Auf Silverlight Zurückgegeben Werden. Gibt Die GetCRMData-Methode Eine Zeichenfolge Mit Daten, die Ein XML-Dokument Mit Allen war Damit Getan Werden Kann, Aber Die Benutzerdatensätze Enthält? Abhängig von Dem Steuerelement zeigt Direkt eine XML Binden Können, or you want to Analysieren die XML-Daten, die Zurückgegeben Wird Und der Umgang Mit Daten Für Die Einzelnen Elemente.

Ein Beispiel Für Das Durchlauf der Assistant Ergebnisse Kann man in Abbildung 7. Dieser Code Zeigt, Wie Die Zeichenfolge in Ein XML-Dokument Und Eine Schleife Durch Die Daten Geladen. Bei der Arbeit Mit XML-Dokumenten in Silverlight, Kommt Die Vielseitigste Funktionalität von der XDocument-Klasse. Dies Kann Durch Hinzufügen Eines Verweises Auf System.Xml.Linq in Ihrem Silverlight-Projekt Web Site Werden.

Abbildung 7 Arbeiten Mit XDocuments

void proxy_GetCRMDataCompleted(object sender, GetCRMDataCompletedEventArgs e)
{
  XDocument xDoc = XDocument.Parse(e.Result);
 
  string firstName;
  string lastName;
  string ID;
  string title;
 
  // Loop through the results.
foreach (XElement element in xDoc.Descendants("User"))
  {
    firstName = GetAttributeValue(element, "FirstName");
    lastName = GetAttributeValue(element, "LastName");
    ID = GetAttributeValue(element, "SystemUserId");
    title = GetAttributeValue(element, "JobTitle");
  }
}
 
private string GetAttributeValue(XElement element, string strAttributeName)
{
  if (element.Attribute(strAttributeName) != null)
  {
    return element.Attribute(strAttributeName).Value;
  }
  return string.Empty;
}

Unendlich Viele Möglichkeiten

Es Gibt Unendlich Viele Möglichkeiten Bei der Integration der Beiden Technologien. Some der Unmittelbaren Nächsten Schritte, Die, Denen Sie Betrachten Möchten, zeigt, Sind Ansätze Zur Ausnahmebehandlung (Viele Silverlight-Steuerelemente Ausnahmen, Ausblenden, so Müssen Sie Dieses Auf Einer Fall-Zu-Fall-Basis an) Und Integration Mit Verschiedenen Steuerelemente. Unabhängig von der Richtung, die Sie Ergreifen, Haben Sie Jetzt Alles, was Sie Benötigen, um Silverlight-Lösungen Erstellen, Die Lesen Und Schreiben von Daten Mit CRM 4.0.

Mark Beckner ist der Gründer von Inotek Consulting Group LLC. Er Arbeitet Über Die Microsoft-Stapel, EINSCHLIESSLICH BizTalk, SharePoint, Dynamics CRM Und Allgemein.NET Framework-Entwicklung. Er Kann Erreicht Werden, Unter mmbeckner@inotekgroup.com.

Dank der Folgenden Technischen Experten Für die Überprüfung Dieses Artikels: Scott Jones