Utiliser FetchXML pour créer une requête

 

Date de publication : janvier 2017

S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Pour exécuter une requête FetchXML dans Microsoft Dynamics 365 et Microsoft Dynamics 365 (Online), vous devez d’abord créer la chaîne recherchée XML. Après avoir créé la chaîne recherchée, utilisez la méthode IOrganizationService.RetrieveMultiple pour exécuter la chaîne recherchée. Les privilèges de l’utilisateur connecté attribue l’ensemble des enregistrements renvoyés. Seuls les enregistrements pour lesquels l’utilisateur connecté dispose d’un accès en lecture sont renvoyés.

La chaîne recherchée FetchXML doit se conformer à la définition de schéma du langage FetchXML. Pour plus d'informations, voir FetchXML schema.

Vous pouvez enregistrer une requête en créant un enregistrement SavedQuery, comme montré dans Exemple : valider et exécuter une requête enregistrée. Définissez visible sur le nœud link-entity à false pour masquer l’entité associée dans l’interface utilisateur Recherche avancée. Elle participera toujours à la requête et renverra toujours les résultats appropriés.

Avertissement

Ne récupérez pas tous les attributs d’une requête du fait de l’impact négatif sur les performances. Cela est particulièrement vrai si la requête est utilisée comme un paramètre à une demande de mise à jour. Dans une mise à jour, si tous les attributs sont inclus, cela définit les valeurs de champ, même si elles sont inchangées, et engendre souvent des mises à jour en cascade vers les enregistrements enfants.

Créer la chaîne de requête

Dans l’exemple suivant, l’instruction FetchXML récupère tous les comptes :

<fetch mapping='logical'> 
   <entity name='account'>
      <attribute name='accountid'/> 
      <attribute name='name'/> 
</entity>
</fetch>

Dans l’exemple suivant, l’instruction FetchXML récupère tous les comptes où le nom de l’utilisateur détenteur ne correspond pas à Cannon :

<fetch mapping='logical'>
   <entity name='account'> 
      <attribute name='accountid'/> 
      <attribute name='name'/> 
      <link-entity name='systemuser' to='owninguser'> 
         <filter type='and'> 
            <condition attribute='lastname' operator='ne' value='Cannon' /> 
          </filter> 
      </link-entity> 
   </entity> 
</fetch>  

Dans l’exemple suivant, l’instruction FetchXML utilise un nombre pour définir le nombre maximal d’enregistrements renvoyés de la requête. Dans ce cas, les 3 premiers comptes sont renvoyés de la requête,

<fetch mapping='logical' count='3'>
  <entity name='account'>
   <attribute name='name' alias='name'/>
  </entity></fetch>

Cet exemple illustre une jointure interne entre EntityMap et AttributeMap où EntityMapID correspond.

<fetch version='1.0' mapping='logical' distinct='false'>
   <entity name='entitymap'>
      <attribute name='sourceentityname'/>
      <attribute name='targetentityname'/>
      <link-entity name='attributemap' alias='attributemap' to='entitymapid' from='entitymapid' link-type='inner'>
         <attribute name='sourceattributename'/>
         <attribute name='targetattributename'/>
      </link-entity>
   </entity>
 </fetch>

Exécuter la requête

Le code suivant explique comment exécuter une requête FetchXML :

// Retrieve all accounts owned by the user with read access rights to the accounts and 
// where the last name of the user is not Cannon. 
string fetch2 = @"
   <fetch mapping='logical'>
     <entity name='account'> 
        <attribute name='accountid'/> 
        <attribute name='name'/> 
        <link-entity name='systemuser' to='owninguser'> 
           <filter type='and'> 
              <condition attribute='lastname' operator='ne' value='Cannon' /> 
           </filter> 
        </link-entity> 
     </entity> 
   </fetch> "; 

EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2));foreach (var c in result.Entities)   {   System.Console.WriteLine(c.Attributes["name"]);   }

Résultat de la requête

Lorsque vous lancez une requête FetchXML en utilisant la méthode RetrieveMultiple, la valeur renvoyée est une EntityCollection contenant les résultats de la requête. Vous pouvez ensuite itérer via la collection d’entités. L’exemple précédent utilise une boucle foreach pour itérer via la collection de résultats de la requête FetchXML.

Voir aussi

Générer des requêtes avec FetchXML
Utiliser l’agrégation FetchXML
FetchXML schema

Microsoft Dynamics 365

© 2017 Microsoft. Tous droits réservés. Copyright