Freigeben über


Verwenden der OrganizationServiceContext-Klasse

 

Veröffentlicht: Januar 2017

Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

In Microsoft Dynamics 365 (online und lokal) können Sie die OrganizationServiceProxy-Klasse verwenden, um auf Webdienste zuzugreifen. Alternativ können Sie den durch das Codegenerierungstool generierten OrganizationServiceContext verwenden, um Zugriff auf zusätzliche Funktionen zu erhalten. Durch die OrganizationServiceContext-Klasse können Sie Änderungen nachverfolgen, Identitäten und Beziehungen verwalten und auf den Microsoft Dynamics 365-LINQ-Anbieter zugreifen. Diese Klasse enthält außerdem eine OrganizationServiceContext.SaveChanges-Methode, die Sie verwenden können, um die Änderungen an den Daten zu übermitteln, die der Kontext nachverfolgt. Diese Klasse basiert auf dem gleichen Konzept wie die DataServiceContext- Klasse in Windows Communication Foundation (WCF)-Datendiensten.

Um diese Klasse zu generieren, stellen Sie einen Wert für den Parameter /serviceContextName bereit, wenn Sie Typen mit früher Bindung generieren. Das Codegenerierungstool verwendet diesen Namen als den Namen der generierten Klasse. Weitere Informationen zur Verwendung des Codegenerierungstools finden Sie unter Entitätsklassen mit früher Bindung mit dem Codegenerierungstool erstellen (CrmSvcUtil.exe). Sie können den Kontext des Organisationsdienstes verwenden, wenn Sie Anwendungen, Plug-Ins und Workflowaktivitäten entwickeln.

In diesem Thema

So verwenden Sie die OrganizationServiceContext-Klasse

Nachverfolgen von Änderungen mit der OrganizationServiceContext-Klasse

Nachverfolgen verknüpfter Objekte mit der OrganizationServiceContext-Klasse

Speichern von Änderungen mit der OrganizationServiceContext-Klasse

Verwenden virtueller Methoden, wenn der Kontext geändert wird

So verwenden Sie die OrganizationServiceContext-Klasse

Um die Kontextklasse zu instanziieren, müssen Sie dem Klassenkonstruktor ein Objekt übergeben, das die IOrganizationService-Schnittstelle implementiert. Eine Option ist dabei, eine Instanz der OrganizationServiceProxy-Klasse zu übergeben. Weitere Informationen über die IOrganizationService-Schnittstelle finden Sie unter Verwenden des Organisationsdienstes, um Daten oder Metadaten zu lesen und zu schreiben.

Das folgende Codebeispiel zeigt, wie eine neuen Instanz der Kontextklasse erstellt wird. In diesem Beispiel wurde die Kontextklasse mit den Namen AdventureWorksCycleServiceContext versehen, indem der Parameter /serviceContextName im Codegenerierungstool angegeben wurde:

//For early bound types to work correctly, they have to be enabled on the proxy.
_serviceProxy.EnableProxyTypes();
AdventureWorksCycleServiceContext context = new AdventureWorksCycleServiceContext(_serviceProxy);

Nachdem Sie das Kontextobjekt für den Organisationsdienst erstellt haben, können Sie damit beginnen, Entitäten nachzuverfolgen, zu erstellen, zu ändern oder zu löschen. Das folgende Codebeispiel zeigt z. B., wie ein neuen Kontakt instanziiert und dann auf einem Microsoft Dynamics 365-Server mithilfe des Servicekontextobjekts gespeichert wird.

//  Create a new contact record;
AdventureWorksCycleServiceContext context = new AdventureWorksCycleServiceContext (_serviceProxy);
Contact contact = new Contact() 
 {
   FirstName = "Pamela",
   LastName = "Brown",
   Address1_Line1 = "123 Easy St.",
   Address1_City = "Atlanta",
   Address1_StateOrProvince = "GA",
   Address1_PostalCode = "32254",
   Telephone1 = "425-555-5678"   };
context.AddObject(contact);
context.SaveChanges();

Es gibt mehrere Punkte, die Sie im vorherigen Codebeispiel beachten sollten. Nachdem ein neuer Kontakt instanziiert wurde, übergeben Sie zuerst das zu Kontaktobjekt an die OrganizationServiceContext.AddObject-Methode, sodass der Kontext damit beginnen kann, das Objekt nachzuverfolgen. Der zweite Punkt, den Sie beachten sollten, ist, dass das neue Objekt auf dem Server gespeichert wird, indem die OrganizationServiceContext.SaveChanges-Methode verwendet wird.

