テーブル定義システムに対する 2 つの大きなカテゴリの変更は、Microsoft Dataverse での仮想テーブル (仮想エンティティとも呼ばれます) の導入に関連付けられています。
- カスタム仮想テーブル データ プロバイダーの開発をサポートするための新しいアセンブリ、名前空間、クラス、およびその他の型の追加
- 外部データ ソース マッピングをサポートするその他のプロパティ、この機能の初期実装の制限を反映した既存のテーブルおよび列プロパティの動作の変更など、コア プラットフォームへの変更
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 と Status はサポートされていません。 |
| EntityColor | 有効な | |
| EntityHelpUrl | 有効な | |
| EntityHelpUrlEnabled | 有効な | |
| EntitySetName | 有効な | |
| ExtensionData | 無効 | 廃止されたプロパティ |
| HasChanged | 有効な | |
| IconLargeName | 有効な | |
| IconMediumName | 有効な | |
| IconSmallName | 有効な | |
| IntroducedVersion | 有効な | |
| IsActivity | 無効 | アクティビティは常に false でサポートされていません。 |
| IsActivityParty | 無効 | 常時 false |
| IsAIRUpdated | 無効 | Deprecated |
| IsAuditEnabled | 無効 | 常に「false」であり、監査はサポートされていません。 |
| IsAvailableOffline | 無効 | 常に falseのため、オフライン使用はサポートされていません。 |
| IsBusinessProcessEnabled | 無効 | 常に偽であり、ビジネスプロセスはサポートされていません。 |
| IsChildEntity | 無効 | 常に false であり、すべての仮想テーブルは組織で所有されます。 |
| IsConnectionsEnabled | 有効な | |
| IsCustomEntity | 有効な | |
| IsCustomizable | 有効な | |
| IsDocumentManagementEnabled | 有効な | |
| IsDocumentRecommendationsEnabled | 無効 | 常時false、この新しい機能はサポートされていません。 |
| IsDuplicateDetectionEnabled | 無効 | 常時 false、しかし重複データ検出はソース データで実行できます。 |
| IsEnabledForCharts | 制限あり | サポートされた Fetch 句のみ。 |
| IsEnabledForTrace | 有効な | |
| IsImportable | 有効な | |
| IsInteractionCentricEnabled | 有効な | |
| IsIntersect | 有効な | |
| IsKnowledgeManagementEnabled | 無効 | 常に「false」であり、ナレッジ管理の統合はサポートされていません。 |
| IsMailMergeEnabled | 有効な | |
| IsManaged | 有効な | |
| IsMappable | 有効な | |
| IsOfflineInMobileClient | 無効 | 常に false であり、仮想テーブルの値はオフラインで使用するためにキャッシュされません。 |
| 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 で、計算値やロールアップ値はサポートされていません。 |
こちらも参照ください
仮想エンティティを始める
カスタム仮想テーブル データ プロバイダー
サンプル: 汎用仮想テーブル データ プロバイダー プラグイン