Freigeben über


WIQL-Syntax (Work Item Query Language) – Syntaxreferenz

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

Sie können WIQL-Syntax verwenden, um eine Abfrage als Hyperlink oder bei Verwendung der REST-API (Work Item Query Language) zu definieren.

WIQL unterstützt alle Funktionen, die über den Webportalabfrage-Editor verfügbar sind, sowie einige weitere. Sie können die Felder angeben, die zurückgegeben werden sollen, und die logische Gruppierung von Abfrageklauseln. Sie können auch eine ASOF Klausel verwenden, um basierend auf Zuordnungen nach einem vorherigen Datum zu filtern.

Important

DIE WIQL-Syntax wird verwendet, um die REST-API "Query By Wiql" auszuführen. Die API gibt nur Arbeitsaufgaben-IDs zurück, unabhängig davon, welche Felder Sie in die SELECT Anweisung einschließen. Um vollständige Informationen zu erhalten, (1) rufen Sie die IDs von WIQL ab, und (2) rufen Sie dann die Arbeitsaufgaben über "Eine Liste der Arbeitsaufgaben nach ID und für bestimmte Felder abrufen" ab.

Prerequisites

Category Requirements
Permissions Arbeitsaufgaben oder Arbeitsaufgaben in diesem Knoten anzeigen Berechtigungssatz auf Zulassen. Diese Berechtigungen werden in der Regel Mitgliedern der Gruppen "Leser" und "Mitwirkende" für jedes Teamprojekt gewährt. Weitere Informationen finden Sie unter Berechtigungen und Gruppen.

Übersicht über die Abfragesprache

WIQL verfügt über fünf Teile, wie im folgenden Syntaxausschnitt dargestellt und in der Tabelle beschrieben. Bei der WIQL-Syntax wird nicht zwischen Groß-/Kleinschreibung unterschieden.

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-2025'

Tip

Durch die Installation der Wiql Editor Marketplace-Erweiterung können Sie Abfragen mithilfe des Abfrage-Editors erstellen und die WIQL-Syntax anzeigen. Anschließend können Sie die WIQL-Syntax kopieren und ändern und die Abfrage mit dem Wiql Playground Hub ausführen, der Boards hinzugefügt wurde.

Klausel Beispiel/Beschreibung
SELECT Gibt die Felder an, die für jede Arbeitsaufgabe zurückgegeben werden sollen. Sie können entweder den Anzeigenamen oder den Verweisnamen angeben. Verwenden Sie eckige Klammern ([]), wenn der Name Leerzeichen oder Punkte enthält.
FROM Gibt an, ob die Abfrage Arbeitselemente oder Links zwischen Arbeitselementen suchen soll.
- Wird FROM WorkItems verwendet, um Arbeitsaufgaben zurückzugeben.
- Dient zum Zurückgeben von FROM workItemLinks Verknüpfungen zwischen Arbeitsaufgaben. Weitere Informationen finden Sie unter Abfragen für Verknüpfungen zwischen Arbeitsaufgaben.
WHERE Gibt die Filterkriterien für die Abfrage an. Weitere Informationen finden Sie unter Filterbedingungen (WHERE).
ORDER BY Gibt die Sortierreihenfolge der zurückgegebenen Arbeitselemente an. Sie können aufsteigend (Asc) oder absteigend (Desc) für ein oder mehrere Felder angeben. Beispiel: ORDER BY [State] Asc, [Changed Date] Desc
ASOF Gibt eine historische Abfrage an, indem ein Datum für die Anwendung des Filters festgelegt wird. Diese Abfrage gibt beispielsweise alle Benutzerabschnitte zurück, die am 11. Februar 2025 als aktiv definiert wurden. Geben Sie das Datum gemäß den Anleitungen unter Datums- und Uhrzeitmuster an.
ASOF '02-11-2025'

Note

WIQL-Abfragen für Azure Boards dürfen 32-K-Zeichen nicht überschreiten. Das System ermöglicht es Ihnen nicht, Abfragen zu erstellen oder auszuführen, die diese Länge überschreiten.

Datums- und Uhrzeitmuster

