Microsoft Dataverse에서 가상 테이블(가상 엔터티라고도 함)의 도입과 관련된 테이블 정의 시스템에 대한 두 가지 광범위한 변경 내용이 있습니다.
- 사용자 지정 가상 테이블 데이터 공급자 개발을 지원하기 위해 새 어셈블리, 네임스페이스, 클래스 및 기타 형식 추가
- 외부 데이터 원본 매핑을 지원하는 몇 가지 추가 속성 및 이 기능의 초기 구현에 대한 제한 사항을 반영하는 기존 테이블 및 열 속성의 동작 수정을 포함하여 핵심 플랫폼에 대한 변경 내용
Dynamics 365 Data SDK 어셈블리
Dynamics 365 Data SDK 어셈블리 Microsoft.Xrm.Sdk.Data.dll에는 사용자 지정 가상 테이블 데이터 공급자를 만드는 데 도움이 되는 형식이 포함되어 있습니다. 다음 네임스페이스로 구성됩니다.
| 네임스페이스 | 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.
새 테이블 정의 속성
클래스에 4개의 새 속성이 EntityMetadata 추가되었습니다.
| 재산 | Description |
|---|---|
| DataProviderId | 연결된 가상 테이블 데이터 공급자를 식별하는 GUID |
| DataSourceId | 연결된 가상 테이블 데이터 원본을 식별하는 GUID |
| ExternalName | 외부 데이터 원본의 이 유형의 이름 |
| ExternalCollectionName | UI에 사용되고 OData 액세스를 지원하는 이 형식의 복수 이름 |
클래스에 두 개의 새 속성이 AttributeMetadata 추가되었습니다.
| 재산 | Description |
|---|---|
| ExternalName | 외부 데이터 원본의 형식 이름 |
| IsDataSourceSecret | 필드에 중요한 정보가 포함되어 있는지 여부를 나타냅니다. |
속성 ExternalName은 OptionMetadata 클래스와 OptionSetMetadata 클래스에도 추가되었습니다. 이러한 외부 이름은 외부 데이터 원본에서 연결된 형식의 이름을 지정하여 외부 데이터 원본 매핑을 지원합니다. 이러한 속성은 가상 테이블에만 사용됩니다. 기본 제공 또는 표준 사용자 지정 엔터티 형식의 경우 이러한 외부 이름은 여야 null합니다.
가상 테이블 만들기
가상 테이블 형식을 프로그래밍 방식으로 만드는 방법은 다음과 같은 표준 사용자 지정 엔터티 형식 만들기와 약간 다릅니다.
- 연결된 데이터 공급자(및 선택적으로 데이터 원본)가 생성 시 알려진 경우 이러한 공급자가 지정됩니다.
- 이 형식에 대한 데이터 공급자를 알 수 없는 경우 최소한 DataProviderId가
7015A531-CC0D-4537-B5F2-C882A1EB65AD로 설정되고 DataSourceId가null로 설정됩니다. 런타임에 이 형식의 인스턴스를 사용하려면 이러한 속성에 적절한 값이 할당되어야 합니다.
플러그인을 등록할 때 EntityDataProvider 테이블과 선택적으로 EntityDataSource 테이블이 생성되며, 그 각각의 ID인 entitydataproviderid 및 entitydatasourceid가 필요한 GUID를 나타냅니다. (그렇지 않으면 개발자는 이러한 사용자 지정 형식에 직접 액세스할 필요가 거의 없습니다.) DataSource에는 해당 DataProvider 형식과 일치해야 하는 속성 entitydataproviderid 이 포함되어 있거나 런타임 예외가 throw됩니다.
경고
표준(가상이 아닌) 테이블에는 DataProviderId 연결된 값이 있어야 하며 DataSourceId 기본값()null으로 설정해야 합니다. 그렇지 않으면 런타임 예외가 throw됩니다. 만든 후에는 가상이 아닌 형식에서 가상 형식으로 변환하거나 반대로 변환할 수 없습니다.
테이블 정의 속성 동작 변경
다음 표에서는 가상 테이블에 적용할 때 표준 EntityMetadata 속성 의 동작을 수정하는 방법을 자세히 설명합니다. 일부 속성은 가상 테이블에 유효하지 않은 반면 다른 속성은 범위 또는 값으로 제한됩니다.
| Metadata 속성 | 적용 여부 | 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 | 유효함 | |
| 디스플레이 이름 | 유효함 | |
| 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 | 유효함 | 두 가상 테이블 간에 지원되지 않습니다. |
| MetadataId | 유효함 | |
| MobileOfflineFilters | 유효하지 않음 | 항상 false이며 오프라인 사용은 지원되지 않습니다. |
| ObjectTypeCode | 유효함 | |
| OneToManyRelationships | 유효함 | |
| OwnershipType | 유효하지 않음 | 항상 OrganizationOwned |
| PrimaryIdAttribute | 유효함 | |
| PrimaryImageAttribute | 유효함 | |
| PrimaryNameAttribute | 유효함 | |
| 권한 | 유효하지 않음 | |
| RecurrenceBaseEntityLogicalName | 유효하지 않음 | |
| ReportViewName | 유효하지 않음 | |
| SchemaName | 유효함 | |
| SyncToExternalSearchIndex | 유효하지 않음 |
열 정의 속성 동작 변경
다음 표에서는 가상 테이블에 적용할 때 표준 AttributeMetadata 속성 의 동작을 수정하는 방법을 설명합니다. 일부 속성은 가상 테이블에 유효하지 않은 반면 다른 속성은 범위 또는 값으로 제한됩니다.
| Metadata 속성 | 적용 여부 | Notes |
|---|---|---|
| ColumnNumber | 유효하지 않음 | |
| DeprecatedVersion | 유효함 | |
| Description | 유효함 | |
| 디스플레이 이름 | 유효함 | |
| 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 | 유효함 | |
| RequiredLevel | 유효함 | |
| SchemaName | 유효함 | |
| 소스 유형 | 유효하지 않음 | 항상 0, 계산 값 또는 롤업 값은 지원되지 않습니다. |