Benutzerdefinierte anbieter für virtuelle Tabellendaten

Mithilfe des Microsoft Dataverse Data SDK können .NET Entwickler benutzerdefinierte virtuelle Tabellendatenanbieter 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 Create-, Update-, RetrieveMultiple- und Delete-Vorgänge darstellen. Dieser Abschnitt enthält grundlegende Informationen zu Datenanbietern und Ansätzen zur Entwicklung von benutzerdefinierten Anbietern, einschließlich Beispielcode.

Hinweis

Anstatt einen benutzerdefinierten Datenquellenanbieter zu erstellen, sollten Sie die Datenquelle an einen vorhandenen Datenanbieter anpassen. Wenn Sie z. B. eine OData v4-Schnittstelle zu Ihrer externen Datenquelle erstellen, können Sie direkt auf sie zugreifen, indem Sie den bereitgestellten OData v4-Datenanbieter verwenden, der CRUD-Vorgänge unterstützt. Der Mechanismus zum Hinzufügen dieser REST-Schnittstelle variiert mit der zugrunde liegenden Datendiensttechnologie. Siehe z. B. 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

Sie können zwei allgemeine Kategorien von Datenanbietern erstellen, indem Sie die Assemblys des virtuellen Tabellendaten-SDK verwenden: generisch oder gezielt. In der folgenden Tabelle werden diese Ansätze beschrieben und mit dem Datenanbieterentwicklungsmodell übereinstimmen, das für jeden Ansatz am besten geeignet ist.

Kategorie Entwickler-Modell Beschreibung
Generisch „Bare Metal“-Anbieter Diese Anbieter übersetzen fetchXML-Abfrageausdrücke flexibel in die zugeordnete Anforderung an die externe Datenquelle und geben dann die resultierenden Datensätze zurück. Sie können einen solchen Anbieter für alle Instanzen dieses Datenquellentyps wiederverwenden. Diese Methode ist am allgemeinsten, jedoch kompliziert zu entwickeln. Wenn sich das Schema der Datenquelle ändert, müssen Sie nur die betroffenen virtuellen Tabellen neu zuordnen.
Ausgerichtet LINQ-Anbieter für bekanntes Schema Ein solcher Provider übersetzt Abfragen lediglich in den entsprechenden LINQ-Aufruf für eine bekannte, bereits vorhandene Datenquelleninstanz. Die Datenquelle muss ein LINQ-Anbieter sein, wie im Artikel Enabling a Data Source for LINQ Querying beschrieben. Diese Methode ist auf eine bestimmte Datenquelleninstanz eingeschränkt, es ist aber wesentlich weniger Codierung erforderlich. Wenn sich das Schema der Datenquelle ändert, müssen Sie den Datenanbieter aktualisieren und neu erstellen.

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

Schritte, um einen benutzerdefinierten Datenanbieter zu verwenden

Führen Sie die folgenden Schritte aus, um eine Lösung für einen virtuellen Tabellendatenanbieter zu erstellen, die Sie in Ihre Dataverse-Anwendungen importieren können:

  1. Entwickeln Sie die benutzerdefinierte Datenanbieter-Plug-In-DLL oder einen 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 finden Sie unter 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 als Plug-In, das Sie für die Ereignisse Create, Update, RetrieveMultiple und Delete registrieren. Jedes Ereignis enthält Informationen im Ausführungskontext, die die Art der zurückzugebenden Daten beschreibt.

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. Dataverse gibt dieses Ergebnis an den Benutzer zurück, 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 unterstützt Sie beim Konvertieren der von der Dataverse-Plattform zurückgegebenen Daten in die entsprechenden Entity oder EntityCollection von der Dataverse-Plattform erwarteten Typen.

Datenanbieterausnahmen

Wenn Ihr Code das erwartete Ergebnis nicht erreichen kann, lösen Sie den entsprechenden Fehler aus. 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 Fehler bei der Sicherheitsauthentifizierung beim externen Datenquellendienst; Beispiel: HTTP-Status 401, der vom externen Datendienst empfangen wurde. Tritt in der Regel auf, da der aktuelle Benutzer nicht über die richtigen Berechtigungen verfügt oder die Verbindungsinformationen in der zugeordneten EntityDataSource falsch sind.
EndpointException Die Endpunktkonfiguration in der Datenquellentabelle ist ungültig, oder der Endpunkt ist nicht vorhanden.
GenericDataAccessException Ein allgemeiner Datenzugriffsfehler, der verwendet wird, wenn der Fehler keiner spezifischeren Ausnahme zugeordnet ist.
InvalidMetadataException
InvalidQueryException Die angegebene Abfrage ist ungültig; Sie enthält beispielsweise eine ungültige Klauselnkombination oder einen nicht unterstützten 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

Verwenden Sie im Gegensatz zu einem normalen Plug-In das Plug-In-Registrierungstool (PRT), um die Assembly und die Plug-Ins für jedes Ereignis zu registrieren. Registrieren Sie keine bestimmten 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 Tabelle.

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

Wenn Sie die Definitionen für Ihre virtuelle Tabelle konfigurieren, registrieren Sie Ihre Plug-Ins mithilfe des PRT, und legen Sie die richtigen Konfigurationsdaten in der Tabelle "EntityDataProvider " fest. Ihre virtuelle Tabelle beginnt, auf Anfragen zu reagieren.

Weitere Informationen finden Sie unter 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 Artikeln 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