Référence syntaxique du langage WIQL

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Vous pouvez utiliser la syntaxe WIQL pour définir une requête en tant que lien hypertexte ou lors de l’utilisation de l’API REST Work Item Query Language.

La syntaxe WIQL prend en charge toutes les fonctions disponibles via l’Éditeur de requête du portail web, plus quelques autres. Vous pouvez spécifier les champs à retourner et spécifier le regroupement logique des clauses de requête. En outre, vous pouvez utiliser une clause ASOF pour filtrer en fonction des affectations sur la base d’une date précédente.

Important

La syntaxe WIQL est utilisée pour exécuter l’API REST Requête par Wiql. Actuellement, il n’existe aucun moyen d’appeler l’API pour retourner directement des informations détaillées sur l’élément de travail à partir d’une requête WIQL. Quels que soient les champs que vous incluez dans l’instruction SELECT, l’API retourne uniquement les ID d’élément de travail. Pour obtenir toutes les informations, vous devez effectuer deux étapes : (1) obtenir l’ID des éléments de travail à partir d’un WIQL et (2) obtenir les éléments de travail via Obtenir une liste d’éléments de travail par ID et pour des champs spécifiques.

Prérequis

Une requête retourne uniquement les éléments de travail pour lesquels vous avez l’autorisation Afficher les éléments de travail ou l’autorisation Afficher les éléments de travail dans ce nœud. En général, ces autorisations sont accordées aux membres des groupes Readers et aux groupes Contributors de chaque projet d’équipe. Pour plus d’informations, consultez Autorisations et groupes.

Vue d’ensemble du langage de requête

Le langage de requête d’élément de travail comporte cinq parties indiquées dans l’extrait de code de syntaxe suivant et décrites dans le tableau suivant. La syntaxe WIQL ne respecte pas la casse.

SELECT
    [System.Id],
    [System.AssignedTo],
    [System.State],
    [System.Title],
    [System.Tags]
FROM workitems
WHERE
    [System.TeamProject] = 'Design Agile'
    AND [System.WorkItemType] = 'User Story'
    AND [System.State] = 'Active'
ORDER BY [System.ChangedDate] DESC
ASOF '02-11-2020'

Conseil

En installant l’extension Wiql Editor de la Place de marché, vous pouvez créer vos requêtes à l’aide de l’Éditeur de requête, puis afficher la syntaxe WIQL. Vous pouvez ensuite copier et modifier la syntaxe WIQL et exécuter la requête à l’aide du hub Wiql Playground ajouté à Boards.

Clause

Exemple

SELECT

Identifie les champs à retourner pour chaque élément de travail retourné par la requête. Vous pouvez spécifier le nom convivial ou le nom de référence. Utilisez des crochets ([]) si le nom contient des vides ou des points.

FROM

Indique si vous souhaitez que la requête recherche des éléments de travail ou des liens entre des éléments de travail.

WHERE

Spécifie les critères de filtre de la requête. Pour plus d’informations, consultez Conditions de filtre (WHERE) plus loin dans cet article.

ORDER BY

Spécifie l’ordre de tri des éléments de travail retournés. Vous pouvez spécifier Croissant (Asc) ou Décroissant (Desc) pour un ou plusieurs champs. Par exemple :
ORDER BY [State] Asc, [Changed Date] Desc

ASOF

Spécifie une requête historique en indiquant une date pour laquelle le filtre doit être appliqué. Par exemple, cette requête retourne tous les récits utilisateur définis comme actifs le 11 février 2020. Spécifiez la date en fonction des instructions fournies dans Modèle de date et d’heure. ASOF '02-11-2020'

Notes

La longueur WIQL des requêtes effectuées sur Azure Boards ne doit pas dépasser 32 000 caractères. Le système ne vous permet pas de créer ou d’exécuter des requêtes qui dépassent cette longueur.

Modèle de date et d’heure

