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.
- Utilisez
FROM WorkItems
pour retourner des éléments de travail. - Utilisez
FROM workItemLinks
pour retourner les liens entre des éléments de travail. Pour plus d’informations, consultez Requêtes pour rechercher des liens entre des éléments de travail plus loin dans cet article.
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.
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 ...
- Nom de la référence :
- 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.
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
Interroger les liens entre éléments de travail
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
etASOF
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.
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)
Exemple de requête de lien direct
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.
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 :
- Le modèle de date et le format de modèle d’heure proviennent de vos Préférences utilisateur, Heure et paramètres régionaux
- Modèle spécifié par UTC, qui suit ce modèle (avec Z ajouté à la date-heure).
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>'
)