Compartir a través de


Consideraciones de API para tablas virtuales

Dos amplias categorías de cambios en el sistema de definición de tablas están asociadas a la introducción de tablas virtuales (también conocidas como 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 en la plataforma principal, incluidas algunas otras propiedades para admitir la asignación de orígenes de datos externos y la modificación de comportamientos de las propiedades existentes de tabla y columna que reflejan las limitaciones de la implementación inicial de esta característica

ensamblado del SDK de datos de Dynamics 365

El ensamblado del SDK de datos de Dynamics 365, Microsoft.Xrm.Sdk.Data.dll, contiene tipos que ayudan a crear proveedores de datos de tabla virtual personalizados. Consta de los siguientes espacios de nombres:

Namespace Description
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 los tipos XRM estándar a sus tipos fundamentales de .NET correspondientes
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 a implementar las transformaciones de consulta admitidas, como FILTER, JOIN y ORDER.
Microsoft.Xrm.Sdk.Data.Mappings Clases e interfaces que establecen el mapeo de tipos de definición de tabla virtual 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.

Distribuya este ensamblado como un paquete NuGet: Microsoft.CrmSdk.Data.

Cambios en la plataforma principal

Los siguientes cambios en los tipos de referencia estándar de Dataverse admiten tablas virtuales.

Nuevas tablas

Dataverse expone orígenes y proveedores de datos de tabla virtual como las tablas siguientes: EntityDataProvider y .

Nuevas propiedades de definición de tabla

Se agregaron cuatro nuevas propiedades a la clase :

Propiedad Description
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 tipo en el origen de datos externo
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 :

Propiedad Description
ExternalName Nombre del tipo en el origen de datos externo
IsDataSourceSecret Indica si el campo contiene información confidencial.

La propiedad también se agregó a las clases y . Estos nombres externos ayudan al mapeo de orígenes de datos externos, especificando el nombre del tipo asociado en el origen de datos externo. Estas propiedades solo se usan para tablas virtuales. Para un tipo de entidad personalizado integrado o estándar, estos nombres externos deben ser .

Creación de tablas virtuales

El enfoque para crear mediante programación un tipo de tabla virtual difiere ligeramente de la creación de un tipo de entidad personalizado estándar en que:

  • Si conoce el proveedor de datos asociado (y, opcionalmente, el origen de datos) en el momento de la creación, especifique estos valores.
  • Si no conoce el proveedor de datos para este tipo, establezca en y establezca en . Antes de usar instancias de este tipo en tiempo de ejecución, asigne estos valores adecuados a estas propiedades.

Al registrar un complemento, se crean dos tablas nuevas, EntityDataProvider y, opcionalmente , . Sus respectivos identificadores, y , representan estos GUIDs necesarios. (De lo contrario, los desarrolladores rara vez necesitan acceder a estos tipos personalizados directamente). Tenga en cuenta que DataSource contiene la propiedad que debe coincidir con el tipo DataProvider correspondiente o se produce una excepción en tiempo de ejecución.

Advertencia

Las tablas estándar (no virtuales) deben tener los valores de sus asociados y establecidos en sus valores predeterminados (), de lo contrario, se produce una excepción en tiempo de ejecución. Una vez creado, no se puede convertir de un tipo no virtual a un tipo virtual o a la inversa.

Cambios en el comportamiento de las propiedades de definición de tabla

En la tabla siguiente se detalla cómo cambia el comportamiento de las propiedades EntityMetadata estándar al aplicarlas a tablas virtuales. Algunas propiedades no son válidas para las 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
Attributes 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 falso, 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
Description válido
DisplayCollectionName válido
DisplayName (Nombre para mostrar) válido
EnforceStateTransitions No válido StateCode y Status no se admiten.
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 Deprecated
IsAuditEnabled No válido Siempre false, no se admite la auditoría.
IsAvailableOffline No válido Siempre es falso, 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 es falso, 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 falso, no se admite la integración de la gestión del conocimiento.
IsMailMergeEnabled válido
IsManaged válido
IsMappable válido
IsOfflineInMobileClient No válido Siempre es falso, los valores de tabla virtual no se almacenan en caché para 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
Keys 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 es falso, no se admite el uso sin conexión.
ObjectTypeCode válido
OneToManyRelationships válido
OwnershipType No válido Siempre OrganizationOwned
PrimaryIdAttribute válido
PrimaryImageAttribute válido
PrimaryNameAttribute válido
Privileges No válido
RecurrenceBaseEntityLogicalName No válido
ReportViewName No válido
SchemaName válido
SyncToExternalSearchIndex No válido

Cambios en el comportamiento de las propiedades de definición de columna

En la tabla siguiente se explica cómo cambia el comportamiento de las propiedades AttributeMetadata estándar al aplicarlas a tablas virtuales. Algunas propiedades no son válidas para las tablas virtuales, mientras que otras tienen un ámbito o valor limitados.

Propiedad de metadatos ¿Se aplica? Notas
ColumnNumber No válido
DeprecatedVersion válido
Description válido
DisplayName (Nombre para mostrar) 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
NivelRequerido válido
SchemaName válido
TipoDeFuente No válido Siempre es 0; no se admiten valores calculados ni acumulativos.

Consulte también

Introducción a las entidades virtuales
Proveedores de datos de tabla virtual personalizados
Ejemplo: complemento de proveedor de datos para tablas virtuales genérico