Das Datums- und Uhrzeitmuster, das Sie für DateTime-Felder eingeben, sollte mit dem übereinstimmen, das Sie über Ihr Profil auswählen. Informationen zum Anzeigen oder Ändern Ihrer Auswahl finden Sie unter Festlegen von Benutzereinstellungen.

Screenshot, der die Dropdown-Optionen für das Datumsmuster im Bereich Zeit und Gebietsschema zeigt. Screenshot, der die Dropdown-Optionen für Zeitmuster im Bereich Zeit und Region zeigt.

Screenshot, der den Bereich Zeit und Gebietsschema mit den Feldern Datumsmuster und Zeitmuster zeigt.

Zitate (einfache oder doppelte Anführungszeichen werden unterstützt) DateTime Literale, die in Vergleichen verwendet werden. Sie müssen sich im .NET-Format DateTime des lokalen Clientcomputers befinden, auf dem die Abfrage ausgeführt wird. Sofern keine Zeitzone angegeben ist, DateTime befinden sich Literale in der Zeitzone des lokalen Computers.

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

Wenn die Uhrzeit in einem DateTime Literal weggelassen wird und der dayPrecision Parameter "false" ist, wird angenommen, dass die Uhrzeit null (Mitternacht) ist. Die Standardeinstellung für den dayPrecision Parameter ist "false".

Sie können auch das ISO 8601-Format angeben, das unabhängig vom Gebietsschema gültig ist. ISO 8601 stellt Datum und Uhrzeit dar, indem es mit dem Jahr beginnt, gefolgt vom Monat, dem Tag, der Stunde, den Minuten, Sekunden und Millisekunden. Stellt beispielsweise 2025-12-10 15:00:00.000 den 10. Dezember 2025 um 13.00 Uhr in der Ortszeit dar. Ein Beispiel für die Verwendung des ISO 8601-Formats lautet wie folgt:

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

Benutzerdefinierte Felder

Sie können einer Abfrageklausel ein benutzerdefiniertes Feld hinzufügen. Bei WIQL müssen Sie den Verweisnamen für das benutzerdefinierte Feld angeben. Bei Projekten, die ein geerbtes Prozessmodell verwenden, werden benutzerdefinierte Felder in der Regel mit Custom. voreingestellten Namen versehen und Leerzeichen entfernt. Beispiel:

Freundlicher Name Referenzname
Approver Custom.Approver
Request Type Custom.RequestType
Scope Estimate Custom.CustomEstimate

Bei Projekten, die das lokale XML-Prozessmodell verwenden, wird der Verweisname durch die XML-Arbeitsaufgabentypdefinitionen definiert.

Weitere Informationen finden Sie unter Arbeitselementfelder und -attribute.

Angeben von Filterklauseln (WHERE)

Die WHERE-Klausel gibt die Filterkriterien an. Von der Abfrage werden nur Arbeitselemente zurückgegeben, die die angegebenen Kriterien erfüllen. Die folgende WHERE-Beispielklausel etwa gibt User Storys zurück, die aktiv und Ihnen zugewiesen sind.

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

Sie können die Reihenfolge steuern, in der logische Operatoren ausgewertet werden, indem Sie sie in Klammern einschließen, um die Filterkriterien zu gruppieren. Wenn Sie beispielsweise Arbeitsaufgaben zurückgeben möchten, die Ihnen zugewiesen sind oder die Sie geschlossen haben, verwenden Sie das folgende Beispiel.

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

Filterbedingungen

Jede Filterbedingung besteht aus drei Teilen, die jeweils den folgenden Regeln genügen müssen:

  • Feld: Sie können entweder den Verweisnamen oder den Anzeigenamen angeben. Die folgenden Beispiele sind gültige WIQL-Syntax:
    • Verweisname: SELECT [System.AssignedTo] ...
    • Anzeigename mit Leerzeichen: SELECT [Assigned To] ...
    • Namen ohne Leerzeichen erfordern keine eckigen Klammern: SELECT ID, Title ...
  • Operator: Gültige Werte werden im Abschnitt "Operatoren " weiter unten in diesem Artikel angegeben.
  • Feldwert: Sie können je nach angegebenem Feld einen der folgenden drei Werte angeben.
    • Ein Literalwert muss mit dem Datentyp des Feldwerts übereinstimmen.
    • Eine Variable oder ein Makro, die einen bestimmten Wert angibt. Gibt beispielsweise die Person an, @Me die die Abfrage ausführt. Weitere Informationen finden Sie unter Makros und Variablen.
    • Der Name eines anderen Felds. Beispielsweise können Sie mit [Assigned to] = [Changed by] Arbeitselemente suchen, die der Person zugewiesen sind, von der die letzten Änderungen an diesen Arbeitselementen vorgenommen wurden.

