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

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

注意

カスタム データ ソース プロバイダー作成の代替策として、既存のデータ データ プロバイダー対するデータ ソースの調整を検討する必要があります。 たとえば、外部データ ソースに対して 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 操作をサポートしているため、作成更新取得RetrieveMultiple削除 イベントで登録されたプラグインの形式でデータ プロバイダーを記述します。 各イベントには、戻すデータの種類を説明する実行コンテキスト内の情報が含まれます。

イベント 実行コンテキスト
取得 取得するテーブルと共に、含める列および関連テーブルについて説明します。
RetrieveMultiple クエリを定義する 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 で実行します。 ステップを登録する代わりに、次のテーブルを使用して、データ プロバイダーを構成します。

テーブル 説明
EntityDataProvider 各イベントで使用するプラグインおよびデータ ソースの論理名を定義します。

仮想テーブルの定義が設定され、PRT を使ってプラグインが登録され、正しい設定データが EntityDataProvider テーブルに設定されると、仮想テーブルが要求に応答するようになります。

詳細: データ プロバイダーを作成し、プロバイダーにプラグインを追加する

プラグインのデバッグ

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

関連項目

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

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。