Der Organisationsdienstkontext muss jede Entität oder Beziehung nachverfolgen, die Sie an Microsoft Dynamics 365 senden möchten. Sie können beispielsweise einen Datensatz mit einer LINQ-Abfrage abrufen, und der Kontext würde diese Entität nachverfolgen, oder Sie können die OrganizationServiceContext.Attach-Methode verwenden, um den Kontext zu veranlassen, die Entität nachzuverfolgen. Sie können mit den Daten in einer Client-Anwendung arbeiten und neue Entitäten oder verknüpfte Entitäten erstellen sowie vorhandene Entitäten bearbeiten, aber Sie müssen die SaveChanges-Methode für nachverfolgte Entitäten aufrufen, um Änderungen an den Microsoft Dynamics 365-Server zu übermitteln.

Nachverfolgen von Änderungen mit der OrganizationServiceContext-Klasse

Um festzustellen wie eine Entität vom Kontext nachverfolgt wird, können Sie die Eigenschaft EntityState auf der Entitätsinstanz überprüfen. Sie müssen dem Organisationsdienstkontext mitteilen, dass eine Entität in Microsoft Dynamics 365 nachverfolgt werden soll, indem Sie die verschiedenen Methoden aufrufen oder eine LINQ-Abfrage verwenden. Alle Entitäten, die von einer .NET Language-Integrated Query (LINQ)-Abfrage zurückgegeben werden, werden vom Dienstkontext nachverfolgt.

Sie können Objekte zum Dienstkontext hinzufügen, indem Sie eine der folgenden Methoden in OrganizationServiceContext aufrufen.

Methode

Verwenden

AddObject

Fügt der Gruppe von Entitäten, die der Organisationsdienstkontext nachverfolgt, eine Entität hinzu. Der Status der Entität im Kontext wird auf Created gesetzt. Wenn die SaveChanges-Methode aufgerufen wird, wird dieser Datensatz auf dem Server erstellt oder hinzugefügt.

Attach

Fügt der Gruppe von Entitäten, die der Organisationsdienstkontext nachverfolgt, eine Entität hinzu. Der Status der Entität im Kontext wird auf Unchanged gesetzt. Wird die SaveChanges-Methode aufgerufen, wird diese Entität nur zum Server gesendet, wenn sich ihr Status ändert.

CreateQuery

Fügt der Gruppe von Entitäten, die der Organisationsdienstkontext nachverfolgt, das Ergebnis einer Abfrage hinzu.

Nachverfolgen verknüpfter Objekte mit der OrganizationServiceContext-Klasse

In Dynamics 365 und Dynamics 365 (online) können Sie mit dem Organisationsdienstkontext Beziehungen zwischen Entitäten erstellen und aktualisieren. Durch die vom CrmSvcUtil-Tool generierten Navigationseigenschaften in früh gebundenen Klassen können Sie auf Eigenschaften und Beziehungen der verknüpften Entität zugreifen und diese ändern. Der Organisationsdienstkontext muss die verknüpfte Entität nachverfolgen, damit die verknüpfte Entität auf dem Server aktualisiert werden kann.

Verwenden Sie die folgenden Methoden in OrganizationServiceContext um mit verknüpften Entitäten zu arbeiten und die Entität dem Dienstkontext hinzuzufügen:

Methode

Verwenden

AddRelatedObject

Fügt das Ziel dem Kontext hinzu. Ruft die Attach-Methode für die Zielentität und dann die AddLink-Methode zwischen der Quellentität und der (verknüpften) Zielentität auf.

AttachLink

Fügt die verknüpfte Entität dem Kontext zur Nachverfolgung hinzu. Der Status der Entität im Kontext wird auf Unchanged gesetzt.

AddLink

Erstellt eine Beziehung zwischen Quell- und Zielentitäten. Fügt das Ziel dem Kontext hinzu. Der Status der Zielentität im Kontext wird auf Created gesetzt.

LoadProperty