Eine Beschreibung und Verweisnamen aller systemseitig definierten Felder finden Sie unter Arbeitselement-Feldindex.

Operators

Abfragen verwenden logische Ausdrücke, um Resultsets zu qualifizieren. Diese logischen Ausdrücke bilden sich durch eine oder mehrere zusammengebindete Vorgänge.

Einige einfache Abfragevorgänge sind wie folgt:

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

In der folgenden Tabelle sind alle unterstützten Operatoren für verschiedene Feldtypen zusammengefasst. Weitere Informationen zu den einzelnen Feldtypen finden Sie unter Arbeitselementfelder und -attribute.

Die =Operatoren , <>, , >, <>=und <= die Operatoren funktionieren wie erwartet. Beispielsweise System.ID > 100 Abfragen für alle Arbeitsaufgaben mit mehr ID als 100. System.ChangedDate > '01-01-25 12:00:00' Abfragen für alle Arbeitsaufgaben wurden nach dem 1. Januar 2025 geändert.

Neben diesen grundlegenden Operatoren gibt es einige Verhaltensweisen und Operatoren, die für bestimmte Feldtypen spezifisch sind.

Note

Die für Sie verfügbaren Operatoren hängen von Ihrer Plattform und Version ab. Weitere Informationen finden Sie unter Abfragekurzreferenz.

Field-Typ Unterstützte Operatoren
Boolean = , <> , =[Field] , <>[Field]
DateTime = , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], In, Not In, Was Ever
Double, GUIDInteger = , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], In, Not In, Was Ever
Identity = , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], Contains, Not Contains, In, Not In, In Group, Not In Group, Was Ever
PlainText 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

Logische Gruppierungen

Sie können die Operatoren AND und OR im typischen booleschen Sinne verwenden, um zwei Klauseln auszuwerten. Sie können die Operatoren AND EVER und OR EVER verwenden, wenn Sie einen WAS EVER-Operator angeben. Sie können logische Ausdrücke gruppieren und bei Bedarf weiter zusammenfügen. Die folgenden Beispiele veranschaulichen.

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>'
        )
    )

Sie können die containsunderOperatoren und in Operatoren mithilfe von not. Sie können den ever-Operator nicht negieren. Das folgende Beispiel fragt nach allen Arbeitsaufgaben ab, die nicht unter der Unterstruktur von Fabrikam Fiber\Account Management.

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

Beispielabfrage: „Was Ever Assigned To“

Im folgenden Abfrage-Editor-Beispiel werden alle Arbeitsaufgaben gefunden, die Jamal Hartnett jemals zugewiesen wurden.

Screenshot: Abfrage-Editor, Flatlistabfrage, jemals zugewiesen.

Die entsprechende WIQL-Syntax lautet wie folgt:

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>'

Makros oder Variablen

In der folgenden Tabelle werden die Makros oder Variablen aufgeführt, die Sie in einer WIQL-Abfrage verwenden können.