Le modèle de date et d’heure que vous entrez pour les champs DateTime doit correspondre à celui que vous sélectionnez dans votre profil. Pour afficher ou modifier votre sélection, consultez Définir les préférences utilisateur.

Capture d’écran montrant les options de liste déroulante Modèle de date dans le volet Heure et paramètres régionaux.Capture d’écran montrant les options de liste déroulante Modèle d’heure dans le volet Heure et paramètres régionaux.

Capture d’écran montrant le volet Heure et paramètres régionaux avec les champs Modèle de date et Modèle d’heure.

Placez entre guillemets (guillemets simples ou doubles pris en charge) les littéraux DateTime utilisés dans les comparaisons. Ils doivent être au format .NET DateTime de l’ordinateur client local exécutant la requête. Sauf si un fuseau horaire est spécifié, les littéraux DateTime se trouvent dans le fuseau horaire de l’ordinateur local.

WHERE 
   AND [System.ChangedDate] >= '01-18-2019 GMT'
   AND ([Closed Date] < '01-09-2022 GMT'
   OR [Resolved Date] >= '01-18-2019 14:30:01')  

Lorsque l’heure est omise dans un littéral DateTime et que le paramètre dayPrecision est égal à false, l’heure est supposée être égale à zéro (minuit). Le paramètre par défaut pour le paramètre dayPrecision est false.

Vous pouvez également spécifier le format ISO 8601, qui est valide quels que soient les paramètres régionaux. ISO 8601 représente la date et l’heure en commençant par l’année, suivie du mois, du jour, de l’heure, des minutes, des secondes et des millisecondes. Par exemple, 2021-12-10 15:00:00.000, représente le 10 décembre 2021 à 15h00 en heure locale. Voici un exemple d’utilisation du format ISO 8601.

WHERE 
   AND [System.ChangedDate] >= '2019-01-18T00:00:00.0000000'
   AND ([Closed Date] < '2022-01-09T00:00:00.0000000'
   OR [Resolved Date] >= '2019-01-18T00:00:00.0000000')  

Champs personnalisés

Vous pouvez ajouter un champ personnalisé à une clause de requête. Avec WIQL, vous devez spécifier le nom de référence pour le champ personnalisé. Pour les projets qui utilisent un modèle de processus hérité, les champs personnalisés sont généralement étiquetés avec Custom. ajouté au début de leur nom et les espaces supprimés. Par exemple :

Nom convivial Nom de la référence
Approbateur Custom.Approver
Type de requête Custom.RequestType
Estimation de l’étendue Custom.CustomEstimate

Pour les projets qui utilisent le modèle de processus XML local, le nom de référence est défini par les définitions de type d’élément de travail XML.

Pour plus d’informations, veuillez consulter la rubrique Champs et attributs d’élément de travail.

Spécifier des clauses de filtre (WHERE)

La clause WHERE spécifie les critères de filtre. La requête retourne uniquement les éléments de travail qui répondent aux critères spécifiés. Par exemple, l’exemple de clause WHERE suivant retourne des récits utilisateur actifs et qui vous sont affectés.

WHERE [Work Item Type] = 'User Story'
   AND [State] = 'Active'
   AND [Assigned to] = @Me

Vous pouvez contrôler l’ordre dans lequel les opérateurs logiques sont évalués en les plaçant entre parenthèses pour regrouper les critères de filtre. Par exemple, pour retourner des éléments de travail qui vous sont assignés ou que vous avez fermé, modifiez le filtre de requête pour qu’il corresponde à l’exemple suivant.

WHERE
    [System.TeamProject] = @project
    AND (
        [System.WorkItemType] = 'Product Backlog Item'
        AND (
            [System.AssignedTo] = @me
            OR [Microsoft.VSTS.Common.ClosedBy] = @me
        )
    )

Conditions de filtre

