Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
U kunt de WIQL-syntaxis gebruiken om een query te definiëren als hyperlink of wanneer u de Rest API (Work Item Query Language) gebruikt.
WIQL ondersteunt alle functies die beschikbaar zijn via de queryeditor van de webportal plus nog een paar functies. U kunt de velden opgeven die moeten worden geretourneerd en logische groepering van querycomponenten. U kunt ook een ASOF component gebruiken om te filteren op basis van toewijzingen vanaf een vorige datum.
Important
WIQL-syntaxis wordt gebruikt om de Query by Wiql REST API uit te voeren. De API retourneert alleen werkitem-id's, ongeacht de velden die u in de SELECT instructie opneemt. Als u volledige informatie wilt ophalen, (1) haalt u de id's van WIQL op en (2) haalt u de werkitems op via Een lijst met werkitems ophalen op id en voor specifieke velden.
Prerequisites
| Category | Requirements |
|---|---|
| Permissions | Werkitems of Werkitems weergeven in dit knooppunt machtiging ingesteld op Toestaan. Deze machtigingen worden doorgaans verleend aan leden van de groepen Lezers en Inzenders voor elk teamproject. Zie Machtigingen en groepen voor meer informatie. |
Overzicht van querytaal
WIQL heeft vijf delen, zoals wordt weergegeven in het volgende syntaxisfragment en wordt beschreven in de tabel. WIQL-syntaxis is niet hoofdlettergevoelig.
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
Door de Marketplace-extensie wiql-editor te installeren, kunt u query's maken met behulp van de Query-editor en de WIQL-syntaxis weergeven. Vervolgens kunt u de WIQL-syntaxis kopiëren en wijzigen en de query uitvoeren met behulp van de Wiql Playground-hub die is toegevoegd aan Borden.
| Clausule | Voorbeeld/beschrijving |
|---|---|
SELECT |
Hiermee worden de velden geïdentificeerd die moeten worden geretourneerd voor elk werkitem. U kunt de beschrijvende naam of verwijzingsnaam opgeven. Gebruik vierkante haken ([]) als de naam lege waarden of punten bevat. |
FROM |
Hiermee wordt aangegeven of u wilt dat de query werkitems of koppelingen tussen werkitems zoekt. - Gebruik FROM WorkItems dit om werkitems te retourneren.- Gebruik FROM workItemLinks dit om koppelingen tussen werkitems te retourneren. Zie Query's voor koppelingen tussen werkitems voor meer informatie. |
WHERE |
Hiermee geeft u de filtercriteria voor de query. Zie Filtervoorwaarden (WHERE)voor meer informatie. |
ORDER BY |
Hiermee geeft u de sorteervolgorde op van de geretourneerde werkitems. U kunt oplopend (Asc) of aflopend (Desc) opgeven voor een of meer velden. Bijvoorbeeld: ORDER BY [State] Asc, [Changed Date] Desc |
ASOF |
Hiermee geeft u een historische query op door een datum aan te geven waarop het filter moet worden toegepast. Deze query retourneert bijvoorbeeld alle gebruikersverhalen die zijn gedefinieerd als Actief op 11 februari 2025. Geef de datum op volgens de richtlijnen in datum- en tijdpatroon.ASOF '02-11-2025' |
Note
WIQL-query's die zijn uitgevoerd op Azure Boards mogen niet langer zijn dan 32 K tekens. Het systeem staat u niet toe om query's te maken of uit te voeren die die lengte overschrijden.
Datum- en tijdpatroon
Het datum- en tijdpatroon dat u invoert voor datum/tijd-velden , moet overeenkomen met het patroon dat u selecteert via uw profiel. Zie Gebruikersvoorkeuren instellen om uw selectie weer te geven of te wijzigen.
Letterlijke aanhalingstekens (enkele of dubbele aanhalingstekens worden ondersteund) DateTime die in vergelijkingen worden gebruikt. Ze moeten de .NET-indeling DateTime hebben van de lokale clientcomputer waarop de query wordt uitgevoerd. Tenzij een tijdzone is opgegeven, DateTime bevinden letterlijke tekens zich in de tijdzone van de lokale computer.
WHERE
AND [System.ChangedDate] >= '01-18-2025 GMT'
AND ([Closed Date] < '01-09-2025 GMT'
OR [Resolved Date] >= '01-18-2025 14:30:01')
Wanneer de tijd wordt weggelaten in een DateTime letterlijke waarde en de dayPrecision parameter gelijk is aan onwaar, wordt ervan uitgegaan dat de tijd nul (middernacht) is. De standaardinstelling voor de dayPrecision parameter is onwaar.
U kunt ook een ISO 8601-indeling opgeven, die geldig is, ongeacht de landinstelling. ISO 8601 vertegenwoordigt datum en tijd door te beginnen met het jaar, gevolgd door de maand, de dag, het uur, de minuten, seconden en milliseconden. Vertegenwoordigt bijvoorbeeld 2025-12-10 15:00:00.000 de 10e van december 2025 om 15:00 uur in de lokale tijd. Een voorbeeld van het gebruik van iso 8601-indeling is als volgt:
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')
Aangepaste velden
U kunt een aangepast veld toevoegen aan een querycomponent. Met WIQL moet u de verwijzingsnaam voor het aangepaste veld opgeven. Voor projecten die een overgenomen procesmodel gebruiken, worden aangepaste velden meestal gelabeld met Custom. een voorgeleverde naam en spaties verwijderd. Voorbeeld:
| Vriendelijke naam | Naam van verwijzing |
|---|---|
Approver |
Custom.Approver |
Request Type |
Custom.RequestType |
Scope Estimate |
Custom.CustomEstimate |
Voor projecten die gebruikmaken van het on-premises XML-procesmodel, wordt de verwijzingsnaam gedefinieerd door de definities van het type XML-werkitem.
Zie Werkitemvelden en -kenmerken voor meer informatie.
Filtercomponenten opgeven (WHERE)
Met WHERE de component worden de filtercriteria opgegeven. De query retourneert alleen werkitems die voldoen aan de opgegeven criteria. Met de volgende voorbeeldcomponent WHERE worden bijvoorbeeld gebruikersverhalen geretourneerd die actief zijn en die aan u zijn toegewezen.
WHERE [Work Item Type] = 'User Story'
AND [State] = 'Active'
AND [Assigned to] = @Me
U kunt de volgorde bepalen waarin logische operators worden geëvalueerd door ze tussen haakjes te plaatsen om de filtercriteria te groeperen. Als u bijvoorbeeld werkitems wilt retourneren die aan u zijn toegewezen of die u hebt gesloten, gebruikt u het volgende voorbeeld.
WHERE
[System.TeamProject] = @project
AND (
[System.WorkItemType] = 'Product Backlog Item'
AND (
[System.AssignedTo] = @me
OR [Microsoft.VSTS.Common.ClosedBy] = @me
)
)
Filtervoorwaarden
Elke filtervoorwaarde bestaat uit drie delen, die elk moeten voldoen aan de volgende regels:
-
Veld: U kunt de verwijzingsnaam of beschrijvende naam opgeven. De volgende voorbeelden zijn geldige WIQL-syntaxis:
- Referentienaam:
SELECT [System.AssignedTo] ... - Beschrijvende naam met spaties:
SELECT [Assigned To] ... - Voor namen zonder spaties zijn geen vierkante haken vereist:
SELECT ID, Title ...
- Referentienaam:
- Operator: Geldige waarden worden opgegeven in de sectie Operators verderop in dit artikel.
-
Veldwaarde: U kunt een van de volgende drie waarden opgeven, afhankelijk van het opgegeven veld.
- Een letterlijke waarde moet overeenkomen met het gegevenstype van de veldwaarde.
- Een variabele of macro die een bepaalde waarde aangeeft. Geeft bijvoorbeeld
@Mede persoon aan die de query uitvoert. Zie Macro's en variabelen voor meer informatie. - De naam van een ander veld. U kunt
[Assigned to] = [Changed by]bijvoorbeeld werkitems zoeken die zijn toegewezen aan de persoon die het werkitem het laatst heeft gewijzigd.
Zie de index van het veld Werkitem voor een beschrijving en verwijzingsnamen van alle door het systeem gedefinieerde velden.
Operators
Query's gebruiken logische expressies om resultatensets te kwalificeren. Deze logische expressies vormen een of meer samengevoegde bewerkingen.
Enkele eenvoudige querybewerkingen zijn als volgt:
WHERE
[System.TeamProject] = @project
AND [System.WorkItemType] <> ''
AND [System.AssignedTo] = 'Jamal Hartnett <fabrikamfiber4@hotmail.com>'
AND [Microsoft.VSTS.Common.Severity] <> '1 - Critical'
De volgende tabel bevat een overzicht van alle ondersteunde operators voor verschillende veldtypen. Zie Werkitemvelden en -kenmerken voor meer informatie over elk veldtype.
De =operators , <>, >, <>=en <= operators werken zoals verwacht.
System.ID > 100 Query's voor alle werkitems met een ID waarde van meer dan 100.
System.ChangedDate > '01-01-25 12:00:00' query's voor alle werkitems zijn gewijzigd na 1 januari 2025.
Naast deze basisoperators zijn er enkele gedragingen en operators die specifiek zijn voor bepaalde veldtypen.
Note
De operators die voor u beschikbaar zijn, zijn afhankelijk van uw platform en versie. Zie Snelzoekgids voor query's voor meer informatie.
| Veldtype | Ondersteunde operators |
|---|---|
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 groeperingen
U kunt de termen AND en OR in de typische Booleaanse betekenis gebruiken om twee componenten te evalueren. U kunt de voorwaarden AND EVER gebruiken en OR EVER bij het opgeven van een WAS EVER operator. U kunt logische expressies groeperen en deze zo nodig verder samenvoegen. De volgende voorbeelden laten zien.
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>'
)
)
U kunt de contains, underen in operatoren ontzegen met behulp van not. U kunt de ever operator niet ontkrachten. In het volgende voorbeeld worden query's uitgevoerd voor alle werkitems die niet zijn toegewezen onder de substructuur van Fabrikam Fiber\Account Management.
WHERE
[System.TeamProject] = @project
AND [System.WorkItemType] <> ''
AND NOT [System.AreaPath] UNDER 'Fabrikam Fiber\Account Management'
Voorbeeldquery, is ooit toegewezen aan
In het volgende queryeditorvoorbeeld worden alle werkitems gevonden die ooit aan Jamal Hartnett zijn toegewezen.
De bijbehorende WIQL-syntaxis is als volgt:
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>'
Macro's of variabelen
De volgende tabel bevat de macro's of variabelen die u in een WIQL-query kunt gebruiken.
| Macro | Usage |
|---|---|
@Me |
Gebruik deze variabele om automatisch te zoeken naar de alias van de huidige gebruiker in een veld dat gebruikersaliassen bevat. U kunt bijvoorbeeld werkitems vinden die u hebt geopend als u de Field kolom instelt op , de Activated By kolom op Operatoren de = kolom op Value@Me. |
@CurrentIteration |
Gebruik deze variabele om automatisch te filteren op werkitems die zijn toegewezen aan de huidige sprint voor het geselecteerde team op basis van de geselecteerde teamcontext. |
@Project |
Gebruik deze variabele om te zoeken naar werkitems in het huidige project. U kunt bijvoorbeeld alle werkitems in het huidige project vinden als u de Field kolom Team Projectinstelt op , de Operator kolom op =en de Value kolom op @Project. |
@StartOfDay@StartOfWeek@StartOfMonth@StartOfYear |
Gebruik deze macro's om velden te filteren DateTime op basis van het begin van de huidige dag, week, maand, jaar of een verschuiving naar een van deze waarden. U kunt bijvoorbeeld alle items vinden die in de afgelopen drie maanden zijn gemaakt als u de Field kolom instelt op , de Created Date kolom op Operatoren de >= kolom op Value@StartOfMonth - 3. |
@Today |
Gebruik deze variabele om te zoeken naar werkitems die betrekking hebben op de huidige datum of een eerdere datum. U kunt de @Today variabele ook wijzigen door dagen af te trekken. U kunt bijvoorbeeld alle items vinden die in de afgelopen week zijn geactiveerd als u de Field kolom instelt op , de Activated Date kolom op Operatoren de >= kolom op Value@Today - 7. |
[Any] |
Gebruik deze variabele om te zoeken naar werkitems die betrekking hebben op een waarde die is gedefinieerd voor een bepaald veld. |
@me Macro
De @me macro vervangt de naam van het geïntegreerde Windows-account van de gebruiker die de query uitvoert. In het volgende voorbeeld ziet u hoe u de macro en de equivalente statische instructie gebruikt. De macro is bedoeld voor gebruik met identiteitsvelden zoals Assigned To.
WHERE
[System.AssignedTo] = @Me
@today Macro
U kunt de @today macro gebruiken met elk DateTime veld. Deze macro vervangt middernacht van de huidige datum op de lokale computer waarop de query wordt uitgevoerd. U kunt ook gehele getallen opgeven @today+x of @today-y gebruiken voor respectievelijk x dagen na @today en y dagen vóór @today. Een query die gebruikmaakt van de @today macro kan verschillende resultatensets retourneren, afhankelijk van de tijdzone waarin deze wordt uitgevoerd.
In de volgende voorbeelden wordt ervan uitgegaan dat dit vandaag 1-3-2025 is.
WHERE
[System.CreatedDate] = @today
Is het equivalent van:
WHERE
[System.CreatedDate] = '01-03-2025'
And
WHERE
[System.CreatedDate] > @today-2
Is het equivalent van:
WHERE
[System.CreatedDate] > '01-01-2025'
@StartOfDay, , @StartOfWeek, @StartOfMonth@StartOfYearmacro's
U kunt de @StartOf... macro's met elk DateTime veld gebruiken. Deze macro vervangt middernacht van de huidige dag, het begin van de week, het begin van de maand of het begin van het jaar op de lokale computer waarop de query wordt uitgevoerd.
Deze macro's accepteren een wijzigingstekenreeks met een indeling van (+/-)nn(y|M|w|d|h|m). Net als bij de @Today macro kunt u verschuivingen met plus- of mintekens voor gehele getallen opgeven. Als de tijdseenheidscheidingsteken wordt weggelaten, wordt deze standaard ingesteld op de natuurlijke periode van de functie. Is bijvoorbeeld @StartOfWeek("+1") hetzelfde als @StartOfWeek("+1w"). Als het plus-/minteken (+/-) wordt weggelaten, wordt er uitgegaan van plusteken.
Met deze syntaxis kunt u modifiers nesten en uw query twee keer verschoven. De component Closed Date >= @StartOfYear - 1 filtert bijvoorbeeld werkitems die sinds vorig jaar zijn gesloten. Wanneer u dit Closed Date >= @StartOfYear('+3M') - 1wijzigt, worden werkitems uitgesloten die binnen de eerste drie maanden van het afgelopen jaar zijn gesloten. De volgende WIQL-syntaxis laat zien:
WHERE
[Microsoft.VSTS.Common.ClosedDate] >=@StartOfYear('+3M') - 1
In de volgende voorbeelden wordt ervan uitgegaan dat het vandaag 4-5-2025 is.
WHERE
[Microsoft.VSTS.Common.CreatedDate] >= @StartOfMonth-3
Is het equivalent van:
WHERE
[Microsoft.VSTS.Common.CreatedDate] >= '01-01-2025'
And
WHERE
[Microsoft.VSTS.Scheduling.TargetDate] > @StartOfYear
Is het equivalent van:
WHERE
[Microsoft.VSTS.Scheduling.TargetDate] > '01-01-2025'
Aangepaste macro's
WIQL ondersteunt ook willekeurige aangepaste macro's. Elke tekenreeks die door een tekenreeks @ wordt voorafgegaan, wordt behandeld als een aangepaste macro en wordt vervangen. De vervangingswaarde voor de aangepaste macro wordt opgehaald uit de contextparameter van de querymethode in het objectmodel. De volgende methode is de API die wordt gebruikt voor macro's:
public WorkItemCollection Query(string wiql, IDictionary context)
De contextparameter bevat sleutel-waardeparen voor macro's. Als de context bijvoorbeeld een sleutel-waardepaar van (project,) bevat, MyProjectwordt deze @project vervangen door MyProject in de WIQL. Deze vervanging is de manier waarop de opbouwfunctie voor werkitemsquery's de @project macro in Visual Studio verwerkt.
Historische query's opgeven (ASOF)
U kunt een ASOF component in een query gebruiken om te filteren op werkitems die voldoen aan de opgegeven filtervoorwaarden zoals ze zijn gedefinieerd op een specifieke datum en tijd.
Note
U kunt geen query's maken ASOF in de opbouwfunctie voor query's in Visual Studio. Als u een querybestand (.wiq) maakt dat een ASOF component bevat en die vervolgens in Visual Studio laadt, wordt de ASOF component genegeerd.
Stel dat een werkitem vóór 5/05/2025 is geclassificeerd onder een Iteration Path van Fabrikam Fiber\Release 1 en toegewezen aan Jamal Hartnett. Het werkitem is echter onlangs toegewezen aan 'Raisa Pokrtovaya' en verplaatst naar een nieuw iteratiepad van Release 2. De volgende voorbeeldquery retourneert werkitems die zijn toegewezen aan Jamal Hartnett, omdat de query is gebaseerd op de status van werkitems vanaf een eerdere datum en tijd.
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
Als er geen tijd is opgegeven, gebruikt WIQL middernacht. Als er geen tijdzone is opgegeven, gebruikt WIQL de tijdzone van de lokale clientcomputer.
De sorteervolgorde instellen (ORDER BY)
U kunt de ORDER BY component gebruiken om de resultaten van een query te sorteren op een of meer velden in oplopende of aflopende volgorde.
Note
De sorteervoorkeuren van de SQL-server op de gegevenslaag bepalen de standaardsorteervolgorde. U kunt echter de asc of desc parameters gebruiken om een expliciete sorteervolgorde te kiezen.
In het volgende voorbeeld worden werkitems eerst Priority gesorteerd op in oplopende volgorde (standaard) en vervolgens Created Date in aflopende volgorde (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
Query uitvoeren op koppelingen tussen werkitems
Als u koppelingen tussen werkitems wilt retourneren, geeft u op FROM WorkItemLinks. Filtervoorwaarden in de WHERE component kunnen van toepassing zijn op de koppelingen of op een werkitem dat de bron of het doel van een koppeling is. In het volgende voorbeeld worden de koppelingen tussen Product Backlog Items de actieve onderliggende items geretourneerd.
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)
De volgende tabel bevat een overzicht van de verschillen tussen werkitemquery's en query's voor koppelingen tussen werkitems.
| Clausule | Werkonderdelen | Koppelingen tussen werkitems |
|---|---|---|
FROM |
FROM WorkItems |
FROM WorkItemLinks |
WHERE |
[FieldName] = Value |
Geef een of meer van de volgende opties op:[Source].[FieldName] = Value[Target].[FieldName] = Value[System.Links.LinkType] = 'LinkName' |
MODE |
niet van toepassing | Geef een van de volgende opties op: - MODE (MustContain): (Standaard) Retourneert alleen WorkItemLinkInfo records waar aan de bron-, doel- en koppelingscriteria wordt voldaan.- MODE (MayContain): retourneert WorkItemLinkInfo records voor alle werkitems die voldoen aan de bron- en koppelingscriteria, zelfs als geen gekoppeld werkitem voldoet aan de doelcriteria.- MODE (DoesNotContain): retourneert WorkItemLinkInfo records voor alle werkitems die voldoen aan de bron, alleen als geen gekoppeld werkitem voldoet aan de koppeling en doelcriteria.- MODE (Recursive): Gebruiken voor structuurquery's ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'). Het koppelingstype moet structuurtopologie en voorwaartse richting zijn. Retourneert WorkItemLinkInfo records voor alle werkitems die voldoen aan de bron, recursief voor het doel.
ORDER BY en ASOF zijn niet compatibel met structuurquery's. |
RETURNS |
WorkItemQueryResult |
WorkItemLink |
U kunt een van de volgende systeemkoppelingstypenamen opgeven.
U kunt een van de volgende systeemkoppelingstypenamen of een aangepast koppelingstype opgeven dat is gedefinieerd met het on-premises XML-proces.
System.LinkTypes.Hierarchy-ForwardSystem.LinkTypes.RelatedSystem.LinkTypes.Dependency-PredecessorSystem.LinkTypes.Dependency-Successor-
Microsoft.VSTS.Common.Affects-Forward(CMMI-proces)
Zie Koppelingstypereferentie voor meer informatie.
Voorbeeld van query van structuurtype
Note
ORDER BY en ASOF zijn niet compatibel met structuurquery's. Neem deze componenten niet op in structuurquery's.
De volgende query retourneert alle typen werkitems die zijn gedefinieerd in het huidige project. De queryeditor geeft de query weer, zoals wordt weergegeven in de volgende afbeelding.
De equivalente WIQL-syntaxis is als volgt:
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)
Voorbeeld van directkoppelingsquery
In het volgende voorbeeld worden alle typen werkitems geretourneerd die zijn gedefinieerd in het huidige project. De queryeditor geeft de query weer, zoals wordt weergegeven in de volgende afbeelding.
De equivalente WIQL-syntaxis is als volgt:
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)
Meer queryvoorbeelden
In het volgende typische WIQL-queryvoorbeeld worden referentienamen voor de velden gebruikt. De query selecteert werkitems (geen werkitemtype opgegeven) met een Priority=1. De query retourneert de ID en Title van de geretourneerde set als kolommen. De resultaten worden in oplopende volgorde gesorteerd ID .
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/tijd-patroon
U geeft het datum/tijd-patroon op volgens een van de twee patronen:
- De notatie Datumpatroon en -tijdpatroon zijn afkomstig van uw gebruikersvoorkeuren, -tijd en -landinstellingen
- Het patroon dat door UTC is opgegeven, volgt dit patroon (waarbij Z is toegevoegd aan de datum/tijd).
AND [System.ChangedDate] >= '1/1/2025 00:00:00Z'
Voorbeeldclausules
In de volgende voorbeeldinstructies ziet u specifieke in aanmerking komende componenten.
| Clausule | 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 (Tijdfilter) |
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' |
Tekenreeks en tekst zonder opmaak
Letterlijke aanhalingstekens voor aanhalingstekens (enkele of dubbele aanhalingstekens worden ondersteund) in een vergelijking met een String of PlainText veld. Letterlijke tekenreeksen ondersteunen alle Unicode-tekens.
WHERE [Custom.Blocking] = 'Not Blocking'
WHERE [Custom.Blocking] <> 'Blocked'
U kunt de contains operator gebruiken om overal in de veldwaarde naar een subtekenreeks te zoeken.
WHERE [System.Description] contains 'WIQL'
Gebied en iteratie (TreePath)
U kunt de UNDER operator voor de Area Path en Iteration Path velden gebruiken. De UNDER operator evalueert of een waarde zich binnen de substructuur van een specifiek classificatieknooppunt bevindt. De volgende expressie resulteert bijvoorbeeld in waar als dat Area Path het geval isMyProject\Server\Administration, MyProject\Server\Administration\Feature 1MyProject\Server\Administration\Feature 2\SubFeature 5of een ander knooppunt in de substructuur.
WHERE [System.AreaPath] UNDER `MyProject\Server\Administration`
Modifiers en speciale operators
U kunt enkele modifiers en speciale operators gebruiken in een query-expressie.
Gebruik de IN operator om te evalueren of een veldwaarde gelijk is aan een van een set waarden. Deze operator wordt ondersteund voor de Stringtypen , Integeren DoubleDateTime velden. In het volgende voorbeeld en het bijbehorende semantische equivalent ziet u dit.
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>'
)
De EVER operator wordt gebruikt om te evalueren of een veldwaarde gelijk is aan of ooit gelijk is aan een bepaalde waarde in alle eerdere revisies van werkitems. De Stringtypen , Integeren DoubleDateTime veldtypen ondersteunen deze operator. Er zijn alternatieve syntaxis voor de EVER operator. Met de volgende fragmenten wordt bijvoorbeeld aangegeven of alle werkitems ooit zijn toegewezen aan Jamal, Raisa of Christie.
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>'
)
Copilot gebruiken om WIQL te schrijven, op te lossen en te optimaliseren
U kunt een AI-assistent (bijvoorbeeld GitHub Copilot of andere copilots) gebruiken om WIQL-query's te maken, te corrigeren of te optimaliseren. Behandel Copilot als productiviteitshulpmiddel, geen gezaghebbende bron, en controleer en test altijd een gegenereerde query voordat u deze uitvoert op productiegegevens.
Richtlijnen en best practices:
-
Mogelijkheden: Copilot kan vereisten voor gewone taal vertalen naar WIQL, syntaxisfouten oplossen (niet-overeenkomende haakjes, ontbrekende komma's, onjuiste trefwoorden), SELECT-lijsten converteren tussen beschrijvende en verwijzingsnamen, componenten of letterlijke datums genereren
ASOFen suggesties voor herschrijven van componenten om resultatensets te beperken of uit te breiden. -
Valideren: Altijd gegenereerde WIQL valideren in de Query-editor of een veilig testproject. Controleer macro's (bijvoorbeeld
@Me@Today) en landinstellingenafhankelijke datumnotaties voordat u deze gebruikt. - Beveiliging: plak nooit geheimen, toegangstokens of persoonlijke verbindingsreeksen in prompts. Verwijder of redacer gevoelige waarden in voorbeelden die u invoert voor Copilot.
-
Prestaties: Vraag Copilot om nettoladingen van resultaten te minimaliseren (retourneer alleen benodigde velden), voeg de juiste WHERE-filters toe en vermijd te veel gebruik van
INof niet-gebondenLIKEzoekopdrachten. Onthoud de limiet van 32 K voor WIQL-query's. -
Edge-aanvragen controleren: controleer het gedrag voor historische (
ASOF) query's, structuur-/koppelingsquery's (FROM workItemLinks) enWAS EVER/EVERoperators die revisies scannen. Dit kan complexer zijn en moet mogelijk handmatig worden afgestemd.
Voorbeeld: WIQL genereren op eenvoudige engelse taal:
Prompt: "Return ID and Title for active Bugs assigned @Me in project 'Fabrikam' and modified in the last 30 days. Sorteren op ChangedDate desc."
Copilot produceert:
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
WIQL-query's automatiseren met REST API en AI
U kunt AI-assistenten, zoals Copilot, gebruiken om het WIQL REST API-proces in twee stappen te automatiseren:
- Gebruik de Query by Wiql REST API om werkitem-id's op te halen die overeenkomen met uw WIQL.
- Gebruik de API Werkitems ophalen om volledige details voor deze id's op te halen.
AI kan u helpen:
- Genereer WIQL op basis van gewone taal en koppel de twee API-aanroepen in code (bijvoorbeeld Python, PowerShell of JavaScript).
- De resultaten voor dashboards of rapporten opmaken en samenvatten.
Tip
Zie Query by Wiql (REST API) voor REST API-details.
Voorbeeld: WIQL automatiseren met Python en AI
Stel dat u de titels en statussen van alle actieve bugs in een project wilt weergeven.
Vragen om Copilot:
"Schrijf Python-code die gebruikmaakt van de Azure DevOps REST API om de titels en statussen van alle actieve bugs in mijn project weer te geven. Gebruik WIQL om de id's op te halen en de details voor die id's op te halen.
U kunt Copilot gebruiken om als volgt code te genereren:
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.")