Macro Usage
@Me Verwenden Sie diese Variable, um in einem Feld mit Benutzeraliasen automatisch nach dem Alias des aktuellen Benutzers zu suchen. Beispielsweise können Sie Arbeitsaufgaben finden, die Sie geöffnet haben, wenn Sie die Field Spalte auf Activated By, die Operator Spalte auf =und die Value Spalte auf .@Me
@CurrentIteration Verwenden Sie diese Variable, um basierend auf dem ausgewählten Teamkontext automatisch nach Arbeitselementen zu filtern, die dem aktuellen Sprint für das ausgewählte Team zugewiesen sind.
@Project Verwenden Sie diese Variable, um im aktuellen Projekt nach Arbeitselementen zu suchen. Beispielsweise können Sie alle Arbeitsaufgaben im aktuellen Projekt finden, wenn Sie die Spalte auf Field, die Team Project Spalte auf , die Operator Spalte auf =, und die Value Spalte auf .@Project
@StartOfDay
@StartOfWeek
@StartOfMonth
@StartOfYear
Verwenden Sie diese Makros, um Felder basierend auf dem Anfang des aktuellen Tages, der Aktuellen Woche, des Monats, des Jahres oder eines Offsets auf einen dieser Werte zu filtern DateTime . Sie können z. B. alle Elemente finden, die in den letzten drei Monaten erstellt wurden, wenn Sie die Spalte auf Field, die Created DateOperator Spalte auf >=und die Value Spalte auf " @StartOfMonth - 3festlegen.
@Today Verwenden Sie diese Variable, um nach Arbeitsaufgaben zu suchen, die sich auf das aktuelle Datum oder auf einen früheren Termin beziehen. Sie können die @Today Variable auch ändern, indem Sie Tage subtrahieren. Beispielsweise können Sie alle Elemente, die in der letzten Woche aktiviert wurden, finden, wenn Sie die Spalte auf Field, die Activated DateOperator Spalte auf >=und die Value Spalte auf " @Today - 7festlegen.
[Any] Verwenden Sie diese Variable, um nach Arbeitselementen zu suchen, die sich auf einen Wert beziehen, der für ein bestimmtes Feld definiert wurde.

@me-Makro

Das Makro @me ersetzt den in Windows integrierten Kontonamen des Benutzers, der die Abfrage ausführt. Das folgende Beispiel zeigt, wie Sie das Makro und die entsprechende statische Anweisung verwenden. Das Makro ist für die Verwendung mit Identitätsfeldern wie Assigned To vorgesehen.

WHERE  
   [System.AssignedTo] = @Me 

@today-Makro

Sie können das @today Makro mit einem beliebigen DateTime Feld verwenden. Dieses Makro ersetzt Mitternacht des aktuellen Datums auf dem lokalen Computer, auf dem die Abfrage ausgeführt wird. Sie können auch @today+x oder @today-y mit ganzzahligen Offsets für x Tage nach @today bzw. y Tage vor @today angeben. Eine Abfrage, die das @today Makro verwendet, kann je nach Zeitzone, in der es ausgeführt wird, unterschiedliche Resultsets zurückgeben.

In den folgenden Beispielen wird davon ausgegangen, dass heute der 03.01.2025 ist.

WHERE  
   [System.CreatedDate] = @today

Entspricht Folgendem:

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

And

WHERE  
   [System.CreatedDate] > @today-2

Entspricht Folgendem:

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

Makros @StartOfDay, @StartOfWeek, @StartOfMonth, @StartOfYear

Sie können die @StartOf... Makros mit einem beliebigen DateTime Feld verwenden. Dieses Makro ersetzt Mitternacht des aktuellen Tages, des aktuellen Wochenbeginns, des aktuellen Monatsbeginns oder des aktuellen Jahresanfangs auf dem lokalen Computer, auf dem die Abfrage ausgeführt wird.

Diese Makros akzeptieren eine Modifiziererzeichenfolge im Format (+/-)nn(y|M|w|d|h|m). Ähnlich wie beim @Today Makro können Sie ganzzahlige Offsets mit Plus- oder Minuszeichen angeben. Wenn der Zeiteinheitsqualifizierer ausgelassen wird, wird standardmäßig der natürliche Zeitraum der Funktion verwendet. @StartOfWeek("+1") entspricht beispielsweise @StartOfWeek("+1w"). Wenn das Plus-/Minuszeichen (+/-) ausgelassen wird, wird Plus angenommen.

Mit dieser Syntax können Sie Modifizierer schachteln und ihre Abfrage zwei Mal versetzen. Beispielsweise filtert die Klausel Closed Date >= @StartOfYear - 1 Arbeitsaufgaben, die seit dem letzten Jahr geschlossen wurden. Wenn Sie sie ändern, Closed Date >= @StartOfYear('+3M') - 1schließt sie Arbeitsaufgaben aus, die innerhalb der ersten drei Monate des letzten Jahres geschlossen wurden. Die folgende WIQL-Syntax veranschaulicht:

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

