Consideraciones de API de tablas virtuales

Hay dos grandes categorías de cambios en el sistema de definición de tablas que están asociadas con la introducción de tablas virtuales (también denominadas entidades virtuales) en Microsoft Dataverse:

  • Adición de un nuevo ensamblado, espacios de nombres, clases y otros tipos para admitir el desarrollo de proveedores de datos de tabla virtuales personalizados
  • Cambios a la plataforma principal, incluidas algunas propiedades adicionales para admitir la asignación de origen de datos externos y modificación de comportamientos de propiedades de tabla y columna existentes que reflejan las limitaciones de la implementación inicial de esta característica

Ensamblado de SDK de datos de Dynamics 365

El ensamblado de SDK de datos de Dynamics 365, Microsoft.Xrm.Sdk.Data.dll, contiene tipos que le ayudarán en la creación de proveedores de datos de tabla virtuales personalizados. Consta de los siguientes espacios de nombres:

Espacio de nombres Descripción
Microsoft.Xrm.Sdk.Data Espacio de nombres base que contiene algunos tipos comunes, como la enumeración AllowedQueryOptions
Microsoft.Xrm.Sdk.Data.CodeGen Contiene clases e interfaces que admiten reflexión dinámica, correspondencia de tipos y generación de código. Utilizado principalmente por el motor del proveedor interno.
Microsoft.Xrm.Sdk.Data.Converters Un conjunto de clases para convertir a tipos XRM estándar a sus correspondientes tipos fundamentales de .NET
Microsoft.Xrm.Sdk.Data.Exceptions Un conjunto de clases de excepciones que representan errores que se pueden producir durante la resolución del valor de ejecución. Todos se derivan de Microsoft.Xrm.Sdk.SdkExceptionBase.
Microsoft.Xrm.Sdk.Data.Expressions Clases para ayudar en la implementación de las transformaciones de consultas admitidas como FILTER, JOIN y ORDER.
Microsoft.Xrm.Sdk.Data.Mappings Clases e interfaces que crean la asignación de tipos de definición de tablas virtuales a tipos externos.
Microsoft.Xrm.Sdk.Data.Visitors Clases que implementan el patrón de visitantes para realizar operaciones específicas en el parámetro QueryExpression que se pasa al proveedor de datos durante las solicitudes RetrieveMultiple. Proporciona compatibilidad específica tanto para consulta genérica como para procesamiento basado en LINQ. Estas clases se derivan de Microsoft.Xrm.Sdk.Query.QueryExpressionVisitorBase.

Este ensamblado se distribuye como paquete de NuGet: Microsoft.CrmSdk.Data

Cambios en la plataforma principal

Los siguientes cambios a los tipos de referencia de Dataverse estándar se introdujeron para poder admitir tablas virtuales.

Nuevas tablas

Dataverse expone fuentes y proveedores de datos de tablas virtuales como las siguientes tablas: EntityDataProvider y EntityDataSource.

Nuevas propiedades de definición de tabla

Se agregaron cuatro nuevas propiedades a la clase EntityMetadata:

Propiedad Descripción
DataProviderId GUID que identifica el proveedor de datos de tabla virtual asociado
DataSourceId GUID que identifica el origen de datos de tabla virtual asociado
ExternalName Nombre de este tipo en el origen de datos externos
ExternalCollectionName Nombre plural para este tipo, que se usa en la interfaz de usuario y para admitir el acceso a OData

Se agregaron dos nuevas propiedades a la clase AttributeMetadata:

Propiedad Descripción
ExternalName Nombre del tipo en el origen de datos externos
IsDataSourceSecret Indica si el campo contiene información confidencial

La propiedad ExternalName también se agregó a las clases OptionMetadata y OptionSetMetadata. Estos nombres externos ayudan en la asignación de orígenes de datos externos, especificando el nombre del tipo asociado en el origen de datos externos. Estas propiedades solo se usan para tablas virtuales; para un tipo de entidad personalizada estándar o integrada, estos nombres externos deben ser null.

creación de tabla virtual

El método para crear mediante programación un tipo de tabla virtual difiere ligeramente de la creación de un tipo de entidad personalizada estándar en que:

  • Si el proveedor de datos asociados (y, opcionalmente, el origen de datos) se conoce en el momento de la creación, entonces se debe especificar.
  • Si no se conoce el proveedor de datos para este tipo, entonces, como mínimo, DataProviderId se establece en 7015A531-CC0D-4537-B5F2-C882A1EB65AD y DataSourceId se establece en null. Antes de que las instancias de este tipo se usen en tiempo de ejecución, se deben asignar valores adecuados a estas propiedades.

Dos nuevas tablas, EntityDataProvider y opcionalmente EntityDataSource, se crearán al registrar un complemento y sus respectivos ID, entitydataproviderid y entitydatasourceid, representan estos GUID obligatorios. (De lo contrario, los desarrolladores rara vez necesitan obtener acceso a estos tipos personalizados directamente). Tenga en cuenta que DataSource contiene la propiedad entitydataproviderid que debe coincidir con el tipo DataProvider correspondiente o se iniciará un excepción de tiempo de ejecución.

Advertencia

Las tablas (no virtuales) estándar deben tener los valores de sus entidades asociadas DataProviderId y DataSourceId establecidos en los valores predeterminados (null), de lo contrario se producirá una excepción de tiempo de ejecución. Una vez creado, no puede convertir un tipo no virtual en un tipo virtual, ni viceversa.

