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

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

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

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

Сборка пакета SDK для данных Dynamics 365 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 Классы, реализующие шаблон посетителя для выполнения определенных операций с параметром 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
Атрибуты действительный
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 недопустимо Устарело
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 действительный
Ключи недопустимо Альтернативные ключи не поддерживаются
LogicalCollectionName действительный
LogicalName действительный
ManyToManyRelationships действительный
ManyToOneRelationships действительный Не поддерживается между двумя виртуальными таблицами.
MetadataId действительный
MobileOfflineFilters недопустимо Всегда false, автономное использование не поддерживается.
ObjectTypeCode действительный
OneToManyRelationships действительный
Тип Собственности недопустимо Всегда OrganizationOwned
PrimaryIdAttribute действительный
PrimaryImageAttribute действительный
PrimaryNameAttribute действительный
Привилегии недопустимо
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 действительный
Доступно для поиска действительный
IsSecured недопустимо Всегда false, безопасность на уровне полей не поддерживается.
IsSortableEnabled действительный
IsValidForAdvancedFind действительный
IsValidForCreate действительный
IsValidForRead действительный
IsValidForUpdate действительный
LinkedAttributeId действительный
ЛогическоеИмя действительный
MetadataId действительный
Требуемый уровень действительный
SchemaName действительный
Тип источника недопустимо Всегда значение 0, вычисляемые значения и свертки не поддерживаются.

См. также

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