Partilhar via


Considerações da API de tabelas virtuais

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

  • Adição de uma nova assemblagem, espaços de nomes, classes e outros tipos para dar suporte ao desenvolvimento de fornecedores 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

Montagem do SDK de Dados do Dynamics 365

A assemblagem do SDK do Dynamics 365 Customer Engagement, Microsoft.Xrm.Sdk.Data.dll, contém tipos para ajudar na criação de fornecedores de dados de tabelas virtuais personalizadas. É composto pelos seguintes espaços de nomes:

Namespace Description
Microsoft.Xrm.Sdk.Data Espaço de nomes base que contém alguns tipos comuns, como a enumeração AllowedQueryOptions
Microsoft.Xrm.Sdk.Data.CodeGen Contém classes e interfaces que suportam reflexão dinâmica, correspondência de tipos e geração de código. Usado principalmente pelo motor do fornecedor interno.
Microsoft.Xrm.Sdk.Data.Converters Um conjunto de classes para converter tipos XRM standard para os respetivos 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 do valor de runtime. Todos são derivados de Microsoft.Xrm.Sdk.SdkExceptionBase.
Microsoft.Xrm.Sdk.Data.Expressions Classes para ajudar na implementação das transformações de consulta suportadas, 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 transmitido para o fornecedor de dados durante pedidos 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.

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

Alterações à plataforma principal

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

Novas tabelas

O Dataverse expõe fontes e provedores de dados de tabela virtual 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 para este tipo na fonte de dados externa
ExternalCollectionName Nome plural para este tipo, usado na interface do usuário e para dar suporte ao acesso 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 foi também adicionada às classes OptionMetadata e OptionSetMetadata. Esses nomes externos ajudam 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 tabelas virtuais

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

  • Se o fornecedor de dados associado (e, opcionalmente, a origem de dados) for conhecido no momento da criação, esses são especificados.
  • Se o fornecedor de dados para este tipo não for conhecido, no mínimo, DataProviderId é definido como 7015A531-CC0D-4537-B5F2-C882A1EB65AD, e o DataSourceId é definido como null. Antes de as instâncias deste tipo serem utilizadas em runtime, devem ser atribuídos valores adequados a estas propriedades.

Duas novas tabelas, EntityDataProvider e, opcionalmente EntityDataSource, serão criadas quando você registrar um plug-in, e seus respetivos ID's, entitydataproviderid e entitydatasourceid, representam esses GUIDs necessários. (Caso contrário, os desenvolvedores raramente precisam acessar esses tipos personalizados diretamente.) Observe que DataSource contém a propriedade entitydataproviderid que deve corresponder ao tipo DataProvider correspondente ou uma exceção de tempo de execução será lançada.

Advertência

As tabelas padrão (não virtuais) devem ter os valores de seus associados DataProviderId e DataSourceId definidos como seus valores padrão (null), caso contrário, uma exceção de tempo de execução será lançada. Uma vez criado, não pode converter de um tipo não virtual para um tipo virtual, ou o inverso.

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

A tabela a seguir detalha como o comportamento das propriedades padrão EntityMetadata é 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 Aplica-se? Notes
ActivityTypeMask inválido Sempre 0
Attributes válido
AutoCreateAccessTeams inválido Sempre falso
AutoRouteToOwnerQueue inválido Sempre falso, filas não são suportadas.
CanBeInManyToMany válido
CanBePrimaryEntityInRelationship válido
CanBeRelatedEntityInRelationship válido
CanChangeHierarchicalRelationship inválido Sempre falso, relações hierárquicas não são suportadas.
CanChangeTrackingBeEnabled inválido Sempre falso, os valores de controlo de alterações e auditoria não são suportados.
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 StateCode e Status não são suportados.
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, atividades não são suportadas.
IsActivityParty inválido Sempre falso
IsAIRUpdated inválido Deprecated
IsAuditEnabled inválido Sempre falso, a auditoria não é suportada.
IsAvailableOffline inválido Sempre falso, a utilização offline não é suportada.
IsBusinessProcessEnabled inválido Sempre falso, os processos de negócios não são suportados.
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, esta nova funcionalidade não é suportada.
IsDuplicateDetectionEnabled inválido Sempre falso, mas a deteção de duplicados pode ser realizada na origem de dados.
IsEnabledForCharts limitado Apenas para cláusulas Obter suportadas.
IsEnabledForTrace válido
IsImportable válido
IsInteractionCentricEnabled válido
IsIntersect válido
IsKnowledgeManagementEnabled inválido Sempre falso, a integração de gestão de conhecimento não é suportada.
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 origem 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
Keys inválido Não há suporte para chaves alternativas
LogicalCollectionName válido
LogicalName válido
ManyToManyRelationships válido
ManyToOneRelationships válido Não suportado entre duas tabelas virtuais.
MetadataId válido
MobileOfflineFilters inválido Sempre falso, a utilização offline não é suportada.
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 no comportamento da propriedade de definição de coluna

A tabela a seguir explica como o comportamento das propriedades padrão AttributeMetadata são modificadas quando aplicadas 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 Aplica-se? 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, a auditoria não é suportada.
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, a segurança a nível do campo não é suportada.
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
SourceType inválido Sempre 0, valores calculados ou de rollup não suportados.

Consulte também

Introdução às entidades virtuais
Provedores de dados de tabela virtual personalizados
Exemplo: Plug-in de fornecedor genérico de dados de tabela virtual