Lädt den verknüpften Entitätssatz, der für die angegebene Beziehung festgelegt wurde. Ermöglicht den Zugriff auf verknüpfte Entitäten mithilfe der Navigationseigenschaft. Rufen Sie die AddObject-Methode für die verknüpfte Entität auf, nachdem Sie auf die Entität zugegriffen haben, indem Sie eine Navigationseigenschaft für die übergeordnete Entität verwenden.

UpdateObject

Ändert den Status der angegebenen Entität im OrganizationServiceContext auf "Geändert".

DeleteObject

Ändert den Status der zu löschenden Entität im OrganizationServiceContext.

Laden verknüpfter Entitäten mithilfe der Navigationseigenschaften

Verknüpfte Entitäten von Entitäten, die Sie mithilfe von LINQ abgerufen haben, weisen so lange einen Nullwerte auf, bis Sie LoadProperty verwenden, um sie abzurufen. Das folgende Codebeispiel zeigt, wie auf Aufgabendatensätze zugegriffen wird, die einem bestimmten Kontaktdatensatz zugeordnet sind.

Contact pam = context.ContactSet.Where(c => c.FirstName == "Pamela").FirstOrDefault();
if (pam != null)
{
// pam.Contact_Tasks is null until you use LoadProperty
    context.LoadProperty(pam, "Contact_Tasks");
    Task firstTask = pam.Contact_Tasks.FirstOrDefault();
}

Speichern von Änderungen mit der OrganizationServiceContext-Klasse

Der Organisationsdienstkontext enthält ein Diagramm der nachverfolgten Entitäten. Die Reihenfolge, in der der Organisationsdienstkontex Entitätsänderungen verarbeitet und an den Server übermittelt, ist wichtig. Zunächst werden die Aktualisierungen primärer Entitäten verarbeitet, anschließend die verknüpfter Entitäten. Wenn ein Wert in der primären Entität von der verknüpfte Entität festgelegt wird, wird dieser Wert verwendet, wenn Daten auf dem Server aktualisiert werden.

Wenn beim Speichern von Entitätsinformationen ein Fehler auftritt, wird ein neuer Ausnahmetyp, der das SaveChangesResult enthält, von der OrganizationServiceContext .SaveChanges-Methode erstellt, unabhängig von dem Wert des Parameters SaveChangesOptions, der an die Methode übergeben wird.

Verwenden virtueller Methoden, wenn der Kontext geändert wird

Manchmal kann es erforderlich sein, Aktionen basierend auf Änderungen des OrganizationServiceContext auszuführen. Um dies zu erleichtern, werden virtuelle Methoden bereitgestellt, die es ermöglichen, Vorgänge abzufangen bzw. eine entsprechende Benachrichtigung zu erhalten. Um diese Möglichkeiten nutzen zu können, müssen Sie entweder vom OrganizationServiceContext ableiten oder den generierten Organisationsdienstkontext ändern. Die folgende Tabelle listet die virtuellen Methoden auf.

Methode

Beschreibung

OnBeginEntityTracking

Aufgerufen nachdem eine Entität an den OrganizationServiceContext angefügt wurde.

OnBeginLinkTracking

Aufgerufen nachdem ein Link an den OrganizationServiceContext angefügt wurde.

OnEndEntityTracking

Aufgerufen nachdem eine Entität aus dem OrganizationServiceContext entfernt wurde.

OnEndLinkTracking

Aufgerufen nachdem ein Link aus dem OrganizationServiceContext entfernt wurde.

OnExecuting

Aufgerufen direkt bevor eine Abfrage an Microsoft Dynamics 365 Server gesendet wird.

OnExecute

Aufgerufen direkt nachdem eine Abfrage an Microsoft Dynamics 365 Server gesendet wurde, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht.

OnSavingChanges

Aufgerufen bevor ein Vorgang nach einem vom Aufruf von SaveChanges auftritt.

OnSaveChanges

Aufgerufen, wenn alle Vorgänge für einen Aufruf von SaveChanges abgeschlossen wurden, oder falls ein Fehler auftritt.

Siehe auch

IOrganizationService
OrganizationServiceContext
Verwenden Sie im Code die Entitätsklassen mit früher Bindung
Beispiel: Komplexe LINQ-Abfragen
Entitätsklassen mit früher Bindung mit dem Codegenerierungstool erstellen (CrmSvcUtil.exe)
Verwenden der Entitätsklassen mit früher Bindung zum Erstellen, Löschen und Aktualisieren

Microsoft Dynamics 365

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright