Compartilhar via


Considerações de API de tabelas virtuais

Há duas categorias amplas de alterações no sistema de definição de tabela associadas à introdução de tabelas virtuais (também conhecidas como entidades virtuais) no Microsoft Dataverse:

  • Adição de novos assemblies, namespaces, classes e outros tipos para dar suporte ao desenvolvimento de provedores de dados de tabelas virtuais personalizadas
  • Alterações na plataforma principal, incluindo algumas propriedades adicionais para dar suporte ao mapeamento de fonte de dados externa e modificação de comportamentos de propriedades de tabela e coluna existentes que refletem as limitações da implementação inicial desse recurso

Assembly do SDK de Dados do Dynamics 365

O assembly do SDK de Dados do Dynamics 365, Microsoft.Xrm.Sdk.Data.dll, contém tipos para auxiliar na criação de provedores de dados de tabelas virtuais personalizadas. Ele é composto pelos seguintes namespaces:

Namespace Description
Microsoft.Xrm.Sdk.Data Namespace base que contém alguns tipos comuns, como a enumeração AllowedQueryOptions
Microsoft.Xrm.Sdk.Data.CodeGen Contém classes e interfaces que dão suporte à reflexão dinâmica, à correspondência de tipos e à geração de código. Usado principalmente pelo mecanismo de provedor interno.
Microsoft.Xrm.Sdk.Data.Converters Um conjunto de classes para converter tipos XRM padrão em seus tipos fundamentais .NET correspondentes
Microsoft.Xrm.Sdk.Data.Exceptions Um conjunto de classes de exceção que representam erros que podem ocorrer durante a resolução de valor de runtime. Todas são derivadas de Microsoft.Xrm.Sdk.SdkExceptionBase.
Microsoft.Xrm.Sdk.Data.Expressions Classes para ajudar na implementação das transformações de consulta com suporte, como FILTER, JOIN e ORDER.
Microsoft.Xrm.Sdk.Data.Mappings Classes e interfaces que criam o mapeamento de tipos de definição de tabelas virtuais para tipos externos.
Microsoft.Xrm.Sdk.Data.Visitors Classes que implementam o padrão de visitante para executar operações específicas no parâmetro QueryExpression passado ao provedor de dados durante solicitações RetrieveMultiple. Fornece suporte específico para consulta genérica e processamento baseado em LINQ. Essas classes são derivadas de Microsoft.Xrm.Sdk.Query.QueryExpressionVisitorBase.

Esse assembly é distribuído como um pacote NuGet: Microsoft.CrmSdk.Data

Alterações na plataforma principal

As alterações a seguir nos tipos de referência padrão do Dataverse foram introduzidas para dar suporte a tabelas virtuais.

Novas tabelas

O Dataverse expõe provedores de dados de tabela virtual e fontes como as seguintes tabelas: EntityDataProvider e EntityDataSource.

Novas propriedades de definição de tabela

Quatro novas propriedades foram adicionadas à EntityMetadata classe:

Propriedade Description
DataProviderId GUID que identifica o provedor de dados de tabela virtual associado
DataSourceId GUID que identifica a fonte de dados da tabela virtual associada
ExternalName Nome deste tipo na fonte de dados externa
ExternalCollectionName Nome plural para esse tipo, usado na interface do usuário e para dar suporte ao acesso via OData

Duas novas propriedades foram adicionadas à AttributeMetadata classe:

Propriedade Description
ExternalName Nome do tipo na fonte de dados externa
IsDataSourceSecret Indica se o campo contém informações confidenciais

A propriedade ExternalName também foi adicionada às classes OptionMetadata e OptionSetMetadata. Esses nomes externos auxiliam no mapeamento da fonte de dados externa, especificando o nome do tipo associado na fonte de dados externa. Essas propriedades são usadas apenas para tabelas virtuais; para um tipo de entidade personalizada interna ou padrão, esses nomes externos devem ser null.

criação de tabela virtual

A abordagem para criar programaticamente um tipo de tabela virtual difere ligeiramente de uma criação de tipo de entidade personalizada padrão:

  • Se o provedor de dados associado (e, opcionalmente, a fonte de dados) for conhecido no momento da criação, isso será especificado.
  • Se o provedor de dados desse tipo não for conhecido, no mínimo, DataProviderId será definido como 7015A531-CC0D-4537-B5F2-C882A1EB65AD, e o DataSourceId será definido como null. Antes que as instâncias desse tipo sejam usadas no runtime, essas propriedades devem ser atribuídas aos valores apropriados.

Duas novas tabelas, EntityDataProvider e, opcionalmente, EntityDataSource, serão criadas quando você registrar um plugin, e suas respectivas IDs, entitydataproviderid e entitydatasourceid, representam esses GUIDs necessários. (Caso contrário, os desenvolvedores raramente precisam acessar esses tipos personalizados diretamente.) Observe que o DataSource contém a propriedade entitydataproviderid que deve corresponder ao tipo DataProvider correspondente ou uma exceção de runtime será gerada.

Aviso

As tabelas padrão (não virtuais) devem ter os valores de seus valores associados DataProviderId e DataSourceId definidos como seus valores padrão (null), caso contrário, uma exceção de runtime será gerada. Após a criação, você não pode converter um tipo não virtual em um tipo virtual ou o inverso.

Alterações no comportamento da definição da propriedade da tabela

A tabela a seguir detalha como o comportamento das propriedades EntityMetadata padrão é modificado quando aplicado a tabelas virtuais. Algumas propriedades não são válidas para tabelas virtuais, enquanto outras são limitadas em escopo ou valor.

