Freigeben über


Benutzerdefinierte anbieter für virtuelle Tabellendaten

Mithilfe des Microsoft Dataverse Data SDK haben .NET-Entwickler die Möglichkeit, benutzerdefinierte virtuelle Tabellendatenanbieter zu erstellen, um externe Datenquellentypen zu integrieren, die von einem vorhandenen Datenanbieter nicht unterstützt werden. Jeder Datenanbieter besteht aus einem wiederverwendbaren Satz von Dataverse-Plug-Ins, die die unterstützten CRUD-Vorgänge implementieren. Für jede virtuelle Tabelle, auch als virtuelle Entität bezeichnet, können Entwickler Plug-Ins erstellen und registrieren, die die einzelnen Vorgänge "Erstellen", "Aktualisieren", "Abrufen", "RetrieveMultiple" und "Löschen" darstellen. Dieser Abschnitt enthält grundlegende Informationen zu Datenanbietern und Ansätzen zur Entwicklung von benutzerdefinierten Anbietern, einschließlich Beispielcode.

Hinweis

Alternativ zum Erstellen eines benutzerdefinierten Datenquellenanbieters, sollten Sie erwägen, die Datenquelle an einen vorhandenen Datenanbieter anzupassen. Wenn Sie beispielsweise eine OData v4-Schnittstelle zu Ihrer externen Datenquelle erstellen, können Sie direkt mit dem bereitgestellten OData v4-Datenanbieter darauf zugreifen, der CRUD-Vorgänge ebenfalls unterstützt. Die Funktion zum Hinzufügen dieser REST-Schnittstelle variiert nach der zugrunde liegenden Datendiensttechnologie, beispielsweise WCF Data Services 4.5. OData hat breiten Branchesupport, mit einer breiten Palette von dedizierten von Tools und kompatiblen Technologien.

Voraussetzungen

Benutzerdefinierte Datenanbieter erfordern erhebliche Entwicklungsressourcen, um sie zu erstellen und zu warten. Sie benötigen mindestens grundlegende Kenntnisse der folgenden Bereiche:

Die Microsoft.Xrm.Sdk.Data.dll Assembly ist als NuGet-Paket verfügbar: Microsoft.CrmSdk.Data

Kategorien von Anbietern

Es gibt zwei allgemeine Kategorien von Datenanbietern, die Sie mit den Assemblys für virtuelle Tabellendaten-SDK erstellen können: generisch oder gezielt. Die folgende Tabelle beschreibt nur diese beiden Ansätze und ordnet sie dem Datenanbieterentwicklungsmodell zu, das für diesen Ansatz bestgeeignet ist.

Kategorie Entwickler-Modell Beschreibung
Generisch „Bare Metal“-Anbieter Diese Anbieter können FetchXML-Abfrageausdrücke flexibel in die zugeordnete Anforderung in die externe Datenquelle übersetzen und dann die resultierenden Datensätze zurückgeben. Solch ein Anbieter kann für alle Instanzen des Datenquellentyps wiederverwendet werden. Diese Methode ist am allgemeinsten, jedoch kompliziert zu entwickeln. Wenn sich das Schema der Datenquelle ändert, müssen die betroffenen virtuellen Tabellen nur neu zugeordnet werden.
Ausgerichtet LINQ-Anbieter für bekanntes Schema Ein solcher Anbieter übersetzt nur knapp Abfragen an den zugeordneten LINQ-Anruf an eine vertraute, vorhandene Datenquelleninstanz. Die Datenquelle sollte ein LINQ-Anbieter sein, wie in diesem Thema beschrieben Aktivieren einer Datenquelle für LINQ-Abfragen. Diese Methode ist auf eine bestimmte Datenquelleninstanz eingeschränkt, es ist aber wesentlich weniger Codierung erforderlich. Wenn das Schema der Datenquelle geändert wird, muss der Datenanbieter aktualisiert und neu erstellt werden.

Der Standard-OData v4-Datenanbieter und der Azure Cosmos DB-Datenanbieter sind Beispiele für generische Anbieter.

Schritte, um einen benutzerdefinierten Datenanbieter zu verwenden

Es gibt mehrere Schritte, die zum Erstellen einer Lösung für einen virtuellen Tabellendatenanbieter erforderlich sind, die in Ihre Dataverse-Anwendungen importiert werden kann:

  1. Entwickeln des benutzerdefinierten Datenanbieter-Plug-Ins in DLL (oder ein Satz von DLLs).
  2. Registrieren Sie den benutzerdefinierten Datenanbieter mit Ihrem Dataverse-Dienst mithilfe des Plug-In-Registrierungstools (PRT).
  3. Erstellen einer Datenanbieterlösung.
  4. Passen Sie die Datenquellentabelle an, um Ihren Datentyp oder ihre bestimmte Instanz widerzuspiegeln.
  5. Exportieren Sie die benutzerdefinierte Datenanbieterlösung.

Weitere Informationen : Beispiel: Benutzerdefinierter anbieter für virtuelle Tabellen mit CRUD-Vorgängen

Plug-In-Entwicklung

Da virtuelle Tabellen CRUD-Vorgänge unterstützen, schreiben Sie den Datenanbieter in Form eines Plug-Ins, das in den Ereignissen Create, Update, RetrieveMultiple und Delete registriert ist. Jedes jeweilige Ereignis enthält Informationen im Ausführungskontext, die die Art von Daten beschreiben, die zurückzugeben sind.

Event Ausführungskontext
Abrufen Beschreibt, welche Tabelle abgerufen werden soll, sowie die Spalten und alle verknüpften Tabellen, die einbezogen werden sollen.
RetrieveMultiple Enthält ein QueryExpression Objekt, das die Abfrage definiert. Das Framework enthält eine QueryExpressionVisitor-Klasse, die dazu konzipiert ist, um verschiedene Teile der Abfrageausdruckstruktur zu überprüfen.

Für beide Ereignisse müssen Sie:

  1. Konvertieren Sie die entsprechenden Informationen im Ausführungskontext in eine Abfrage, die für Ihre externe Datenquelle funktioniert.
  2. Abrufen von Daten aus dem externen System.
  3. Konvertieren Sie für Abrufen die Daten in ein Entity; andernfalls konvertieren Sie sie für RetrieveMultiple in ein EntityCollection. Dieses Ergebnis wird über die Dataverse-Plattform an den Benutzer zurückgegeben, der die Abfrage ausführt.

Die Klassen im Microsoft.Xrm.Sdk.Data Namespace stellen ein Framework bereit, das bei der Zuordnung der Dataverse-Abfrageinformationen aus dem Ausführungskontext zu einer Abfrage im Format unterstützt, das für Ihre externe Datenquelle geeignet ist. Dieses Framework hilft Ihnen, die von der Dataverse-Plattform erwarteten Daten in die entsprechenden Entity oder EntityCollection Typen zu konvertieren.

Datenanbieterausnahmen

Wenn aus irgendeinem Grund Ihr Code nicht das erwartete Ergebnis erzielen kann, müssen Sie den entsprechenden Fehler auslösen. Der Microsoft.Xrm.Sdk.Data.Exceptions Namespace enthält die folgenden Ausnahmeklassen, die von SdkExceptionBasediesem abgeleitet werden, die Sie für diesen Zweck verwenden können:

Ausnahme-Klasse Beschreibung
AuthenticationException Ein Fehler ist bei der Sicherheitsauthentifizierung für den externem auf Datenquellenservice aufgetreten, z. B. HTTP-Status 401 wird von externe Datenservice erhalten. Tritt in der Regel auf, weil der aktuelle Benutzer nicht die erforderlichen Rechte hat, oder die zugeordneten Informationen in EntityDataSource sind false.
EndpointException Die Endpunktkonfiguration in der Datenquellentabelle ist ungültig, oder der Endpunkt ist nicht vorhanden.
GenericDataAccessException Ein allgemeiner Datenzugriffsfehler ist aufgetreten, wird verwendet, wenn der Fehler nicht einer bestimmteren Ausnahme zugeordnet ist.
InvalidMetadataException
InvalidQueryException Die angegebene Abfrage ist ungültig; beispielsweise eine ungültige die Klauselkombination oder ein nicht unterstützter Vergleichsoperator.
ObjectNotFoundException Der angegebene Datensatz in der externen Datenquelle ist nicht vorhanden.
TimeoutException Der externe Vorgang wurde nicht innerhalb der zulässigen Zeit abgeschlossen; Beispielsweise das Ergebnis eines HTTP-Status 408 aus dem externen Datendienst.

Plug-In-Registrierung

Im Gegensatz zu einem normalen Plug-In verwenden Sie nur das Plug-In-Registrierungstool (PRT), um die Assembly und die Plug-Ins für jedes Ereignis zu registrieren. Sie registrieren nicht bestimmte Schritte. Ihr Plug-In wird in Phase 30 ausgeführt, der Haupttransaktionsstufe für den Vorgang, der für gewöhnliche Plug-In-Schritte nicht verfügbar ist. Anstatt Schritte zu registrieren, konfigurieren Sie Ihren Datenanbieter mithilfe der folgenden Tabellen.

Tabelle Beschreibung
EntityDataProvider Definiert die Plug-Ins, die für jedes Ereignis und den logischen Namen der Datenquelle verwendet werden sollen.

Wenn die Definitionen für Ihre virtuelle Tabelle konfiguriert sind, werden Ihre Plug-Ins mithilfe des PRT registriert, und die richtigen Konfigurationsdaten werden in der Tabelle "EntityDataProvider " festgelegt, beginnt die virtuelle Tabelle mit der Antwort auf Anforderungen.

Weitere Informationen: Erstellen von Datenanbietern und Hinzufügen von Plug-Ins zum Anbieter

Debuggen von Plug-Ins

Ein benutzerdefinierter Anbieter für virtuelle Tabellen ist ein Plug-In-Typ. Verwenden Sie die Informationen in diesen Themen zum Debuggen von Plug-Ins für benutzerdefinierte virtuelle Tabellenanbieter: Debuggen von Plug-Ins und Lernprogramm: Debuggen eines Plug-Ins.

Siehe auch

Erste Schritte mit virtuellen Tabellen
API-Überlegungen zu virtuellen Tabellen
Beispiel: Generisches Plug-In für virtuelle Tabellendatenanbieter