Поделиться через


Рекомендации по API для виртуальных таблиц

Две широкие категории изменений в системе определения таблиц связаны с введением виртуальных таблиц (также известных как виртуальные сущности) в Microsoft Dataverse:

  • Добавление новых сборок, пространств имен, классов и других типов для поддержки разработки поставщиков данных для пользовательских виртуальных таблиц
  • Изменения основной платформы, включая несколько других свойств для поддержки сопоставления внешних источников данных, а также изменения поведения существующих свойств таблицы и столбцов, которые отражают ограничения начальной реализации этой функции.

Сборка SDK данных для Dynamics 365

Сборка SDK для Dynamics 365 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 Классы, реализующие шаблон посетителя для выполнения определенных операций с параметром QueryExpression, передаваемым поставщику данных в рамках запросов RetrieveMultiple. Предоставляет конкретную поддержку как для обработки универсальных запросов, так и обработки на основе LINQ. Эти классы являются производными от Microsoft.Xrm.Sdk.Query.QueryExpressionVisitorBase.

Распространение этой сборки в виде пакета NuGet: Microsoft.CrmSdk.Data.

Изменения в базовой платформе

Следующие изменения стандартных ссылочных типов Dataverse поддерживают виртуальные таблицы.

Новые таблицы

Dataverse предоставляет поставщики и источники данных виртуальной таблицы в следующих таблицах: EntityDataProvider и EntityDataSource.

Новые свойства определения таблицы

В класс были добавлены EntityMetadata четыре новых свойства:

Недвижимость Description
DataProviderId GUID, который идентифицирует поставщика данных связанной виртуальной таблицы
DataSourceId GUID, определяющий связанный источник данных виртуальной таблицы
ExternalName Название этого типа во внешнем источнике данных
ExternalCollectionName Имя этого типа во множественном числе, используемое в пользовательском интерфейсе и для поддержки доступа OData

В класс были добавлены AttributeMetadata два новых свойства:

Недвижимость Description
ExternalName Имя типа во внешнем источнике данных
IsDataSourceSecret Указывает, содержит ли поле конфиденциальную информацию

Свойство ExternalName также было добавлено в OptionMetadata классы и OptionSetMetadata классы. Эти внешние имена помогают сопоставлению внешних источников данных путем указания имени связанного типа во внешнем источнике данных. Эти свойства используются только для виртуальных таблиц. Для встроенного или стандартного типа пользовательской сущности эти внешние имена должны быть null.

Создание виртуальной таблицы

Подход к программному созданию типа виртуальной таблицы отличается от создания стандартного типа пользовательской сущности тем, что:

  • Если вы знаете связанный поставщик данных (и при необходимости источник данных) во время создания, укажите эти значения.
  • Если вы не знаете поставщика данных для этого типа, установите DataProviderId на 7015A531-CC0D-4537-B5F2-C882A1EB65AD и установите DataSourceId на null. Прежде чем использовать экземпляры этого типа во время выполнения, назначьте эти свойства соответствующим значениям.

При регистрации подключаемого модуля вы создаете две новые таблицы EntityDataProvider и по желанию EntityDataSource. Их соответствующие идентификаторы, entitydataproviderid и entitydatasourceid, представляют собой необходимые GUID. (В противном случае разработчикам редко требуется получить доступ к этим пользовательским типам напрямую.) Обратите внимание, что DataSource содержит свойство entitydataproviderid , которое должно соответствовать соответствующему типу DataProvider или возникает исключение среды выполнения.

Предупреждение

Стандартные (невиртуальные) таблицы должны иметь значения их связанных DataProviderId и DataSourceId, установленных по умолчанию (null), иначе будет выброшено исключение времени выполнения. После создания не удается преобразовать невиртуальный тип в виртуальный тип или обратный.

Изменения в поведении свойств определения таблицы

В следующей таблице описано, как поведение стандартных свойств EntityMetadata изменяется при применении их к виртуальным таблицам. Некоторые свойства недопустимы для виртуальных таблиц, в то время как другие являются ограниченными в области или значении.

Свойство метаданных Применяется? Примечания
ActivityTypeMask недопустимо Всегда 0
Attributes допустим
AutoCreateAccessTeams недопустимо Всегда false
AutoRouteToOwnerQueue недопустимо Всегда false, очереди не поддерживаются.
CanBeInManyToMany допустим
CanBePrimaryEntityInRelationship допустим
CanBeRelatedEntityInRelationship допустим
CanChangeHierarchicalRelationship недопустимо Всегда ложно: иерархические связи не поддерживаются.
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 недопустимо Всегда неверно: действия не поддерживаются.
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 недопустимо Всегда ложь. Интеграция управления знаниями не поддерживается.
IsMailMergeEnabled допустим
IsManaged допустим
IsMappable допустим
IsOfflineInMobileClient недопустимо Всегда false, значения виртуальных таблиц не кэшируются для автономного использования.
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 допустим
Privileges недопустимо
RecurrenceBaseEntityLogicalName недопустимо
ReportViewName недопустимо
SchemaName допустим
SyncToExternalSearchIndex недопустимо

Изменения в поведении свойств определения столбцов

В следующей таблице объясняется, как поведение стандартных свойств AttributeMetadata изменяется при применении их к виртуальным таблицам. Некоторые свойства недопустимы для виртуальных таблиц, а другие имеют ограниченную область или значение.

Свойство метаданных Применяется? Примечания
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 допустим
RequiredLevel допустим
SchemaName допустим
Тип источника недопустимо Всегда 0, вычисляемые значения и свертки не поддерживаются.

См. также

Начало работы с виртуальными сущностями
Пользовательские поставщики данных виртуальной таблицы
Образец: Плагин-поставщик данных для универсальной виртуальной таблицы