Ne pas récupérer toutes les colonnes Entité via les API de requête
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"));
-
var query = new QueryExpression("account"); query.ColumnSet.AddColumn("name"); query.ColumnSet.AddColumn("address1_city"); var results = service.RetrieveMultiple(query);
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 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
ColumnSet Class
Sélectionner des colonnes à l’aide de QueryExpression
Interroger les données à l’aide de QueryExpression
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é).