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 ennull
. 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).