Chaque condition de filtre est composée de trois parties, chacune devant être conforme aux règles suivantes :

  • Champ : vous pouvez spécifier le nom de référence ou le nom convivial. Les exemples suivants sont une syntaxe WIQL valide :
    • Nom de la référence : SELECT [System.AssignedTo] ...
    • Nom convivial avec des espaces : SELECT [Assigned To] ...
    • Les noms sans espaces ne nécessitent pas de crochets : SELECT ID, Title ...
  • Opérateur : des valeurs valides sont spécifiées dans la section Opérateurs, plus loin dans cet article.
  • Valeur du champ : vous pouvez spécifier l’une des trois valeurs suivantes en fonction du champ spécifié.
    • Une valeur littérale doit correspondre au type de données de la valeur de champ.
    • Une *variable ou macro qui indique une certaine valeur. Par exemple, @Me indique la personne qui exécute la requête. Pour plus d’informations, consultez Macros et variables plus loin dans cet article.
    • Nom d’un autre champ. Par exemple, vous pouvez utiliser [Assigned to] = [Changed by] pour rechercher des éléments de travail assignés à la personne qui a modifié l’élément de travail en dernier.

Pour obtenir une description et les noms de référence de tous les champs définis par le système, consultez Index des champs d’élément de travail.

Opérateurs

Les requêtes utilisent des expressions logiques pour qualifier les jeux de résultats. Ces expressions logiques sont formées par une ou plusieurs opérations jointes.

Certaines opérations de requête simples sont répertoriées ci-dessous.

WHERE
    [System.TeamProject] = @project
    AND [System.WorkItemType] <> ''
    AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
    AND [Microsoft.VSTS.Common.Severity] <> '1 - Critical'

Le tableau ci-dessous récapitule tous les opérateurs pris en charge pour différents types de champs. Pour plus d’informations sur chaque type de champ, consultez Champs et attributs d’élément de travail.

Les opérateurs =, <>, >, <, >=, and <= fonctionnent comme prévu. Par exemple, System.ID > 100 interroge tous les éléments de travail avec un ID supérieur à 100. System.ChangedDate > '01-01-19 12:00:00' interroge tous les éléments de travail qui ont changé après midi le 1er janvier 2019.

Au-delà de ces opérateurs de base, il existe certains comportements et opérateurs spécifiques à certains types de champs.

Notes

Les opérateurs disponibles dépendent de votre plateforme et de votre version. Pour plus d’informations, consultez Référence rapide de requête.

Type de champ

Opérateurs pris en charge

Booléen

= , <> , =[Field] , <>[Field]

DateTime

= , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], In, Not In, Was Ever

Double, GUID, Entier

= , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], In, Not In, Was Ever

Identité

= , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], Contains, Not Contains, In, Not In, In Group, Not In Group, Was Ever

Texte brut

Contains Words, Not Contains Words, Is Empty, Is Not Empty

String

= , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], Contains, Not Contains, In, Not In, In Group, Not In Group, Was Ever

TreePath

=, <>, In, Not In, Under, Not Under

Regroupements logiques

Vous pouvez utiliser les termes AND et OR dans le sens booléen classique pour évaluer deux clauses. Vous pouvez utiliser les termes AND EVER et OR EVER lors de la spécification d’un opérateur WAS EVER. Vous pouvez regrouper des expressions logiques et les regrouper en fonction des besoins. Des exemples sont présentés ci-dessous.

