Considérations sur les tables virtuelles

Il existe deux grandes catégories de modifications du système de définition de table qui sont associées à l’introduction des tables virtuelles (également appelées entités virtuelles) dans Microsoft Dataverse :

  • Ajout d’un nouvel assembly, d’espaces de noms, de classes et d’autres types pour prendre en charge le développement de fournisseurs personnalisés de données de tables virtuelles
  • Modifications de la plateforme principale, notamment quelques propriétés supplémentaires pour prendre en charge le mappage de la source de données externe, et modifications du comportement des propriétés de table et de colonne existantes qui reflètent les limitations de l’implémentation initiale de cette fonctionnalité

Assembly du SDK des données Dynamics 365

L’assembly du SDK des données des applications Dynamics 365 for Customer Engagement, Microsoft.Xrm.Sdk.Data.dll, contient des types pour aider à la création de fournisseurs personnalisés de données de tables virtuelles. Il est composé des espaces de noms suivants :

Espace de noms Description
Microsoft.Xrm.Sdk.Data Espace de noms de base qui contient quelques types courants, comme l’énumération AllowedQueryOptions
Microsoft.Xrm.Sdk.Data.CodeGen Contient les classes et interfaces qui prennent en charge la réflexion dynamique, la correspondance de type et la génération de code. Principalement utilisé par le moteur de fournisseur interne.
Microsoft.Xrm.Sdk.Data.Converters Ensemble de classes pour convertir les types XRM standard en types fondamentaux .NET correspondants
Microsoft.Xrm.Sdk.Data.Exceptions Ensemble de classes d’exception qui représentent les erreurs qui peuvent se produire lors de la résolution des valeurs au moment de l’exécution. Toutes sont dérivées de Microsoft.Xrm.Sdk.SdkExceptionBase.
Microsoft.Xrm.Sdk.Data.Expressions Classes pour aider à l’implémentation des transformations de requête prises en charge, telles que FILTER, JOIN et ORDER.
Microsoft.Xrm.Sdk.Data.Mappings Classes et interfaces qui créent le mappage des types de définition de tables virtuelles en types externes.
Microsoft.Xrm.Sdk.Data.Visitors Classes qui implémentent le modèle de visiteur pour effectuer des opérations spécifiques sur le paramètre QueryExpression transmis au fournisseur de données pendant les requêtes RetrieveMultiple. Fournit une prise en charge spécifique de la requête générique et du traitement LINQ. Ces classes sont dérivées de Microsoft.Xrm.Sdk.Query.QueryExpressionVisitorBase.

Cet assemblage est distribué comme package NuGet : Microsoft.CrmSdk.Data

Modifications de la plateforme principale

Les modifications suivantes des types de référence Dataverse standard ont été introduites pour prendre en charge les tables virtuelles.

Nouvelles tables

Dataverse expose les sources et les fournisseurs de données de table virtuelle sous la forme des tables suivantes : EntityDataProvider et EntityDataSource.

Nouvelles propriétés de définition de table

Quatre nouvelles propriétés ont été ajoutées à la classe EntityMetadata :

Propriété Description
DataProviderId GUID qui identifie le fournisseur de données de table virtuelle associé
DataSourceId GUID qui identifie la source de données de table virtuelle associé
ExternalName Nom pour ce type dans la source de données externes
ExternalCollectionName Nom pluriel de ce type, utilisé dans l’interface utilisateur ainsi que pour la prise en charge de l’accès OData

Deux nouvelles propriétés ont été ajoutées à la classe AttributeMetadata :

Propriété Description
ExternalName Nom de ce type dans la source de données externes
IsDataSourceSecret Indique si le champ contient des informations confidentielles

La propriété ExternalName a également été ajoutée aux classes OptionMetadata et OptionSetMetadata. Ces noms externes aident au mappage de la source de données externe, en spécifiant le nom du type associé à la source de données externe. Ces propriétés sont uniquement utilisées pour les tables virtuelles ; pour un type d’entité personnalisée intégrée ou standard, ces noms externes doivent avoir la valeur null.