Propriedade de metadados É aplicável? Notes
ActivityTypeMask inválido Sempre 0
Attributes válido
AutoCreateAccessTeams inválido Sempre falso
AutoRouteToOwnerQueue inválido Sempre falso, não há suporte para filas.
CanBeInManyToMany válido
CanBePrimaryEntityInRelationship válido
CanBeRelatedEntityInRelationship válido
CanChangeHierarchicalRelationship inválido Sempre falso, não há suporte para relacionamentos hierárquicos.
CanChangeTrackingBeEnabled inválido Sempre falso, não há suporte para valores de auditoria e controle de alterações.
CanCreateAttributes válido
CanCreateCharts inválido Sempre falso
CanCreateForms válido
CanCreateViews válido
CanEnableSyncToExternalSearchIndex inválido Sempre falso
CanModifyAdditionalSettings válido
CanTriggerWorkflow inválido Sempre falso, os fluxos de trabalho não podem ser acionados.
ChangeTrackingEnabled inválido Sempre falso
CollectionSchemaName válido
DaysSinceRecordLastModified inválido Sempre nulo ou 0
Description válido
DisplayCollectionName válido
DisplayName válido
EnforceStateTransitions inválido Não há suporte para StateCode e Status.
EntityColor válido
EntityHelpUrl válido
EntityHelpUrlEnabled válido
EntitySetName válido
ExtensionData inválido Propriedade preterida
HasChanged válido
IconLargeName válido
IconMediumName válido
IconSmallName válido
IntroducedVersion válido
IsActivity inválido Sempre falso, não há suporte para atividades.
IsActivityParty inválido Sempre falso
IsAIRUpdated inválido Deprecated
IsAuditEnabled inválido Sempre falso, não há suporte para auditoria.
IsAvailableOffline inválido Sempre falso, não há suporte para uso offline.
IsBusinessProcessEnabled inválido Sempre falso, não há suporte para processos empresariais.
IsChildEntity inválido Sempre falso, todas as tabelas virtuais são de propriedade organizacional.
IsConnectionsEnabled válido
IsCustomEntity válido
IsCustomizable válido
IsDocumentManagementEnabled válido
IsDocumentRecommendationsEnabled inválido Sempre falso, não há suporte para este novo recurso.
IsDuplicateDetectionEnabled inválido Sempre falso, mas a detecção de duplicidades pode ser executada na fonte de dados.
IsEnabledForCharts limitado Somente para cláusulas Fetch com suporte.
IsEnabledForTrace válido
IsImportable válido
IsInteractionCentricEnabled válido
IsIntersect válido
IsKnowledgeManagementEnabled inválido Sempre falso, não há suporte para a integração do gerenciamento do conhecimento.
IsMailMergeEnabled válido
IsManaged válido
IsMappable válido
IsOfflineInMobileClient inválido Sempre falso, os valores da tabela virtual não são armazenados em cache para uso offline.
IsOneNoteIntegrationEnabled válido
IsOptimisticConcurrencyEnabled inválido Sempre falso, a simultaneidade deve ser implementada na fonte de dados.
IsPrivate válido
IsQuickCreateEnabled válido
IsReadOnlyInMobileClient válido
IsRenameable válido
IsSLAEnabled inválido Sempre falso
IsStateModelAware inválido
IsValidForAdvancedFind válido
IsValidForQueue válido
IsVisibleInMobile válido
IsVisibleInMobileClient válido
Teclas inválido Não há suporte para chaves alternativas
LogicalCollectionName válido
LogicalName válido
ManyToManyRelationships válido
ManyToOneRelationships válido Não há suporte entre duas tabelas virtuais.
MetadataId válido
MobileOfflineFilters inválido Sempre falso, não há suporte para uso offline.
ObjectTypeCode válido
OneToManyRelationships válido
OwnershipType inválido Sempre OrganizationOwned
PrimaryIdAttribute válido
PrimaryImageAttribute válido
PrimaryNameAttribute válido
Privilégios inválido
RecurrenceBaseEntityLogicalName inválido
ReportViewName inválido
SchemaName válido
SyncToExternalSearchIndex inválido

Alterações de comportamento da propriedade de definição de coluna

A tabela a seguir explica como o comportamento das propriedades AttributeMetadata padrão é modificado quando aplicado a tabelas virtuais. Algumas propriedades não são válidas para tabelas virtuais, enquanto outras são limitadas em escopo ou valor.

Propriedade de metadados É aplicável? Notes
ColumnNumber inválido
DeprecatedVersion válido
Description válido
DisplayName válido
EntityLogicalName válido
ExtensionData inválido
HasChanged válido
InheritsFrom válido
IntroducedVersion válido
IsAuditEnabled inválido Sempre falso, não há suporte para auditoria.
IsCustomAttribute válido
IsCustomizable válido
IsFilterable válido
IsGlobalFilterEnabled válido
IsLogical válido
IsManaged válido
IsPrimaryId válido
IsPrimaryName válido
IsRenameable válido
IsSearchable válido
IsSecured inválido Sempre falso, não há suporte para a segurança no nível do campo.
IsSortableEnabled válido
IsValidForAdvancedFind válido
IsValidForCreate válido
IsValidForRead válido
IsValidForUpdate válido
LinkedAttributeId válido
LogicalName válido
MetadataId válido
RequiredLevel válido
SchemaName válido
Tipo de Fonte inválido Sempre 0, não há suporte para valores calculados ou acumulados.

Consulte também

Introdução às entidades virtuais
Provedores de dados de tabela virtual personalizados
Exemplo: plug-in genérico do provedor de dados para tabela virtual