WHERE
    [System.TeamProject] = @project
    AND (
        [System.WorkItemType] <> ''
        AND [System.State] IN ('Active', 'Approved', 'Committed', 'In Progress')
        AND (
            [System.CreatedBy] = ''
            OR [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
        )
    )

Vous pouvez inverser les opérateurs contains, under, et in à l’aide de not. Vous ne pouvez pas inverser l’opérateur ever. L’exemple ci-dessous interroge tous les éléments de travail qui ne sont pas affectés sous la sous-arborescence de Fabrikam Fiber\Account Management.

WHERE
    [System.TeamProject] = @project
    AND [System.WorkItemType] <> ''
    AND NOT [System.AreaPath] UNDER 'Fabrikam Fiber\Account Management'

Exemple de requête, Was Ever Assigned To

L’exemple d’Éditeur de requête suivant recherche tous les éléments de travail qui ont été attribués à Jamal Hartnett.

Capture d’écran de l’Éditeur de requête, requête de liste plate, tous les éléments attribués.

Et voici la syntaxe WIQL correspondante.

SELECT
    [System.Id],
    [System.Title],
    [System.State],
    [System.IterationPath]
FROM workitems
WHERE
    [System.TeamProject] = @project
    AND [System.WorkItemType] <> ''
    AND EVER [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'

Macros ou variables

Le tableau suivant répertorie les macros ou variables que vous pouvez utiliser dans une requête WIQL.

Macro Utilisation
@Me Utilisez cette variable pour rechercher automatiquement l'alias de l'utilisateur actuel dans un champ qui contient des alias d'utilisateur. Par exemple, vous pouvez rechercher les éléments de travail que vous avez ouverts si vous affectez à la colonne Champ la valeur Activé par, à la colonne Opérateur la valeur = et à la colonne Valeur la valeur @Me.
@CurrentIteration Utilisez cette variable pour filtrer automatiquement les éléments de travail affectés au sprint actuel pour l’équipe sélectionnée en fonction du contexte d’équipe sélectionné.
@Project Utilisez cette variable pour rechercher des éléments de travail dans le projet actuel. Par exemple, vous pouvez trouver tous les éléments de travail dans le projet actuel si vous affectez à la colonne Champ la valeur Projet d’équipe, à la colonne Opérateur la valeur = et à la colonne Valeur la valeur @Project.
@StartOfDay
@StartOfWeek
@StartOfMonth
@StartOfYear
Utilisez ces macros pour filtrer les champs DateTime en fonction du début du jour, de la semaine, du mois, de l’année en cours ou d’un décalage sur l’une de ces valeurs. Par exemple, vous pouvez rechercher tous les éléments créés lors des 3 derniers mois en affectant à la colonne Date de création la valeur Date d’activation, à la colonne Opérateur la valeur >= et à la colonne Valeur la valeur @StartOfMonth - 3.
@Today Utilisez cette variable pour rechercher des éléments de travail en rapport avec la date actuelle ou une date antérieure. Vous pouvez également modifier la variable @Today en retirant des jours. Par exemple, vous pouvez rechercher tous les éléments activés la semaine dernière en affectant à la colonne Champ la valeur Date d’activation, à la colonne Opérateur la valeur >= et à la colonne Valeur la valeur @Today - 7.
[Any] Utilisez cette variable pour rechercher des éléments de travail en rapport avec n'importe quelle valeur définie pour un champ particulier.

Macro @me

La macro @me remplace le nom du compte intégré Windows de l’utilisateur qui exécute la requête. L’exemple ci-dessous montre comment utiliser la macro et l’instruction statique équivalente. La macro est destinée à être utilisée avec des champs d’identité comme Assigned To.

WHERE  
   [System.AssignedTo] = @Me 

Macro @today

Vous pouvez utiliser la macro @today avec n’importe quel champ DateTime. Cette macro remplace minuit de la date actuelle sur l’ordinateur local qui exécute la requête. Vous pouvez également spécifier @today+x ou @today-y avec des décalages entiers pour x jours après @today et y jours avant @today, respectivement. Une requête qui utilise la macro @today peut retourner différents jeux de résultats en fonction du fuseau horaire dans lequel elle est exécutée.

Les exemples ci-dessous supposent que nous sommes le 3 janvier 2019.

WHERE  
   [System.CreatedDate] = @today

Équivaut à :

WHERE  
   [System.CreatedDate] = '01-03-2019'

And

WHERE  
   [System.CreatedDate] > @today-2

Équivaut à :

WHERE  
   [System.CreatedDate] > '01-01-2019'

Macros @StartOfDay, @StartOfWeek, @StartOfMonth, @StartOfYear

Vous pouvez utiliser les macros @StartOf... avec n’importe quel champ DateTime. Cette macro remplace minuit du jour actuel, début de la semaine, début du mois ou début de l’année sur l’ordinateur local qui exécute la requête.

Notes

Nécessite Azure DevOps Server 2019 Update 1 ou version ultérieure.

Ces macros acceptent une chaîne de modificateur dont le format est (+/-)nn(y|M|w|d|h|m). Comme pour la macro @Today, vous pouvez spécifier des décalages entiers (plus ou moins). Si le qualificateur d’unité de temps est omis, elle utilise par défaut la période naturelle de la fonction. Par exemple, @StartOfWeek("+1") est identique à @StartOfWeek("+1w"). Si le signe plus/moins (+/-) est omis, plus est supposé.

Cette syntaxe vous permet d’imbriquer des modificateurs et de décaler votre requête deux fois. Par exemple, la clause Closed Date >= @StartOfYear - 1 filtre les éléments de travail qui ont été fermés depuis l’année dernière. En la modifiant en Closed Date >= @StartOfYear('+3M') - 1, elle exclut les éléments de travail fermés au cours des trois premiers mois de l’année dernière. La syntaxe WIQL est illustrée dans l’exemple suivant.

WHERE 
   [Microsoft.VSTS.Common.ClosedDate] >=@StartOfYear('+3M') - 1

Les exemples suivants supposent que nous sommes le 5 avril 2019.

WHERE  
   [Microsoft.VSTS.Common.CreatedDate] >= @StartOfMonth-3

Équivaut à :


WHERE 
   [Microsoft.VSTS.Common.CreatedDate] >= '01-01-2019'

And

WHERE 
   [Microsoft.VSTS.Scheduling.TargetDate] > @StartOfYear

Équivaut à :

WHERE 
   [Microsoft.VSTS.Scheduling.TargetDate]  > '01-01-2019'

Macros personnalisées

WIQL prend également en charge les macros personnalisées arbitraires. Toute chaîne préfixée par un @ est traitée comme un macro personnalisé et est substituée. La valeur de remplacement de la macro personnalisée est récupérée à partir du paramètre de contexte de la méthode de requête dans le modèle d’objet. La méthode suivante est l’API utilisée pour les macros :

public WorkItemCollection Query(string wiql, IDictionary context)

Le paramètre de contexte contient des paires clé-valeur pour les macros. Par exemple, si le contexte contient une paire clé-valeur de (project, MyProject), alors @project est remplacé par MyProject dans le WIQL. Ce remplacement est la façon dont le générateur de requête d’élément de travail gère la macro @project dans Visual Studio.

Spécifier des requêtes historiques (ASOF)

Vous pouvez utiliser une clause ASOF dans une requête pour filtrer les éléments de travail qui répondent aux conditions de filtre spécifiées, car ils ont été définis à une date et une heure spécifiques.

Notes

Vous ne pouvez pas créer de requêtes ASOF dans le concepteur de requêtes de Visual Studio. Si vous créez un fichier de requête (.wiq) qui inclut une clause ASOF, puis que vous le chargez dans Visual Studio, la clause ASOF est ignorée.

Supposons qu’un élément de travail ait été classé sous un chemin d’itération de Fabrikam Fiber\Release 1 et affecté à ’Jamal Hartnett’ avant le 5/05/2022. Toutefois, l’élément de travail a récemment été attribué à « Raisa Pokrovskaya » et déplacé vers un nouveau chemin d’itération de Version 2. L’exemple de requête suivant retourne les éléments de travail assignés à Jamal Hartnett parce que la requête est basée sur l’état des éléments de travail à une date et heure passées.

SELECT
    [System.Id],
    [System.Title],
    [System.State],
    [System.IterationPath]
FROM workitems
WHERE
    [System.TeamProject] = @project
    AND [System.WorkItemType] <> ''
    AND ([System.IterationPath] UNDER 'Fabrikam Fiber\Release 1'
    AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>') 
    ASOF  '01-05-2022 00:00:00.0000000'

Remarque

Si aucune heure n’est spécifiée, WIQL utilise minuit. Si aucun fuseau horaire n’est spécifié, WIQL utilise le fuseau horaire de l’ordinateur client local.

Définir l’ordre de tri (ORDER BY)

Vous pouvez utiliser la clause ORDER BY pour trier les résultats d’une requête sur un ou plusieurs champs dans l’ordre croissant ou décroissant.

Notes

Les préférences de tri du serveur SQL sur la couche données déterminent l’ordre de tri par défaut. Toutefois, vous pouvez utiliser les paramètres asc ou desc pour choisir un ordre de tri explicite.

L’exemple suivant trie d’abord les éléments de travail par Priorité dans l’ordre croissant (par défaut), puis par Date de création dans l’ordre décroissant (DESC).

SELECT
    [System.Id],
    [System.Title],
    [System.State],
    [System.IterationPath]
FROM workitems
WHERE
    [System.TeamProject] = @project
    AND [System.WorkItemType] <> ''
    AND [System.State] =  'Active'
    AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
ORDER BY [Microsoft.VSTS.Common.Priority],
    [System.CreatedDate] DESC

Pour retourner des liens entre éléments de travail, vous spécifiez FROM WorkItemLinks. Filtrez les conditions dans la clause WHERE peut s’appliquer aux liens ou à tout élément de travail étant la source ou la cible du lien. Par exemple, la requête suivante retourne les liens entre les éléments du backlog de produit et leurs éléments enfants actifs.

SELECT
    [System.Id],
    [System.Title],
    [System.State],
    [System.IterationPath]
FROM workitemLinks
WHERE
    (
        [Source].[System.TeamProject] = @project
        AND [Source].[System.WorkItemType] = 'Product Backlog Item'
    )
    AND (
        [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
    )
    AND (
        [Target].[System.TeamProject] = @project
        AND [Target].[System.WorkItemType] <> ''
        AND [Target].[System.State] <> 'Closed'
    )
ORDER BY [Microsoft.VSTS.Common.Priority],
    [System.CreatedDate] DESC
MODE (Recursive)

Le tableau suivant récapitule les différences entre les requêtes d’élément de travail et les requêtes pour les liens entre les éléments de travail.

Clause

Éléments de travail

Liens entre des éléments de travail

FROM

FROM WorkItems

FROM WorkItemLinks

WHERE

[FieldName] = Value

Specify one or more of the following:
[Source].[FieldName] = Value
[Target].[FieldName] = Value
[System.Links.LinkType] = 'LinkName'

MODE

Non applicable

Spécifiez l'une des valeurs suivantes :

  • MODE (MustContain) : (Valeur par défaut) Retourne uniquement les enregistrements WorkItemLinkInfo où les critères de source, de cible et de lien sont satisfaits.
  • MODE (MayContain) : retourne des enregistrements WorkItemLinkInfo pour tous les éléments de travail qui répondent aux critères de source et de lien, même si aucun élément de travail lié ne répond aux critères cibles.
  • MODE (DoesNotContain) : Retourne des enregistrements WorkItemLinkInfo pour tous les éléments de travail qui répondent aux critères de source et de lien, seulement si aucun élément de travail lié ne répond aux critères cibles.
  • MODE (Recursive) : utilisez pour les requêtes d’arborescence ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'). Le type de lien doit être Arborescence et la direction Direct. Retourne les enregistrements WorkItemLinkInfo pour tous les éléments de travail qui satisfont la source, de manière récursive pour la cible. ORDER BY et ASOF ne sont pas compatibles avec les requêtes d’arborescence.

RETURNS

Vous pouvez spécifier l’un des noms de type de lien système suivants.

Vous pouvez spécifier l’un des noms de type de lien système, répertoriés ci-dessous, ou un type de lien personnalisé que vous avez défini avec le processus XML local.

  • System.LinkTypes.Hierarchy-Forward
  • System.LinkTypes.Related
  • System.LinkTypes.Dependency-Predecessor
  • System.LinkTypes.Dependency-Successor
  • Microsoft.VSTS.Common.Affects-Forward (processus CMMI)

Pour plus d’informations, consultez Référence sur le type de lien.

Exemple de requête de type Arborescence

La requête suivante retourne tous les types d’élément de travail définis dans le projet en cours. La requête indiquée dans l’Éditeur de requête s’affiche comme illustré dans l’image suivante.

Capture d’écran de l’Éditeur de requête, requête d’arborescence, tous les éléments de travail et états.

La syntaxe WIQL équivalente est illustrée ci-dessous.

SELECT
    [System.Id],
    [System.Title],
    [System.State],
    [System.IterationPath]
FROM workitemLinks
WHERE
    (
        [Source].[System.TeamProject] = @project
        AND [Source].[System.WorkItemType] <> ''
        AND [Source].[System.State] <> ''
    )
    AND (
        [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
    )
    AND (
        [Target].[System.TeamProject] = @project
        AND [Target].[System.WorkItemType] <> ''
    )
MODE (Recursive)


La requête suivante retourne tous les types d’élément de travail définis dans le projet en cours. La requête indiquée dans l’Éditeur de requête s’affiche comme illustré dans l’image suivante.

Capture d’écran de l’Éditeur de requête, requête de lien direct, tous les éléments de travail et états.

La syntaxe WIQL équivalente est comme indiqué.

SELECT
    [System.Id],
    [System.WorkItemType],
    [System.Title],
    [System.AssignedTo],
    [System.State]
FROM workitemLinks
WHERE
    (
        [Source].[System.TeamProject] = @project
        AND [Source].[System.WorkItemType] <> ''
        AND [Source].[System.State] <> ''
    )
    AND (
        [System.Links.LinkType] = 'System.LinkTypes.Dependency-Reverse'
        OR [System.Links.LinkType] = 'System.LinkTypes.Related-Forward'
        OR [System.Links.LinkType] = 'System.LinkTypes.Dependency-Forward'
    )
    AND (
        [Target].[System.TeamProject] = @project
        AND [Target].[System.WorkItemType] <> ''
        AND [Target].[System.ChangedDate] >= @today - 60
    )
ORDER BY [System.Id]
MODE (MustContain)

Autres exemples de requêtes

L’exemple de requête WIQL classique suivant utilise des noms de référence pour les champs. La requête sélectionne les éléments de travail (aucun type d’élément de travail spécifié) avec Priority=1. La requête retourne l’ID et le Titre du jeu de retour en tant que colonnes. Les résultats sont triés par ID dans l’ordre croissant.

SELECT
    [System.Id],
    [System.Title],
    [System.State],
    [System.IterationPath]
FROM workitems
WHERE
    [System.TeamProject] = @project
    AND [Microsoft.VSTS.Common.Priority] <> ''
ORDER BY [System.Id]

Modèle date/heure

Vous spécifiez le modèle date-heure selon l’un des deux modèles suivants :

AND [System.ChangedDate] >= '1/1/2019 00:00:00Z'

Exemples de clauses

Les exemples d’instructions suivants montrent des clauses de qualification spécifiques.

Clause

Exemple

AND

SELECT [System.Id], [System.Title]
FROM WorkItems
WHERE [System.TeamProject] = @project
AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'

OR

SELECT [System.Id], [System.Title] 
FROM WorkItems 
WHERE [System.TeamProject] = @project 
AND ( [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
OR [System.AssignedTo] = ''Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>' )

NOT

SELECT [System.Id], [System.Title] 
FROM WorkItems 
WHERE [System.TeamProject] = @project 
AND [System.AssignedTo] EVER 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
AND [System.AssignedTo] NOT CONTAINS 'Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>'

EVER

SELECT [System.Id], [System.Title] 
FROM WorkItems 
WHERE [System.TeamProject] = @project 
AND [System.AssignedTo] EVER 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'

UNDER

SELECT [System.Id], [System.Title] 
FROM WorkItems 
WHERE [System.TeamProject] = @project 
AND [System.AssignedTo] EVER 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
AND [System.AreaPath] UNDER 'Agile1\Area 0'

ORDER BY

SELECT [System.Id], [System.Title] 
FROM WorkItems 
WHERE [System.TeamProject] = @project 
AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
ORDER BY [System.Id] [asc | desc]

ASOF (filtre temporel)

SELECT [System.Title] 
FROM workitems 
WHERE [System.IterationPath] = 'MyProject\Beta' 
AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>' 
ASOF '3/16/19 12:30'

Chaîne et PlainText

Placez entre guillemets (les guillemets simples ou doubles sont pris en charge) les littéraux de chaîne dans une comparaison avec un champ de chaîne ou de texte brut. Les littéraux de chaîne prennent en charge tous les caractères Unicode.

WHERE [Custom.Blocking] = 'Not Blocking'
WHERE [Custom.Blocking] <> 'Blocked'

Vous pouvez utiliser l’opérateur Contains pour rechercher une sous-chaîne n’importe où dans la valeur du champ.

WHERE [System.Description] contains 'WIQL' 

Zone et itération (TreePath)

Vous pouvez utiliser l’opérateur UNDER pour les champs Zone et Chemin d’itération. L’opérateur UNDER évalue si une valeur se trouve dans la sous-arborescence d’un nœud de classification spécifique. Par exemple, l’expression ci-dessous a la valeur true si le chemin de zone était « MyProject\Server\Administration », « MyProject\Server\Administration\Feature 1 », « MyProject\Server\Administration\Feature 2\SubFeature 5 » ou tout autre nœud dans la sous-arborescence.

WHERE [System.AreaPath] UNDER 'MyProject\Server\Administration'

Modificateurs et opérateurs spéciaux

Vous pouvez utiliser certains modificateurs et opérateurs spéciaux dans une expression de requête.

Utilisez l’opérateur IN pour évaluer si une valeur de champ est égale à l’une des valeurs d’un ensemble. Cet opérateur est pris en charge pour les types de champs Chaîne, Entier, Double et DateTime. Consultez l’exemple suivant avec son équivalent sémantique.

WHERE
    [System.TeamProject] = @project
    AND [System.CreatedBy] IN ('Jamal Hartnett <fabrikamfiber4@hotmail.com>', 'Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>', 'Christie Church <fabrikamfiber1@hotmail.com>')

or

WHERE
    [System.TeamProject] = @project
    AND (
        [System.CreatedBy] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
        OR [System.CreatedBy] = 'Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>'
        OR [System.CreatedBy] = 'Christie Church <fabrikamfiber1@hotmail.com>'
    )

L’opérateur EVER permet d’évaluer si une valeur de champ est égale ou n’a jamais égalé une valeur particulière dans toutes les révisions antérieures des éléments de travail. Les types de champs Chaîne, Entier, Double et DateTime prennent en charge cet opérateur. Il existe d’autres syntaxes pour l’opérateur EVER. Par exemple, les extraits de code ci-dessous demandent si tous les éléments de travail ont été attribués à Jamal, Raise ou Christie à un moment donné.

WHERE
    [System.TeamProject] = @project
    AND (
        EVER [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
        OR EVER [System.AssignedTo] = 'Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>'
        OR EVER [System.AssignedTo] = 'Christie Church <fabrikamfiber1@hotmail.com>'
    )