Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Catégorie : Performance
Potentiel d’impact : Élevé
Symptômes
La récupération de toutes les colonnes peut entraîner :
- Des problèmes de performances dus à la quantité de données étant récupérée
- Exécuter fortuite de plug-in/processus
Recommandation
Pour des performances optimales, vous devez uniquement sélectionner la quantité minimale de données requises par votre application en interrogeant les données Microsoft Dataverse.
Paramètre ColumnSet
Lorsque vous utilisez la méthode IOrganizationService.Retrieve, définissez le paramètre columnSet sur une instance ColumnSet avec des colonnes spécifiées. Lorsque vous utilisez QueryExpression définissez la propriété ColumnSet avec les attributs obligatoires.
Voici quelques exemples :
Surcharge du constructeur ColumnSet(param string[] columns) pour QueryExpression.
var query = new QueryExpression("account") { ColumnSet = new ColumnSet("name", "address1_city") }; var results = service.RetrieveMultiple(query);Surcharge du constructeur ColumnSet(param string[] columns) pour RetrieveRequest.
var entity = service.Retrieve("account", Guid.NewGuid(), new ColumnSet("name", "address1_city"));Appel de la méthode ColumnSet.AddColumn(String).
var query = new QueryExpression("account"); query.ColumnSet.AddColumn("name"); query.ColumnSet.AddColumn("address1_city"); var results = service.RetrieveMultiple(query);Appel de la méthode ColumnSet.AddColumns(String[]).
var query = new QueryExpression("account"); query.ColumnSet.AddColumns("name", "address1_city"); var results = service.RetrieveMultiple(query);
Les classes suivantes contiennent une instance ColumnSet :
- ConvertQuoteToSalesOrderRequest
- GenerateInvoiceFromOpportunityRequest
- GenerateQuoteFromOpportunityRequest
- GenerateSalesOrderFromOpportunityRequest
- RetrieveAllChildUsersSystemUserRequest
- RetrieveBusinessHierarchyBusinessUnitRequest
- RetrieveMembersTeamRequest
- RetrieveRequest
- RetrieveSubsidiaryTeamsBusinessUnitRequest
- RetrieveSubsidiaryUsersBusinessUnitRequest
- RetrieveTeamsSystemUserRequest
- RetrieveUnpublishedRequest
- RetrieveUserSettingsSystemUserRequest
- ReviseQuoteRequest
- SearchByBodyKbArticleRequest
- IOrganizationService.Retrieve
- QueryExpression
Schémas problématiques
Requêtes qui comprennent un ColumnSet défini où la propriété AllColumns est true demandent à la plateforme de publier une commande SQL pour « SÉLECTIONNER * » toutes les données physiques incluses dans le plan de requête. Ce scénario doit être évité autant que possible.
Avertissement
Ces scénarios doivent être évités.
Appel de la méthode de configuration ColumnSet.AllColumns.
var columns = new ColumnSet(); columns.AllColumns = true; var query = new QueryExpression("account"); query.ColumnSet = columns; var results = service.RetrieveMultiple(query);Surcharge du constructeur ColumnSet(bool allColumns).
var query = new QueryExpression("account") { ColumnSet = new ColumnSet(true) }; var results = service.RetrieveMultiple(query);Surcharge du constructeur ColumnSet(bool allColumns) pour RetrieveRequest.
var entity = service.Retrieve("account", Guid.Parse("bec45132-392a-4617-b935-a64ef04738e4"), new ColumnSet(true));
Informations supplémentaires
Les requêtes envoyées pour récupérer les données de Dynamics 365 ne doivent pas sélectionner toutes les colonnes. En revanche, différentes colonnes spécifiques doivent être spécifiées dans l’instance ColumnSet associée à la requête. La récupération de toutes les colonnes d’une entité peut avoir une incidence négative sur les performances. En outre, vous pouvez déclencher involontairement des événements d’enregistrement de plug-in en récupérant les colonnes que vous n’utilisez pas avec et en publiant une mise à jour.
Voir aussi
Classe ColumnSet
Sélectionner des colonnes à l’aide de QueryExpression
Interroger les données à l’aide de QueryExpression