In den folgenden Beispielen wird davon ausgegangen, dass heute der 05.04.2025 ist.

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

Entspricht Folgendem:

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

And

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

Entspricht Folgendem:

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

Benutzerdefinierte Makros

WIQL unterstützt auch beliebige benutzerdefinierte Makros. Jede Zeichenfolge mit dem Präfix @ wird als benutzerdefiniertes Makro behandelt und ersetzt. Der Ersetzungswert für das benutzerdefinierte Makro wird aus dem Kontextparameter der Abfragemethode im Objektmodell abgerufen. Die folgende Methode ist die API, die für Makros verwendet wird:

public WorkItemCollection Query(string wiql, IDictionary context)

Der Kontextparameter enthält Schlüssel-Wert-Paare für Makros. Wenn der Kontext beispielsweise ein Schlüssel-Wert-Paar von (project, ) enthält, MyProjectwird er @project durch MyProject das WIQL ersetzt. Dieser Ersatz ist, wie der Abfrage-Generator für Arbeitsaufgaben das @project Makro in Visual Studio behandelt.

Angeben von Verlaufsabfragen (ASOF)

Sie können eine ASOF-Klausel in einer Abfrage verwenden, um nach Arbeitselementen zu filtern, die die angegebenen Filterbedingungen erfüllen, weil sie an einem bestimmten Datum und zu einer bestimmten Uhrzeit definiert wurden.

Note

ASOF-Abfragen können im Abfrage-Generator von Visual Studio nicht erstellt werden. Wenn Sie eine Abfragedatei (.wiq) erstellen, die eine ASOF Klausel enthält, und diese dann in Visual Studio laden, wird die ASOF Klausel ignoriert.

Angenommen, eine Arbeitsaufgabe wurde vor dem 05.05.2025 unter " Iteration PathFabrikam Fiber\Release 1 Jamal Hartnett" klassifiziert und zugewiesen. Das Arbeitselement wurde jedoch kürzlich „Raisa Pokrovskaya“ zugewiesen und in einen neuen Iterationspfad von Release 2 verschoben. Die folgende Beispielabfrage gibt Arbeitselemente zurück, die Jamal Hartnett zugewiesen sind, da die Abfrage auf einem Arbeitselementzustand basiert, der zu einem vergangenen Datum und einer vergangenen Uhrzeit erfasst wurde.

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-2025 00:00:00.0000000'

Note

Wenn keine Uhrzeit angegeben wird, verwendet WIQL Mitternacht. Wenn keine Zeitzone angegeben wird, verwendet WIQL die Zeitzone des lokalen Clientcomputers.

Festlegen der Sortierreihenfolge (ORDER BY)

Sie können die ORDER BY-Klausel verwenden, um die Ergebnisse einer Abfrage nach Feldern in auf- oder absteigender Reihenfolge zu sortieren.

Note

Die Sortiereinstellungen von SQL Server auf der Datenebene bestimmen die Standardsortierreihenfolge. Sie können jedoch die asc oder desc-Parameter verwenden, um eine explizite Sortierreihenfolge auszuwählen.

Im folgenden Beispiel werden Arbeitsaufgaben zuerst nach Priority aufsteigender Reihenfolge (Standard) und dann Created Date nach absteigender Reihenfolge (DESC) sortiert.

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

Geben Sie FROM WorkItemLinksan, um Verknüpfungen zwischen Arbeitsaufgaben zurückzugeben. Filterbedingungen in der WHERE Klausel können für die Verknüpfungen oder für jede Arbeitsaufgabe gelten, die die Quelle oder das Ziel eines Links ist. Im folgenden Beispiel werden die Verknüpfungen zwischen Product Backlog Items und den aktiven untergeordneten Elementen zurückgegeben.

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'
    )
MODE (Recursive)

In der folgenden Tabelle werden die Unterschiede zwischen Arbeitselementabfragen und Abfragen für Links zwischen Arbeitselementen zusammengefasst.