création de table virtuelle

L’approche pour créer par programme un type de table virtuelle diffère légèrement de la création d’un type d’entité personnalisée standard :

  • Si le fournisseur de données associé (et éventuellement la source de données) sont connus au moment de la création, ils sont spécifiés.
  • Si le fournisseur de données pour ce type n’est pas connu, au minimum, DataProviderId est défini sur 7015A531-CC0D-4537-B5F2-C882A1EB65AD, et DataSourceId est défini sur null. Des valeurs appropriées doivent être attribuées à ces propriétés avant que les instances de ce type soient utilisées au moment de l’exécution.

Deux nouvelles tables, EntityDataProvider et éventuellement EntityDataSource, sont créés lorsque vous enregistrez un plug-in, et leurs ID respectifs, entitydataproviderid et entitydatasourceid, représentent les GUID requis. (Sinon, les développeurs ont rarement besoin d’accéder directement à ces types personnalisés.) Notez que DataSource contient la propriété entitydataproviderid qui doit correspondre au type DataProvider correspondant ; à défaut, une exception est levée au moment de l’exécution.

Avertissement

Dans les tables standards (non virtuelles), les valeurs de DataProviderId et DataSourceId doivent être définies sur les valeurs par défaut (null), sinon une exception est levée au moment de l’exécution. Une fois créé, vous ne pouvez pas convertir un type non virtuel en type virtuel, ou inversement.

Modifications du comportement des propriétés de définition de table

Le tableau suivant décrit comment le comportement des Propriétés EntityMetadata standard est modifié pour les tables virtuelles. Certaines propriétés ne sont pas valides pour les tables virtuelles, tandis que d’autres sont limitées en étendue ou valeur.

