Microsoft Dataverse Data SDK を使用すると、.NET開発者はカスタム仮想テーブル データ プロバイダーを作成して、既存のデータ プロバイダーでサポートされていない外部データ ソースの種類を統合できます。 各データ プロバイダーは、サポートされている CRUD 操作を実装する Dataverse プラグインの再利用可能なセットで構成されます。 開発者は、仮想エンティティとも呼ばれる各仮想テーブルについて、プラグインを作成し、作成、更新、取得、RetrieveMultiple、および Delete の各操作を表すプラグインを登録できます。 このセクションでは、データ プロバイダーに関する基本的な情報と、コード例など、カスタム プロバイダーを開発するためのアプローチについて説明します。
注
カスタム データ ソース プロバイダーを作成する代わりに、既存のデータ プロバイダーにデータ ソースを適応することを検討してください。 たとえば、外部データ ソースへの OData v4 インターフェイスを作成する場合は、CRUD 操作をサポートする標準の OData v4 Data Providerを使用して直接アクセスできます。 この REST インターフェイスを追加するメカニズムは、基になるデータ サービス テクノロジによって異なります。 たとえば、 WCF Data Services 4.5 を参照してください。 OData は広範囲に及ぶ専用ツールおよび互換性技術を持ち、業界からの広い支持を得ています。
[前提条件]
カスタム データ プロバイダーには、作成および管理のための実質的開発リソースが必要です。 次の領域の基本的な知識が必要です。
- 外部データ ソース スキーマおよび関連するデータ アクセスの技術。 このドメインに関する知識は、外部データ ソースの種類特有です。
- データバース定義スキーマ: 詳細情報: コードを使用してテーブルと列の定義を操作します。
- Dataverse イベント フレームワーク: 詳細情報: Event Framework。
- Dataverse プラグインのアーキテクチャと開発: 詳細情報: プラグインを 使用してビジネス プロセスを拡張する。
Microsoft.Xrm.Sdk.Data.dll アセンブリは、NuGet パッケージとして使用できます: Microsoft.CrmSdk.Data
プロバイダのカテゴリ
仮想テーブル データ SDK アセンブリを使用して、汎用または対象の 2 つの一般的なカテゴリのデータ プロバイダーを作成できます。 次の表では、これらのアプローチについて説明し、各アプローチに最適なデータ プロバイダー開発モデルと一致します。
| カテゴリ | Dev モデル | 説明 |
|---|---|---|
| ジェネリック | 「ベアメタル」プロバイダー | これらのプロバイダーは、FetchXML クエリ式を関連する要求に柔軟に外部データ ソースに変換し、結果のレコードを返します。 このようなプロバイダーは、このデータ ソース型のすべてのインスタンスで再利用できます。 このアプローチは最も一般的ですが、開発はより複雑になります。 データ ソースのスキーマが変更された場合は、影響を受ける仮想テーブルを再マップするだけで済みます。 |
| 対象を絞った | 既知のスキーマの LINQ プロバイダー | このようなプロバイダーは、既知の既存のデータ ソース インスタンスに関連付けられた LINQ 呼び出しにクエリを狭く変換します。 データ ソースは、LINQ クエリのデータ ソースの有効化に関する記事の説明に従って LINQ プロバイダーである必要があります。 このアプローチは特定のデータ ソースのインスタンスに制限されますが、コーディングの必要が少なくなります。 データ ソースのスキーマが変更された場合は、データ プロバイダーを更新して再構築する必要があります。 |
標準の OData v4 データ プロバイダーと Azure Cosmos DB データ プロバイダーは、汎用プロバイダーの例です。
カスタム データ プロバイダーを使用する手順
Dataverse アプリケーションにインポートできる仮想テーブル データ プロバイダー ソリューションを作成するには、次の手順を実行します。
- カスタム データ プロバイダー プラグイン DLL または DLL のセットを開発します。
- プラグイン登録ツール (PRT) を使用して、カスタム データ プロバイダーを Dataverse サービスに登録します。
- データ プロバイダー ソリューションを作成します。
- データ型または特定のインスタンスを反映するようにデータ ソース テーブルをカスタマイズします。
- カスタム データ プロバイダー ソリューションをエクスポートします。
詳細については、「 サンプル: CRUD 操作を使用したカスタム仮想テーブル プロバイダー」を参照してください。
プラグインの開発
仮想テーブルは CRUD 操作をサポートしているため、作成、更新、取得、RetrieveMultiple、および Delete イベントに登録するプラグインとしてデータ プロバイダーを記述します。 各イベントには、返されるデータの種類を説明する情報が実行コンテキストに含まれます。
| イベント | 実行コンテキスト |
|---|---|
| 取得 | 取得するテーブルと、含める列および関連テーブルについて説明します。 |
| リトリーブ マルチプル | クエリを定義する QueryExpression オブジェクトを格納します。 フレームワークには、クエリ式ツリーの異なる部分を参照するように設計された QueryExpressionVisitor クラスが含まれます。 |
両方のイベントについて、次の手順を実行する必要があります。
- 実行コンテキスト内のそれぞれの情報を、外部データ ソースに対して機能するクエリに変換します。
- データを外部システムから取得します。
- [取得] では、データを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 に関する考慮事項
サンプル: 汎用仮想テーブル データ プロバイダー プラグイン