Klausel Arbeitsaufgaben Verknüpfungen zwischen Arbeitsaufgaben
FROM FROM WorkItems FROM WorkItemLinks
WHERE [FieldName] = Value Geben Sie eine oder mehrere der folgenden Optionen an:
[Source].[FieldName] = Value
[Target].[FieldName] = Value
[System.Links.LinkType] = 'LinkName'
MODE nicht zutreffend Geben Sie eine der folgenden Optionen an:
- MODE (MustContain): (Standard) Gibt nur WorkItemLinkInfo Datensätze zurück, bei denen die Quell-, Ziel- und Verknüpfungskriterien erfüllt sind.
- MODE (MayContain): Gibt WorkItemLinkInfo Datensätze für alle Arbeitsaufgaben zurück, die die Quell- und Verknüpfungskriterien erfüllen, auch wenn keine verknüpfte Arbeitsaufgabe die Zielkriterien erfüllt.
- MODE (DoesNotContain): Gibt WorkItemLinkInfo Datensätze für alle Arbeitsaufgaben zurück, die die Quelle erfüllen, nur, wenn keine verknüpfte Arbeitsaufgabe die Verknüpfungs- und Zielkriterien erfüllt.
- MODE (Recursive): Wird für Strukturabfragen ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') verwendet. Der Linktyp muss Strukturtopologie und Vorwärtsrichtung sein. Gibt WorkItemLinkInfo Datensätze für alle Arbeitsaufgaben zurück, die die Quelle erfüllen, rekursiv für das Ziel. ORDER BY und ASOF sind nicht mit Strukturabfragen kompatibel.
RETURNS WorkItemQueryResult WorkItemLink

Sie können einen der folgenden Systemlink-Typnamen angeben.

Sie können einen der folgenden Systemlinktypnamen oder einen benutzerdefinierten Verknüpfungstyp angeben, der mit dem lokalen XML-Prozess definiert ist.

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

Weitere Informationen finden Sie unter Linktypreferenz.

Beispiel für eine Strukturtypabfrage

Note

ORDER BY und ASOF sind nicht mit Strukturabfragen kompatibel. Schließen Sie diese Klauseln nicht in Strukturabfragen ein.

Die folgende Abfrage gibt alle im aktuellen Projekt definierten Arbeitsaufgabentypen zurück. Der Abfrage-Editor zeigt die Abfrage wie in der folgenden Abbildung dargestellt an.

Screenshot: Abfrage-Editor, Strukturabfrage, alle Arbeitselemente und Status.

Die entsprechende WIQL-Syntax lautet wie folgt:

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)

Im folgenden Beispiel werden alle im aktuellen Projekt definierten Arbeitsaufgabentypen zurückgegeben. Der Abfrage-Editor zeigt die Abfrage wie in der folgenden Abbildung dargestellt an.

Screenshot: Abfrage-Editor, Direktlinkabfrage, alle Arbeitselemente und Status.

Die entsprechende WIQL-Syntax lautet wie folgt:

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)

Weitere Abfragebeispiele

Im folgenden typischen WIQL-Abfragebeispiel werden Verweisnamen für die Felder verwendet. Die Abfrage wählt Arbeitsaufgaben (kein Arbeitsaufgabentyp angegeben) mit einem Priority=1. Die Abfrage gibt das ID Und Title des Rückgabesatzes als Spalten zurück. Die Ergebnisse werden nach ID aufsteigender Reihenfolge sortiert.

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

Datum-Uhrzeit-Muster

Sie geben das Datums-/Uhrzeitmuster gemäß einem von zwei Mustern an:

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

Beispielklauseln

Die folgenden Beispielanweisungen zeigen bestimmte qualifizierende Klauseln.

