Microsoft Dataverse での仮想テーブル (仮想エンティティとも呼ばれます) の導入に関連付けられているテーブル定義システムには、次の 2 つの大きなカテゴリの変更があります。
- カスタム仮想テーブル データ プロバイダーの開発をサポートするための新しいアセンブリ、名前空間、クラス、およびその他の型の追加
- 外部データ ソース マッピングをサポートするための追加のプロパティや、この機能の初期実装の制限を反映した既存のテーブルおよび列プロパティの動作の変更など、コア プラットフォームへの変更
Dynamics 365 Data SDK アセンブリ
Dynamics 365 Data SDK アセンブリ Microsoft.Xrm.Sdk.Data.dllには、カスタム仮想テーブル データ プロバイダーの作成に役立つ型が含まれています。 次の名前空間で構成されます:
| Namespace | Description |
|---|---|
| Microsoft.Xrm.Sdk.Data | AllowedQueryOptions 列挙などのいくつかの一般的な種類を含むベースの名前空間 |
| Microsoft.Xrm.Sdk.Data.CodeGen | 動的リフレクション、種類の一致、およびコードの生成をサポートするクラスとインターフェイスが含まれます。 主に内部プロバイダー エンジンによって使用されます。 |
| Microsoft.Xrm.Sdk.Data.Converters | 標準 XRM タイプを対応する .NET 基本タイプに変換する一連のクラス |
| Microsoft.Xrm.Sdk.Data.Exceptions | ランタイム値の解決時に発生する可能性のあるエラーを表す例外クラスのセット。 すべては Microsoft.Xrm.Sdk.SdkExceptionBase から派生しています。 |
| Microsoft.Xrm.Sdk.Data.Expressions | FILTER、JOIN、および ORDER などのサポートされているクエリ変換の実装を支援するクラス。 |
| Microsoft.Xrm.Sdk.Data.Mappings | 仮想テーブル定義型から外部型へのマッピングを構築するクラスとインターフェイス。 |
| Microsoft.Xrm.Sdk.Data.Visitors | RetrieveMultiple 中に ビジター パターン を実装して、データ プロバイダーに渡される QueryExpression パラメーター上で特定の操作を実行するクラス。 一般的なクエリと LINQ ベースの処理の両方に特定のサポートを提供します。 これらのクラスは Microsoft.Xrm.Sdk.Query.QueryExpressionVisitorBase から派生しています。 |
このアセンブリは NuGet パッケージとして配布されます: Microsoft.CrmSdk.Data
コア プラットフォームへの変更
仮想テーブルをサポートするために、標準の Dataverse 参照型に対する次の変更が導入されました。
新しいテーブル
Dataverse は、 EntityDataProvider と EntityDataSource のテーブルとして、仮想テーブルのデータ プロバイダーとソースを公開します。
新しいテーブル定義プロパティ
EntityMetadata クラスに 4 つの新しいプロパティが追加されました。
| プロパティ | Description |
|---|---|
| DataProviderId | 関連付けられている仮想テーブル データ プロバイダーを識別する GUID |
| DataSourceId | 関連付けられている仮想テーブル データ ソースを識別する GUID |
| ExternalName | 外部データ ソース内のこのタイプの名前 |
| ExternalCollectionName | UI で使用され、OData アクセスをサポートする、この種類の複数名 |
AttributeMetadata クラスに 2 つの新しいプロパティが追加されました。
| プロパティ | Description |
|---|---|
| ExternalName | 外部データソース内の型の名前 |
| IsDataSourceSecret | フィールドに機密情報が含まれているかどうかを示します |
ExternalName プロパティは、OptionMetadataクラスと OptionSetMetadata クラスにも追加されました。 これらの外部名は、外部データ ソースに関連付けられている型の名前を指定することで、外部データ ソースマッピングを支援します。 これらのプロパティは、仮想テーブルにのみ使用されます。組み込みまたは標準のカスタム エンティティ型の場合、これらの外部名は nullする必要があります。
仮想テーブルの作成
仮想テーブルの種類をプログラムで作成する方法は、次の点で標準のカスタム エンティティ型の作成とは若干異なります。
- 関連付けられたデータ プロバイダー (およびオプションのデータ ソース) が作成時にわかっている場合は、これらが指定されます。
- この種類のデータ プロバイダーがわからない場合は、最低でも、DataProviderId は
7015A531-CC0D-4537-B5F2-C882A1EB65ADに設定し、DataSourceId はnullに設定します。 実行時にこの種類のインスタンスを使用する前に、これらのプロパティに適切な値を割り当てる必要があります。
プラグインを登録すると、 EntityDataProvider と必要に応じて EntityDataSource の 2 つの新しいテーブルが作成され、それぞれの ID、 entitydataproviderid 、 entitydatasourceidは、これらの必要な GUID を表します。 (そうしないと、開発者がこれらのカスタム型に直接アクセスする必要はほとんどありません)。DataSource には、対応する DataProvider 型と一致する必要があるプロパティ entitydataproviderid が含まれているか、ランタイム例外がスローされることに注意してください。
Warnung
標準 (非仮想) テーブルでは、関連付けられている DataProviderId の値を持つ必要があり、 DataSourceId 既定値 (null) に設定されている必要があります。それ以外の場合は、ランタイム例外がスローされます。 作成される、非仮想の種類を仮想の種類に変換したり、またはその逆を行うことはできません。
テーブル定義プロパティの動作の変更
次の表では、仮想テーブルに適用されるときに標準 の EntityMetadata プロパティ の動作がどのように変更されるかについて詳しく説明します。 仮想テーブルでは無効なプロパティもあれば、スコープまたは値が制限されているプロパティもあります。
| メタデータ プロパティ | 適用? | Notes |
|---|---|---|
| ActivityTypeMask | 無効 | 常時 0 |
| Attributes | 有効な | |
| AutoCreateAccessTeams | 無効 | 常時 false |
| AutoRouteToOwnerQueue | 無効 | 常時 false、キューはサポートされていません。 |
| CanBeInManyToMany | 有効な | |
| CanBePrimaryEntityInRelationship | 有効な | |
| CanBeRelatedEntityInRelationship | 有効な | |
| CanChangeHierarchicalRelationship | 無効 | 常時 false、階層型の関連付けはサポートされていません。 |
| CanChangeTrackingBeEnabled | 無効 | 常時 false、変更の追跡および値の監査はサポートされていません。 |
| CanCreateAttributes | 有効な | |
| CanCreateCharts | 無効 | 常時 false |
| CanCreateForms | 有効な | |
| CanCreateViews | 有効な | |
| CanEnableSyncToExternalSearchIndex | 無効 | 常時 false |
| CanModifyAdditionalSettings | 有効な | |
| CanTriggerWorkflow | 無効 | 常時 false、ワークフローはトリガーできません。 |
| ChangeTrackingEnabled | 無効 | 常時 false |
| CollectionSchemaName | 有効な | |
| DaysSinceRecordLastModified | 無効 | 常時 null または 0 |
| Description | 有効な | |
| DisplayCollectionName | 有効な | |
| DisplayName | 有効な | |
| EnforceStateTransitions | 無効 | StateCode とステータスはサポートされていません。 |
| EntityColor | 有効な | |
| EntityHelpUrl | 有効な | |
| EntityHelpUrlEnabled | 有効な | |
| EntitySetName | 有効な | |
| ExtensionData | 無効 | 廃止されたプロパティ |
| HasChanged | 有効な | |
| IconLargeName | 有効な | |
| IconMediumName | 有効な | |
| IconSmallName | 有効な | |
| IntroducedVersion | 有効な | |
| IsActivity | 無効 | 常時 false、アクティビティはサポートされていません。 |
| IsActivityParty | 無効 | 常時 false |
| IsAIRUpdated | 無効 | Deprecated |
| IsAuditEnabled | 無効 | 常時 false、監査はサポートされていません。 |
| IsAvailableOffline | 無効 | 常時 false、オフラインでの使用はサポートされていません。 |
| IsBusinessProcessEnabled | 無効 | 常時 false、ビジネスプロセスはサポートされていません。 |
| IsChildEntity | 無効 | 常に false であり、すべての仮想テーブルは組織で所有されます。 |
| IsConnectionsEnabled | 有効な | |
| IsCustomEntity | 有効な | |
| IsCustomizable | 有効な | |
| IsDocumentManagementEnabled | 有効な | |
| IsDocumentRecommendationsEnabled | 無効 | 常時false、この新しい機能はサポートされていません。 |
| IsDuplicateDetectionEnabled | 無効 | 常時 false、しかし重複データ検出はソース データで実行できます。 |
| IsEnabledForCharts | 制限あり | サポートされた Fetch 句のみ。 |
| IsEnabledForTrace | 有効な | |
| IsImportable | 有効な | |
| IsInteractionCentricEnabled | 有効な | |
| IsIntersect | 有効な | |
| IsKnowledgeManagementEnabled | 無効 | 常時 false、ナレッジ マネージメントの統合はサポートされていません。 |
| IsMailMergeEnabled | 有効な | |
| IsManaged | 有効な | |
| IsMappable | 有効な | |
| IsOfflineInMobileClient | 無効 | 常に偽であるため、仮想テーブルの値はオフライン用にキャッシュされません。 |
| IsOneNoteIntegrationEnabled | 有効な | |
| IsOptimisticConcurrencyEnabled | 無効 | 常時 false、同時実行をデータ ソースで実行する必要があります。 |
| IsPrivate | 有効な | |
| IsQuickCreateEnabled | 有効な | |
| IsReadOnlyInMobileClient | 有効な | |
| IsRenameable | 有効な | |
| IsSLAEnabled | 無効 | 常時 false |
| IsStateModelAware | 無効 | |
| IsValidForAdvancedFind | 有効な | |
| IsValidForQueue | 有効な | |
| IsVisibleInMobile | 有効な | |
| IsVisibleInMobileClient | 有効な | |
| Keys | 無効 | 代替キーはサポートされていません。 |
| LogicalCollectionName | 有効な | |
| LogicalName | 有効な | |
| ManyToManyRelationships | 有効な | |
| ManyToOneRelationships | 有効な | 2 つの仮想テーブル間ではサポートされていません。 |
| MetadataId | 有効な | |
| MobileOfflineFilters | 無効 | 常時 false、オフラインでの使用はサポートされていません。 |
| ObjectTypeCode | 有効な | |
| OneToManyRelationships | 有効な | |
| OwnershipType | 無効 | 常時 OrganizationOwned |
| PrimaryIdAttribute | 有効な | |
| PrimaryImageAttribute | 有効な | |
| PrimaryNameAttribute | 有効な | |
| 特権 | 無効 | |
| RecurrenceBaseEntityLogicalName | 無効 | |
| ReportViewName | 無効 | |
| SchemaName | 有効な | |
| SyncToExternalSearchIndex | 無効 |
列定義プロパティの動作の変更
次の表では、仮想テーブルに適用されるときに標準の AttributeMetadata プロパティ の動作がどのように変更されるかについて説明します。 仮想テーブルでは無効なプロパティもあれば、スコープまたは値が制限されているプロパティもあります。
| メタデータ プロパティ | 適用? | Notes |
|---|---|---|
| ColumnNumber | 無効 | |
| DeprecatedVersion | 有効な | |
| Description | 有効な | |
| DisplayName | 有効な | |
| EntityLogicalName | 有効な | |
| ExtensionData | 無効 | |
| HasChanged | 有効な | |
| InheritsFrom | 有効な | |
| IntroducedVersion | 有効な | |
| IsAuditEnabled | 無効 | 常時 false、監査はサポートされていません。 |
| IsCustomAttribute | 有効な | |
| IsCustomizable | 有効な | |
| IsFilterable | 有効な | |
| IsGlobalFilterEnabled | 有効な | |
| IsLogical | 有効な | |
| IsManaged | 有効な | |
| IsPrimaryId | 有効な | |
| IsPrimaryName | 有効な | |
| IsRenameable | 有効な | |
| IsSearchable | 有効な | |
| IsSecured | 無効 | 常時 false、フィールドレベルのセキュリティはサポートされていません。 |
| IsSortableEnabled | 有効な | |
| IsValidForAdvancedFind | 有効な | |
| IsValidForCreate | 有効な | |
| IsValidForRead | 有効な | |
| IsValidForUpdate | 有効な | |
| LinkedAttributeId | 有効な | |
| LogicalName | 有効な | |
| MetadataId | 有効な | |
| 必須レベル | 有効な | |
| SchemaName | 有効な | |
| ソースタイプ | 無効 | 常時 0、計算されたまたはロールアップ値はサポートされていません。 |
こちらも参照ください
仮想エンティティを始める
カスタム仮想テーブル データ プロバイダー
サンプル: 汎用仮想テーブル データ プロバイダー プラグイン