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

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

注

カスタム データ ソース プロバイダーを作成する代わりに、既存のデータ プロバイダーにデータ ソースを適応することを検討してください。 たとえば、外部データ ソースへの OData v4 インターフェイスを作成する場合は、CRUD 操作をサポートする標準の OData v4 Data Providerを使用して直接アクセスできます。 この 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 操作をサポートしているため、作成、更新、取得、RetrieveMultiple、および 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 に関する考慮事項
サンプル: 汎用仮想テーブル データ プロバイダー プラグイン