Klausel Example
AND
SELECT [System.Id], [System.Title]<br>FROM WorkItems<br>WHERE [System.TeamProject] = @project<br>AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
OR
SELECT [System.Id], [System.Title]<br>FROM WorkItems<br>WHERE [System.TeamProject] = @project<br>AND ([System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'<br>OR [System.AssignedTo] = 'Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>')
NOT
SELECT [System.Id], [System.Title]<br>FROM WorkItems<br>WHERE [System.TeamProject] = @project<br>AND [System.AssignedTo] EVER 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'<br>AND [System.AssignedTo] NOT CONTAINS 'Raisa Pokrovskaya <fabrikamfiber5@hotmail.com>'
EVER
SELECT [System.Id], [System.Title]<br>FROM WorkItems<br>WHERE [System.TeamProject] = @project<br>AND [System.AssignedTo] EVER 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
UNDER
SELECT [System.Id], [System.Title]<br>FROM WorkItems<br>WHERE [System.TeamProject] = @project<br>AND [System.AssignedTo] EVER 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'<br>AND [System.AreaPath] UNDER 'Agile1\Area 0'
ORDER BY
SELECT [System.Id], [System.Title]<br>FROM WorkItems<br>WHERE [System.TeamProject] = @project<br>AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'<br>ORDER BY [System.Id] [asc | desc]
ASOF (Uhrzeitfilter)
SELECT [System.Title]<br>FROM workitems<br>WHERE [System.IterationPath] = 'MyProject\Beta'<br>AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'<br>ASOF '3/16/25 12:30'

Zeichenfolge und Nur-Text

Anführungszeichenzeichenfolgenliterale (einfache oder doppelte Anführungszeichen werden unterstützt) in einem Vergleich mit einem String oder PlainText einem Feld. Zeichenfolgenliterale unterstützen alle Unicode-Zeichen.

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

Sie können den contains Operator verwenden, um an einer beliebigen Stelle im Feldwert nach einer Teilzeichenfolge zu suchen.

WHERE [System.Description] contains 'WIQL'

Bereich und Iteration (TreePath)

Sie können den UNDER Operator für die und Area Path die Iteration Path Felder verwenden. Der UNDER-Operator wertet aus, ob sich ein Wert innerhalb der Unterstruktur eines bestimmten Klassifizierungsknotens befindet. Der folgende Ausdruck wird beispielsweise als "true" ausgewertet, wenn es sich um einen Area Path oder einen anderen Knoten innerhalb der Unterstruktur handeltMyProject\Server\AdministrationMyProject\Server\Administration\Feature 1MyProject\Server\Administration\Feature 2\SubFeature 5.

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

Modifizierer und spezielle Operatoren

Sie können einige Modifizierer und spezielle Operatoren in einem Abfrageausdruck verwenden.

Verwenden Sie den IN-Operator, um auszuwerten, ob ein Feldwert gleich einem Satz von Werten ist. Dieser Operator wird für die StringTypen , Integer, Doubleund DateTime Feldtypen unterstützt. Im folgenden Beispiel und der semantischen Entsprechung wird dies veranschaulicht.

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>'
    )

Der EVER Operator wird verwendet, um auszuwerten, ob ein Feldwert einem bestimmten Wert in allen letzten Überarbeitungen von Arbeitsaufgaben entspricht oder je gleich ist. Die StringTypen , Integer, Doubleund DateTime Feldtypen unterstützen diesen Operator. Es gibt alternative Syntaxen für den EVER-Operator. Mit den folgenden Codeausschnitten wird beispielsweise abgefragt, ob alle Arbeitsaufgaben jamal, Raisa oder Christie zugewiesen wurden.

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>'
    )

Verwenden von Copilot zum Schreiben, Beheben und Optimieren von WIQL

Sie können einen KI-Assistenten (z. B. GitHub Copilot oder andere Copiloten) verwenden, um WIQL-Abfragen zu erstellen, zu korrigieren oder zu optimieren. Behandeln Sie Copilot als Produktivitätshilfe – keine autorisierende Quelle – und überprüfen und testen Sie immer alle generierten Abfragen, bevor Sie sie mit Produktionsdaten ausführen.