Cambios en el comportamiento de la propiedad de definición de tabla

La tabla siguiente muestra cómo se modifica el comportamiento de las propiedades de EntityMetadata estándar cuando se aplican a tablas virtuales. Algunas propiedades no son válidas para tablas virtuales, mientras que otras están limitadas en el ámbito o el valor.

Propiedad de metadatos ¿Se aplica? Notas
ActivityTypeMask no válido Siempre 0
Atributos válido
AutoCreateAccessTeams no válido Siempre false
AutoRouteToOwnerQueue no válido Siempre false, no se admiten las colas.
CanBeInManyToMany válido
CanBePrimaryEntityInRelationship válido
CanBeRelatedEntityInRelationship válido
CanChangeHierarchicalRelationship no válido Siempre false, no se admiten relaciones jerárquicas.
CanChangeTrackingBeEnabled no válido Siempre false, no se admiten valores de auditoría y seguimiento de cambios.
CanCreateAttributes válido
CanCreateCharts no válido Siempre false
CanCreateForms válido
CanCreateViews válido
CanEnableSyncToExternalSearchIndex no válido Siempre false
CanModifyAdditionalSettings válido
CanTriggerWorkflow no válido Siempre false, no se pueden desencadenar flujos de trabajo.
ChangeTrackingEnabled no válido Siempre false
CollectionSchemaName válido
DaysSinceRecordLastModified no válido Siempre nulo o 0
Descripción válido
DisplayCollectionName válido
DisplayName válido
EnforceStateTransitions no válido No se admiten StateCode y Status.
EntityColor válido
EntityHelpUrl válido
EntityHelpUrlEnabled válido
EntitySetName válido
ExtensionData no válido Propiedad obsoleta
HasChanged válido
IconLargeName válido
IconMediumName válido
IconSmallName válido
IntroducedVersion válido
IsActivity no válido Siempre false, no se admiten actividades.
IsActivityParty no válido Siempre false
IsAIRUpdated no válido Obsoleto
IsAuditEnabled no válido Siempre false, no se admite la auditoría.
IsAvailableOffline no válido Siempre false, no se admite el uso sin conexión.
IsBusinessProcessEnabled no válido Siempre false, no se admiten procesos de negocio.
IsChildEntity no válido Siempre false, todas las tablas virtuales son propiedad de la organización.
IsConnectionsEnabled válido
IsCustomEntity válido
IsCustomizable válido
IsDocumentManagementEnabled válido
IsDocumentRecommendationsEnabled no válido Siempre false, no se admite esta característica nueva.
IsDuplicateDetectionEnabled no válido Siempre false, pero la detección de duplicados se puede realizar en el origen de datos.
IsEnabledForCharts limitado Solo para cláusulas de Fetch admitidas.
IsEnabledForTrace válido
IsImportable válido
IsInteractionCentricEnabled válido
IsIntersect válido
IsKnowledgeManagementEnabled no válido Siempre false, no se admite la integración de la administración del conocimiento.
IsMailMergeEnabled válido
IsManaged válido
IsMappable válido
IsOfflineInMobileClient no válido Siempre false, los valores de la tabla virtual no se almacenan en caché para su uso sin conexión.
IsOneNoteIntegrationEnabled válido
IsOptimisticConcurrencyEnabled no válido Siempre false, la simultaneidad se debe implementar en el origen de datos.
IsPrivate válido
IsQuickCreateEnabled válido
IsReadOnlyInMobileClient válido
IsRenameable válido
IsSLAEnabled no válido Siempre false
IsStateModelAware no válido
IsValidForAdvancedFind válido
IsValidForQueue válido
IsVisibleInMobile válido
IsVisibleInMobileClient válido
Claves no válido No se admiten claves alternativas.
LogicalCollectionName válido
LogicalName válido
ManyToManyRelationships válido
ManyToOneRelationships válido No se admite entre dos tablas virtuales.
MetadataId válido
MobileOfflineFilters no válido Siempre false, no se admite el uso sin conexión.
CódigoDeTipoDeObjeto válido
OneToManyRelationships válido
OwnershipType no válido Siempre OrganizationOwned
PrimaryIdAttribute válido
PrimaryImageAttribute válido
PrimaryNameAttribute válido
Privilegios no válido
RecurrenceBaseEntityLogicalName no válido
ReportViewName no válido
SchemaName válido
SyncToExternalSearchIndex no válido

Cambios en el comportamiento de la propiedad de definición de columna

La tabla siguiente explica cómo se modifica el comportamiento de las propiedades de AttributeMetadata estándar cuando se aplican a tablas virtuales. Algunas propiedades no son válidas para tablas virtuales, mientras que otras están limitadas en el ámbito o el valor.

Propiedad de metadatos ¿Se aplica? Notas
ColumnNumber no válido
DeprecatedVersion válido
Descripción válido
DisplayName válido
EntityLogicalName válido
ExtensionData no válido
HasChanged válido
InheritsFrom válido
IntroducedVersion válido
IsAuditEnabled no válido Siempre false, no se admite la auditoría.
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 no válido Siempre false, no se admite la seguridad de nivel de 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
SourceType no válido Siempre 0, no se admiten valores calculados o de resumen.

Consultar también

Introducción a las entidades virtuales
Proveedores de datos de tablas virtuales personalizadas
Ejemplo: Complemento de proveedor de datos de tabla virtual genérico

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).