Propriété de métadonnées S’applique ? Remarques
ActivityTypeMask invalid Toujours 0
Attributs valide
AutoCreateAccessTeams invalid Toujours false
AutoRouteToOwnerQueue invalid Toujours false, les files d’attente ne sont pas prises en charge.
CanBeInManyToMany valide
CanBePrimaryEntityInRelationship valide
CanBeRelatedEntityInRelationship valide
CanChangeHierarchicalRelationship invalid Toujours false, les relations hiérarchiques ne sont pas prises en charge.
CanChangeTrackingBeEnabled invalid Toujours false, les valeurs de suivi des modifications et d’audit ne sont pas prises en charge.
CanCreateAttributes valide
CanCreateCharts invalid Toujours false
CanCreateForms valide
CanCreateViews valide
CanEnableSyncToExternalSearchIndex invalid Toujours false
CanModifyAdditionalSettings valide
CanTriggerWorkflow invalid Toujours false, les workflows ne peuvent pas être déclenchés.
ChangeTrackingEnabled invalid Toujours false
CollectionSchemaName valide
DaysSinceRecordLastModified invalid Toujours null ou 0
Description valide
DisplayCollectionName valide
DisplayName valide
EnforceStateTransitions invalid StateCode et Status ne sont pas pris en charge.
EntityColor valide
EntityHelpUrl valide
EntityHelpUrlEnabled valide
EntitySetName valide
ExtensionData invalid Propriété déconseillée
HasChanged valide
IconLargeName valide
IconMediumName valide
IconSmallName valide
IntroducedVersion valide
IsActivity invalid Toujours false, les activités ne sont pas prises en charge.
IsActivityParty invalid Toujours false
IsAIRUpdated invalid Déconseillé
IsAuditEnabled invalid Toujours false, l’audit n’est pas pris en charge.
IsAvailableOffline invalid Toujours false, l’utilisation hors connexion n’est pas prise en charge.
IsBusinessProcessEnabled invalid Toujours false, les processus d’entreprise ne sont pas pris en charge.
IsChildEntity invalid Toujours false, toutes les tables virtuelles appartiennent à l’organisation.
IsConnectionsEnabled valide
IsCustomEntity valide
IsCustomizable valide
IsDocumentManagementEnabled valide
IsDocumentRecommendationsEnabled invalid Toujours false, cette nouvelle fonctionnalité n’est pas prise en charge.
IsDuplicateDetectionEnabled invalid Toujours false, mais la détection des doublons peut être effectuée sur la source de données.
IsEnabledForCharts limited Uniquement pour les clauses Fetch prises en charge.
IsEnabledForTrace valide
IsImportable valide
IsInteractionCentricEnabled valide
IsIntersect valide
IsKnowledgeManagementEnabled invalid Toujours false, l’intégration de la gestion des connaissances n’est pas prise en charge.
IsMailMergeEnabled valide
IsManaged valide
IsMappable valide
IsOfflineInMobileClient invalid Toujours false, les valeurs des tables virtuelles ne sont pas mises en cache pour l’utilisation hors connexion.
IsOneNoteIntegrationEnabled valide
IsOptimisticConcurrencyEnabled invalid Toujours false, la concurrence doit être implémentée dans la source de données.
IsPrivate valide
IsQuickCreateEnabled valide
IsReadOnlyInMobileClient valide
IsRenameable valide
IsSLAEnabled invalid Toujours false
IsStateModelAware invalid
IsValidForAdvancedFind valide
IsValidForQueue valide
IsVisibleInMobile valide
IsVisibleInMobileClient valide
Clés invalid Les clés secondaires ne sont pas prises en charge
LogicalCollectionName valide
LogicalName valide
ManyToManyRelationships valide
ManyToOneRelationships valide Non pris en charge entre deux tables virtuelles.
MetadataId valide
MobileOfflineFilters invalid Toujours false, l’utilisation hors connexion n’est pas prise en charge.
ObjectTypeCode valide
OneToManyRelationships valide
OwnershipType invalid Toujours OrganizationOwned
PrimaryIdAttribute valide
PrimaryImageAttribute valide
PrimaryNameAttribute valide
Privilèges invalid
RecurrenceBaseEntityLogicalName invalid
ReportViewName invalid
SchemaName valide
SyncToExternalSearchIndex invalid

Modifications du comportement des propriétés de définition de colonne

Le tableau suivant explique comment le comportement des Propriétés AttributeMetadata standard est modifié pour les tables virtuelles. Certaines propriétés ne sont pas valides pour les tables virtuelles, tandis que d’autres sont limitées en étendue ou valeur.

Propriété de métadonnées S’applique ? Remarques
ColumnNumber invalid
DeprecatedVersion valide
Description valide
DisplayName valide
EntityLogicalName valide
ExtensionData invalid
HasChanged valide
InheritsFrom valide
IntroducedVersion valide
IsAuditEnabled invalid Toujours false, l’audit n’est pas pris en charge.
IsCustomAttribute valide
IsCustomizable valide
IsFilterable valide
IsGlobalFilterEnabled valide
IsLogical valide
IsManaged valide
IsPrimaryId valide
IsPrimaryName valide
IsRenameable valide
IsSearchable valide
IsSecured invalid Toujours false, la sécurité au niveau des champs n’est pas prise en charge.
IsSortableEnabled valide
IsValidForAdvancedFind valide
IsValidForCreate valide
IsValidForRead valide
IsValidForUpdate valide
LinkedAttributeId valide
LogicalName valide
MetadataId valide
RequiredLevel valide
SchemaName valide
SourceType invalid Toujours 0, les valeurs calculées ou de cumul ne sont pas prises en charge.

Voir aussi

Se familiariser avec les entités virtuelles
Fournisseurs de données de tables virtuelles personnalisées
Exemple : Plug-in générique fournisseur de données des tables virtuelles

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).