次の方法で共有


カスタム仮想テーブル データ プロバイダー

.NET 開発者は、Microsoft Dataverse Data SDK を使用して、既存のデータ プロバイダーでサポートされていない外部データ ソースの種類を統合するために、カスタム仮想テーブル データ プロバイダーを作成できます。 各データ プロバイダーは、サポートされている CRUD 操作を実装する Dataverse プラグインの再利用可能なセットで構成されます。 仮想エンティティとも呼ばれる仮想テーブルごとに、開発者はプラグインを作成し、作成更新、取得、RetrieveMultipleDelete の各操作を表すプラグインを登録できます。 このセクションでは、データ プロバイダーに関する基本的な情報と、コード例など、カスタム プロバイダーを開発するためのアプローチについて説明します。

カスタム データ ソース プロバイダー作成の代替策として、既存のデータ データ プロバイダー対するデータ ソースの調整を検討する必要があります。 たとえば、外部データ ソースへの OData v4 インターフェイスを作成する場合は、CRUD 操作もサポートする、提供された標準の OData v4 データ プロバイダーを使用して直接アクセスできます。 この REST インターフェイスを追加するメカニズムは、基盤となるデータ サービス テクノロジにより異なります。たとえば、WCF Data Services 4.5 を参照してください。 OData は広範囲に及ぶ専用ツールおよび互換性技術を持ち、業界からの広い支持を得ています。

[前提条件]

カスタム データ プロバイダーには、作成および管理のための実質的開発リソースが必要です。 次の領域の基本的な知識が必要です。

Microsoft.Xrm.Sdk.Data.dll アセンブリは、NuGet パッケージとして使用できます: Microsoft.CrmSdk.Data

プロバイダのカテゴリ

仮想テーブル データ SDK アセンブリを使用して作成できるデータ プロバイダーには、汎用または対象の 2 つの一般的なカテゴリがあります。 以下の表はこれらのアプローチを説明し、そのアプローチに最適なデータ プロバイダー開発モデルを照合します。

カテゴリ Dev モデル 説明
ジェネリック 「地金」プロバイダ これらのプロバイダーは、FetchXML クエリ式を関連する要求に柔軟に外部データ ソースに変換し、結果のレコードを返すことができます。 このようなプロバイダーは、このデータ ソースの種類のすべてのインスタンスで再使用することができます。 このアプローチは最も一般的ですが、開発はより複雑になります。 データ ソースのスキーマが変更された場合は、影響を受ける仮想テーブルのみを再マップする必要があります。
対象範囲の限定 既知のスキーマの LINQ プロバイダー このようなプロバイダーは、関連する LINQ コールに対するクエリのみを、既知の、既存データ ソースのインスタンスに変換します。 LINQ 照会に対してデータ ソースを有効にする のトピックスで説明されているように、データ ソースは LINQ プロバイダーである必要があります。 このアプローチは特定のデータ ソースのインスタンスに制限されますが、コーディングの必要が少なくなります。 データ ソースのスキーマを変更する場合、プロバイダーを更新および再作成する必要があります。

標準の OData v4 データ プロバイダーと Azure Cosmos DB データ プロバイダーは、汎用プロバイダーの例です。

カスタム データ プロバイダーを使用する手順

Dataverse アプリケーションにインポートできる仮想テーブル データ プロバイダー ソリューションを作成するには、いくつかの手順が必要です。

  1. カスタム データ プロバイダー プラグイン DLL (または一連の DLL) を開発します。
  2. プラグイン登録ツール (PRT) を使用して、カスタム データ プロバイダーを Dataverse サービスに登録します。
  3. データ プロバイダー ソリューションを作成します。
  4. データ型または特定のインスタンスを反映するようにデータ ソース テーブルをカスタマイズします。
  5. カスタム データ プロバイダー ソリューションをエクスポートします。

詳細情報: サンプル: CRUD 操作を使用したカスタム仮想テーブル プロバイダー

プラグインの開発