Anleitungen und bewährte Methoden:

  • Funktionen: Copilot kann Nur-Sprache-Anforderungen in WIQL übersetzen, Syntaxfehler beheben (nicht übereinstimmende Klammern, fehlende Kommas, falsche Schlüsselwörter), SELECT-Listen zwischen Anzeige- und Verweisnamen konvertieren, Klauseln oder Datumsliterale generieren ASOF und Vorschlagsklauseln in schmale oder erweiterte Resultsets umschreiben.
  • Validate: Always validate generated WIQL in the Query Editor or a safe test project. Überprüfen Sie Makros (z. B@Me@Today. ) und gebietsschemaabhängige Datumsformate vor der Verwendung.
  • Sicherheit: Fügen Sie niemals geheime Schlüssel, Zugriffstoken oder private Verbindungszeichenfolgen in Eingabeaufforderungen ein. Entfernen oder redigieren Sie vertrauliche Werte in Beispielen, die Sie zu Copilot feeden.
  • Leistung: Bitten Sie Copilot, Ergebnisnutzlasten zu minimieren (nur erforderliche Felder zurückgeben), geeignete WHERE-Filter hinzufügen und eine übermäßig breite Verwendung von IN oder ungebundenen LIKE Suchvorgängen vermeiden. Denken Sie an das 32-K-Zeichenlimit für WIQL-Abfragen.
  • Überprüfen Sie Edgefälle: Überprüfen Sie das Verhalten für historische (ASOF) Abfragen, Struktur-/Linkabfragen (FROM workItemLinks) und WAS EVER/EVER Operatoren, die Überarbeitungen überprüfen. Dies kann komplexer sein und kann eine manuelle Optimierung erfordern.

Beispiel: Generieren von WIQL aus einfachem Englisch:

Eingabeaufforderung: "Return ID and Title for active Bugs assigned to @Me in project 'Fabrikam' and modified in the last 30 days. Sortieren nach ChangedDate desc."

Copilot produziert:

SELECT [System.Id], [System.Title]
FROM workitems
WHERE
  [System.TeamProject] = 'Fabrikam'
  AND [System.WorkItemType] = 'Bug'
  AND [System.State] = 'Active'
  AND [System.AssignedTo] = @Me
  AND [System.ChangedDate] >= @Today - 30
ORDER BY [System.ChangedDate] DESC

Automatisieren von WIQL-Abfragen mit REST-API und AI

Sie können KI-Assistenten wie Copilot verwenden, um den zweistufigen WIQL-REST-API-Prozess zu automatisieren:

  1. Verwenden Sie die API "Abfrage nach Wiql REST" , um Arbeitsaufgaben-IDs abzurufen, die Ihrem WIQL entsprechen.
  2. Verwenden Sie die API "Arbeitsaufgaben abrufen" , um vollständige Details für diese IDs abzurufen.

KI kann Ihnen helfen:

  • Generieren Sie WIQL aus einfacher Sprache, und verketten Sie dann die beiden API-Aufrufe im Code (z. B. Python, PowerShell oder JavaScript).
  • Formatieren und Zusammenfassen von Ergebnissen für Dashboards oder Berichte

Beispiel: Automatisieren von WIQL mit Python und AI

Angenommen, Sie möchten die Titel und Zustände aller aktiven Fehler in einem Projekt auflisten.

Aufforderung zu Copilot:
"Schreiben Sie Python-Code, der die Azure DevOps REST-API verwendet, um die Titel und Zustände aller aktiven Fehler in meinem Projekt auflisten. Verwenden Sie WIQL, um die IDs abzurufen, und rufen Sie dann die Details für diese IDs ab."

Sie können Copilot verwenden, um Code wie folgt zu generieren:

import requests

# Azure DevOps organization and project info
org = "your-org"
project = "your-project"
pat = "your-personal-access-token"
headers = {"Authorization": f"Basic {pat}"}

# Step 1: Run WIQL query to get work item IDs
wiql = {
    "query": """
        SELECT [System.Id]
        FROM workitems
        WHERE [System.TeamProject] = '{project}'
          AND [System.WorkItemType] = 'Bug'
          AND [System.State] = 'Active'
    """.format(project=project)
}
wiql_url = f"https://dev.azure.com/{org}/{project}/_apis/wit/wiql?api-version=6.1-preview.2"
resp = requests.post(wiql_url, json=wiql, headers=headers)
ids = [item["id"] for item in resp.json()["workItems"]]

# Step 2: Get work item details
if ids:
    ids_str = ",".join(map(str, ids))
    details_url = f"https://dev.azure.com/{org}/{project}/_apis/wit/workitemsbatch?api-version=6.1-preview.1"
    body = {"ids": ids, "fields": ["System.Title", "System.State"]}
    details_resp = requests.post(details_url, json=body, headers=headers)
    for item in details_resp.json()["value"]:
        print(f"{item['fields']['System.Title']} - {item['fields']['System.State']}")
else:
    print("No active bugs found.")