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.
Pour définir des conditions sur les lignes de données à retourner, utilisez l’élément de filtre dans une entité, une entité de lien ou un autre filter élément.
Pour définir les conditions, ajoutez un ou plusieurs éléments de condition au filtre. L’attribut filter contenant détermine si typetoutes (and) ou une (or) des conditions doivent être remplies. La valeur par défaut est and. En imbriquant les éléments de filtre, vous pouvez créer des critères complexes de filtre qui combinent des éléments évalués à l’aide de and ou or.
Chacun condition a un operator attribut pour évaluer une valeur de colonne de ligne. Il existe de nombreuses valeurs d’opérateur de condition à choisir.
Par exemple, la requête suivante retourne les enregistrements de compte où address1_city est égal à « Redmond ». Il utilise <filter type='and'> avec l’opérateur eq.
<fetch>
<entity name='account'>
<attribute name='name' />
<filter type='and'>
<condition attribute='address1_city'
operator='eq'
value='Redmond' />
</filter>
</entity>
</fetch>
Cette requête retourne les enregistrements de compte où address1_city est égal à « Redmond », « Seattle » ou « Bellevue ». Il utilise <filter type='or'> avec trois éléments de condition qui utilisent chacun l’opérateur eq.
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='address1_city' />
<filter type='or'>
<condition attribute='address1_city'
operator='eq'
value='Redmond' />
<condition attribute='address1_city'
operator='eq'
value='Seattle' />
<condition attribute='address1_city'
operator='eq'
value='Bellevue' />
</filter>
</entity>
</fetch>
La requête précédente peut également être représentée à l’aide de l’opérateur in avec un seul condition élément. Cette condition contient plusieurs éléments de valeur pour spécifier les valeurs à comparer à address1_city.
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='address1_city' />
<filter type='and'>
<condition attribute='address1_city'
operator='in'>
<value>Redmond</value>
<value>Seattle</value>
<value>Bellevue</value>
</condition>
</filter>
</entity>
</fetch>
Paramètres d’opérateur
Les opérateurs ne peuvent nécessiter aucun paramètre, un seul paramètre ou plusieurs paramètres. L’opérateur détermine la façon dont vous définissez la valeur à évaluer.
Aucun paramètre
Certains opérateurs ne nécessitent aucun paramètre. Par exemple, vous pouvez utiliser l’opérateur eq-userid pour évaluer n’importe quel identificateur unique pour déterminer s’il correspond à l’ID de l’utilisateur appelant.
<condition attribute='ownerid'
operator='eq-userid' />
Paramètre unique
Lorsqu’un opérateur nécessite un paramètre unique, utilisez l’attribut value pour définir la valeur à évaluer.
Par exemple, vous pouvez utiliser l’opérateur eq pour évaluer la statecode valeur de colonne de choix d’un enregistrement en définissant l’attribut value .
<condition attribute='statecode'
operator='eq'
value='0' />
Paramètres multiples
Lorsqu’un opérateur nécessite plusieurs paramètres, utilisez l’élément valeur pour spécifier les valeurs à évaluer. Par exemple, vous pouvez utiliser l’opérateur entre pour évaluer un nombre pour déterminer s’il se trouve entre un ensemble de valeurs.
<condition attribute="numberofemployees"
operator="between">
<value>6</value>
<value>20</value>
</condition>
Filtres sur l’entité de lien
Lorsque vous appliquez un filtre dans une entité de lien, le filtre est appliqué avec la jointure, sauf si vous configurez le filtre pour qu’il se produise après la jointure.
Lorsque la valeur de l’attribut link-entitylink-type est outer, vous souhaiterez peut-être que le filtre soit appliqué après la jointure en définissant la valeur d’attribut de conditionentityname . Si vous utilisez une entité de lienalias, utilisez la alias valeur pour définir l’attributentityname. Sinon, définissez la valeur de l’attribut entityname sur la valeur de l’attribut link-entityname .
Par exemple, la requête suivante retourne des contacts sans compte parent ou un compte parent sans télécopie.
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter>
<condition entityname='a'
attribute='fax'
operator='null' />
</filter>
<link-entity name='account'
from='accountid'
to='parentcustomerid'
link-type='outer'
alias='a' />
</entity>
</fetch>
Filtrer sur les valeurs de colonne dans la même ligne
Vous pouvez créer des filtres qui comparent des colonnes sur des valeurs dans la même ligne à l’aide de l’attribut valueof . Par exemple, si vous souhaitez rechercher des enregistrements de contact où la firstname valeur de colonne correspond à la lastname valeur de colonne, vous pouvez utiliser cette requête :
<fetch>
<entity name='contact' >
<attribute name='firstname' />
<filter>
<condition attribute='firstname'
operator='eq'
valueof='lastname' />
</filter>
</entity>
</fetch>
Comparaisons croisées entre colonnes de tableau
Avec FetchXML uniquement, vous pouvez comparer les valeurs de champ dans les tables associées. L’exemple suivant retourne des lignes où la fullname colonne contact correspond à la colonne de compte name .
<fetch>
<entity name='contact'>
<attribute name='contactid' />
<attribute name='fullname' />
<filter type='and'>
<condition attribute='fullname'
operator='eq'
valueof='acct.name' />
</filter>
<link-entity name='account'
from='accountid'
to='parentcustomerid'
link-type='outer'
alias='acct'>
<attribute name='name' />
</link-entity>
</entity>
</fetch>
L’élément link-entity doit utiliser un alias attribut et la valeur du valueof paramètre doit référencer cet alias et le nom de colonne dans la table associée.
Limitations sur les filtres de comparaison de colonnes
Il existe des limitations sur ces types de filtres :
La condition peut uniquement utiliser ces opérateurs :
Operator Descriptif eq Les valeurs sont comparées pour l’égalité. ne Les deux valeurs ne sont pas égales. gt La valeur est supérieure à la valeur comparée. ge La valeur est supérieure ou égale à la valeur comparée. lt La valeur est inférieure à la valeur comparée. le La valeur est inférieure ou égale à la valeur comparée. Seules deux colonnes peuvent être comparées à la fois
Les opérations de condition étendues ne sont pas prises en charge. Par exemple :
valueof='amount'+ 100Les colonnes doivent être du même type. Par exemple : Vous ne pouvez pas comparer une valeur de chaîne à une valeur numérique
Filtrer des valeurs dans des enregistrements associés
Pour filtrer les valeurs dans les enregistrements associés sans renvoyer ces valeurs, utilisez un élément d’entité de lien dans l’élément de filtre avec l’un des attributs suivants link-type :
| Nom | Descriptif |
|---|---|
any |
Utilisez ce paramètre dans un élément de filtre. Restreint les résultats aux lignes parentes avec toutes les lignes correspondantes dans l’entité liée. |
not any |
Utilisez ce paramètre dans un élément de filtre. Restreint les résultats aux lignes parentes sans lignes correspondantes dans l’entité liée. |
all |
Utilisez ce paramètre dans un élément de filtre. Restreint les résultats aux lignes parentes où il existe des lignes avec une valeur de colonne from correspondante dans l’entité de lien, mais aucune de ces lignes correspondantes ne satisfait aux filtres supplémentaires définis pour cette entité de lien. Vous devez inverser les filtres supplémentaires pour trouver des lignes parentes où chaque ligne d’entité de lien correspondante satisfait à certains critères supplémentaires. |
not all |
Utilisez ce paramètre dans un élément de filtre. Restreint les résultats aux lignes parentes avec toutes les lignes correspondantes dans l’entité liée. Ce type de lien est équivalent à any malgré le nom. |
Lorsque vous utilisez ces types de liens à l’intérieur d’un élément de filtre, ces filtres sont des conditions enfants qui suivent le comportement défini par l’attribut type du parent filter.
Les filtres utilisant ces types retournent la ligne parente au plus une fois même si plusieurs lignes correspondantes existent dans l’entité de lien. Ils ne permettent pas de renvoyer les valeurs de colonne à partir des lignes d’entité de lien.
Exemples de filtres sur les valeurs dans les enregistrements associés
Les exemples suivants illustrent le filtrage sur les valeurs des enregistrements associés. Ces exemples incluent les instructions SQL équivalentes pour expliquer le comportement.
Ou filtrer avec link-typeany
Cette requête utilise un filter de type or avec un link-entity enfant de type any pour renvoyer les enregistrements dans contact qui :
- soit sont référencés par la colonne de recherche PrimaryContactId d’au moins un enregistrement de compte dont la colonne Nom est égale à « Contoso »,
- ou si la colonne de liste de sélection Contact.StateCode a la valeur 1 : Inactive :
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='or'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='any'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
<condition attribute='statecode'
operator='eq'
value='1' />
</filter>
</entity>
</fetch>
link-type
not any
Cette requête utilise le not any type de lien pour renvoyer les enregistrements de la table de contacts qui n’est pas référencée par la colonne de recherche PrimaryContactId d’un enregistrement de compte dont la colonne Name est égale à « Contoso ». L’enregistrement de contact peut toujours être référencé par les enregistrements de compte avec d'autres valeurs de la colonne Nom.
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='not any'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
link-type
not all
Note
La signification des types de liens all et not all est à l'opposé de ce que les dénominations pourraient laisser entendre, et ils sont généralement utilisés avec des filtres inversés :
- Une entité de lien de type
not allest équivalente àanyet retourne les enregistrements parents dont les entités de lien correspondent aux filtres. - Une entité de lien de type
allretourne des enregistrements parents lorsque certains enregistrements d’entité de lien avec une valeur de colonne correspondantefromexistent, mais qu’aucune de ces lignes d’entité de liaison ne satisfait les filtres supplémentaires définis à l’intérieur de l’élément link-entity.
Cette requête utilise un link-entity type not all pour retourner des enregistrements de la table de contacts référencées par la colonne de recherche PrimaryContactId d’au moins un enregistrement de compte dont la colonne Name est égale à « Contoso » :
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='not all'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
link-type
all
Cette requête utilise un link-entity de type all pour renvoyer les enregistrements de la table contact qui sont référencés par la colonne de recherche PrimaryContactId de certainsenregistrements de comptemais aucunde cesenregistrementsde compte n'ont leur Colonne de nom égale à « Contoso » :
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='all'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
Limites des conditions
Vous ne pouvez pas inclure plus de 500 éléments de condition totale et d’entité de liaison dans une requête FetchXml. Sinon, cette erreur s’affiche :
Nom :
TooManyConditionsInQuery
Code :0x8004430C
Nombre :-2147204340
Message :Number of conditions in query exceeded maximum limit.
Vous devez réduire le nombre de conditions pour exécuter la requête. Vous pouvez peut-être réduire le nombre de conditions à l’aide de l’opérateur in qui peut être utilisé avec des nombres, des identificateurs uniques et des chaînes allant jusqu’à 850 caractères.
Étapes suivantes
Découvrez comment paginer les résultats.