仮想テーブルは CRUD 操作をサポートするため、Create、UpdateRetrieveRetrieveMultiple、Delete イベントに登録されているプラグインの形式でデータ プロバイダーを記述します。 各イベントには、戻すデータの種類を説明する実行コンテキスト内の情報が含まれます。

イベント 実行コンテキスト
取得 取得するテーブルと、含める列および関連テーブルについて説明します。
リトリーブ マルチプル クエリを定義する QueryExpression オブジェクトを格納します。 フレームワークには、クエリ式ツリーの異なる部分を参照するように設計された QueryExpressionVisitor クラスが含まれます。

両方のイベントで、以下の内容が必要です。

  1. 実行コンテキスト内のそれぞれの情報を、外部データ ソースに対して機能するクエリに変換します。
  2. データを外部システムから取得します。
  3. [取得] では、データをEntityに変換します。それ以外の場合は、RetrieveMultiple の場合はEntityCollectionに変換します。 この結果は、クエリを実行しているユーザーに Dataverse プラットフォームを介して返されます。

Microsoft.Xrm.Sdk.Data名前空間のクラスは、実行コンテキストからの Dataverse クエリ情報を外部データ ソースに適した形式でクエリにマッピングするのに役立つフレームワークを提供します。 このフレームワークは、返されたデータを、Dataverse プラットフォームで想定される適切な Entity または EntityCollection 型に変換するのに役立ちます。

データ プロバイダーの例外

何らかの理由で期待した結果をコードが実現できない場合、適切なエラーをスローする必要があります。 Microsoft.Xrm.Sdk.Data.Exceptions名前空間には、この目的で使用できる、SdkExceptionBaseから派生した次の例外クラスが含まれています。

例外クラス 説明
AuthenticationException エラーは外部データ ソース サービスに対するセキュリティ認証中に発生します。たとえば、外部データ サービスから受け取る HTTP ステータス 401 です。 通常、現在のユーザーが適切な特権を持たない場合、または関連付けられた EntityDataSource の接続情報が不正確であるために発生します。
EndpointException データ ソース テーブルのエンドポイント構成が無効であるか、エンドポイントが存在しません。
GenericDataAccessException 一般的なデータ 悪性 エラーで、エラーがより具体的な例外に対してマッピングされない時に使用します。
InvalidMetadataException
InvalidQueryException 指定されたクエリが無効です。たとえば無効な句の組み合わせ、またはサポートされていない比較演算子です。
ObjectNotFoundException 外部データ ソースで指定されたレコードが存在しません。
TimeoutException 外部操作は、許可された時間内に完了しませんでした。たとえば、外部データ サービスからの HTTP 状態 408 の結果などです。

プラグイン登録

通常のプラグインとは異なり、プラグイン登録ツール (PRT) を使用して、各イベントのアセンブリとプラグインを登録するだけです。 特定のステップは登録しません。 プラグインは、通常のプラグイン手順では使用できない操作のメイン コア トランザクション ステージであるステージ 30 で実行されます。 手順を登録する代わりに、次の表を使用してデータ プロバイダーを構成します。

テーブル 説明
エンティティデータプロバイダ 各イベントに使用するプラグインと、データ ソースの論理名を定義します。

仮想テーブルの定義が構成されると、プラグインは PRT を使用して登録され、 EntityDataProvider テーブルに正しい構成データが設定されると、仮想テーブルは要求への応答を開始します。

詳細情報: データ プロバイダーの作成とプロバイダーへのプラグインの追加

プラグインのデバッグ

カスタム仮想テーブル プロバイダーは、プラグインの一種です。 カスタム仮想テーブル プロバイダーのプラグインをデバッグするには、次のトピックの情報を使用します。 プラグインのデバッグチュートリアル: プラグインのデバッグ

こちらも参照ください

仮想テーブルの使用を開始する
仮想テーブルの API に関する考慮事項
サンプル: 汎用仮想テーブル データ プロバイダー プラグイン