Referência de sintaxe de WIQL (Linguagem de Consulta de Item de Trabalho)

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

Você pode usar a sintaxe WIQL para definir uma consulta como um hiperlink ou ao usar a API REST (Work Item Query Language).

A sintaxe WIQL dá suporte a todas as funções disponíveis por meio do portal da Web Editor de Consultas mais algumas. Você pode especificar os campos a serem retornados e especificar o agrupamento lógico de cláusulas de consulta. Além disso, você pode usar uma ASOF cláusula para filtrar baseado em atribuições com base em uma data anterior.

Importante

A sintaxe WIQL é usada para executar a API REST Consulta por Wiql. Atualmente, não há como chamar a API para retornar as informações detalhadas do item de trabalho de uma consulta WIQL diretamente. Não importa quais campos você inclua na instrução SELECT, a API retorna apenas as IDs de item de trabalho. Para obter as informações completas, você precisa executar duas etapas: (1) obter a ID dos itens de trabalho de um WIQL e (2) obter os itens de trabalho por meio de Obter uma lista de itens de trabalho por ID e para campos específicos.

Pré-requisitos

Uma consulta retorna apenas os itens de trabalho para os quais você tem a permissão Exibir itens de trabalho ou Exibir itens de trabalho neste nó. Normalmente, essas permissões são concedidas a membros dos grupos Leitores e Colaboradores para cada projeto de equipe. Para saber mais, confira Permissões e grupos.

Visão geral da linguagem de consulta

A linguagem de consulta de item de trabalho tem cinco partes mostradas no snippet de sintaxe e descritas na tabela a seguir. A sintaxe WIQL não diferencia maiúsculas de minúsculas.

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'

Dica

Ao instalar a extensão Wiql Editor Marketplace, você pode construir suas consultas usando o Editor de Consultas e, em seguida, exibir a sintaxe WIQL. Em seguida, você pode copiar e modificar a sintaxe WIQL e executar a consulta usando o hub Wiql Playground adicionado aos Quadros.

Cláusula

Exemplo

SELECT

Identifica os campos a serem retornados para cada item de trabalho retornado pela consulta. Você pode especificar o nome amigável ou o nome de referência. Use colchetes ([]) se o nome contêm espaços em branco ou pontos finais.

FROM

Indica se você deseja que a consulta localize itens de trabalho ou links entre itens de trabalho.

  • Use FROM WorkItems para retornar itens de trabalho.
  • Use FROM workItemLinks para retornar links entre itens de trabalho. Para obter mais informações, confira Consultar por links entre os itens de trabalho mais adiante neste artigo.

WHERE

Especifica os critérios de filtro para a consulta. Para obter mais informações, confira Condições de filtro (WHERE) mais adiante neste artigo.

ORDER BY

Especifica a ordem de classificação dos itens de trabalho retornados. Você pode especificar Crescente (Asc) ou Decrescente (Desc) para um ou mais campos. Por exemplo:
ORDER BY [State] Asc, [Changed Date] Desc

ASOF

Especifica uma consulta histórica, indicando uma data quando o filtro deve ser aplicado. Por exemplo, essa consulta retorna todas as histórias de usuário que foram definidas como Ativas em 11 de fevereiro de 2020. Especifique a data de acordo com as diretrizes fornecidas no Padrão de data e hora. ASOF '02-11-2020'

Observação

O comprimento WIQL de consultas feitas no Azure Boards não deve exceder 32 mil caracteres. O sistema não permitirá que você crie ou execute consultas que excedam esse comprimento.

Padrão de data e hora

O padrão de data e hora inserido para campos DateTime deve corresponder ao selecionado em seu perfil. Para exibir ou alterar sua seleção, confira Definir preferências do usuário de Hora e Localidade.

Captura de tela que mostra as opções suspensas Padrão de Data no painel Hora e Localidade.Captura de tela que mostra as opções suspensas Padrão de Hora no painel Hora e Localidade.

Captura de tela que mostra o painel Hora e Localidade com os campos Padrão de data e Padrão de hora.

Aspas (aspas simples ou duplas têm suporte) de literais DateTime usadas em comparações. Elas devem estar no formato DateTime do .NET do computador cliente local que executa a consulta. A menos que um fuso horário seja especificado, os literais DateTime estão no fuso horário do computador 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')  

Quando a hora é omitida em um literal DateTime e o parâmetro dayPrecision é igual a false, a hora é considerada zero (meia-noite). A configuração padrão para o parâmetro dayPrecision é false.

Ou você pode especificar o formato ISO 8601, que é válido independentemente da localidade. A ISO 8601 representa a data e a hora começando com o ano, seguido pelo mês, o dia, a hora, os minutos, segundos e milissegundos. Por exemplo, 2021-12-10 15:00:00.000, representa o dia 10 de dezembro de 2021 às 15:00 no horário local. Um exemplo de como usar o formato ISO 8601 é o seguinte.

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

Campos Personalizados

Você pode adicionar um campo personalizado a uma cláusula de consulta. Com o WIQL, você deve especificar o nome de referência para o campo personalizado. Para projetos que usam um modelo de processo herdado, os campos personalizados normalmente são rotulados com Personalizado. anexados ao nome e espaços removidos. Por exemplo:

Nome amigável Nome de referência
Aprovador Custom.Approver
Tipo de solicitação Custom.RequestType
Estimativa de Escopo Custom.CustomEstimate

Para projetos que usam o modelo de processo XML local, o nome de referência é definido pelas definições de tipo de item de trabalho XML.

Para obter mais informações, leia Campos e atributos de item de trabalho.

Especificar cláusulas de filtro (WHERE)

A cláusula WHERE especifica os critérios de filtro. A consulta retorna apenas os itens de trabalho que atendem a os critérios especificados. Por exemplo, o exemplo a seguir de cláusula WHERE retorna as histórias de usuário ativas e atribuídas a você.

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

Você pode controlar a ordem na qual os operadores lógicos são avaliados colocando-os entre parênteses para agrupar os critérios de filtro. Por exemplo, para retornar os itens de trabalho que são atribuídos a você ou que você fechou, altere o filtro de consulta para corresponder ao exemplo a seguir.

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

Condições de filtro

Cada condição de filtro é composta por três partes, cada uma das quais deve estar em conformidade com as seguintes regras:

  • Campo: você pode especificar o nome amigável ou o nome de referência. Os seguintes exemplos são uma sintaxe WIQL válida:
    • Nome de Referência: SELECT [System.AssignedTo] ...
    • Nome amigável com espaços: SELECT [Assigned To] ...
    • Nomes sem espaços não exigem colchetes: SELECT ID, Title ...
  • Operador: os valores válidos são especificados na seção Operadores posteriormente neste artigo.
  • Valor do campo: você pode especificar um dos três valores a seguir, dependendo do campo especificado.
    • Um valor literal deve corresponder ao tipo de dados do valor do campo.
    • Uma *variável ou macro que indica um determinado valor. Por exemplo, @Me indica a pessoa que está executando a consulta. Para obter mais informações, confira Macros e Variáveis posteriormente neste artigo.
    • O nome do outro campo. Por exemplo, você pode usar [Assigned to] = [Changed by] para localizar os itens de trabalho que estão atribuídos à pessoa que alterou o item de trabalho recentemente.

Para obter uma descrição e nomes de referência de todos os campos definidos pelo sistema, confira Índice de campo de item de trabalho.

Operadores

As consultas usam expressões lógicas para qualificar conjuntos de resultados. Essas expressões lógicas são formadas por uma ou mais operações agrupadas.

Algumas operações de consulta simples estão listadas abaixo.

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

A tabela a seguir resume todos os operadores com suporte para diferentes tipos de campo. Para obter mais informações sobre cada tipo de campo, confira Atributos e campos e atributos de item de trabalho.

Os operadores =, <>, >, <, >=, and <= funcionam conforme o esperado. Por exemplo, System.ID > 100 consulta todos os itens de trabalho com uma ID maior que 100. System.ChangedDate > '01-01-19 12:00:00' consulta todos os itens de trabalho alterados após o meio-dia de 1º de janeiro de 2019.

Além desses operadores básicos, há alguns comportamentos e operadores específicos para determinados tipos de campo.

Observação

Os operadores disponíveis para você dependem de sua plataforma e versão. Para obter mais informações, confira Consultar referência rápida.

Tipo de campo

Operadores suportados

Booliano

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

DateTime

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

Duplo, GUID, Inteiro

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

Identidade

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

Texto sem formatação

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

Agrupamentos lógicos

Você pode usar os termos AND e OR no sentido booliano típico para avaliar duas cláusulas. Você pode usar os termos AND EVER e OR EVER ao especificar um operador WAS EVER. Você pode agrupar expressões lógicas e agrupá-las ainda mais, conforme necessário. Os exemplos são mostrados abaixo.

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

Você pode negar os operadores contains, under, e in usando not. Não é possível negar o operador ever. O exemplo abaixo consulta todos os itens de trabalho que não são atribuídos na subárvore de Fabrikam Fiber\Account Management.

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

Consulta de exemplo, Nunca Foi Atribuído A

O exemplo de Editor de Consultas a seguir localiza todos os itens de trabalho que já foram atribuídos a Jamal Hartnett.

Captura de tela do Editor de Consultas, consulta de lista simples, já foi atribuída.

E aqui está a sintaxe WIQL correspondente.

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 variáveis

A tabela a seguir lista as macros ou variáveis que você pode usar em uma consulta WIQL.

Macro Uso
@Me Use essa variável para pesquisar automaticamente o alias do usuário atual em um campo que contém alias de usuários. Por exemplo, você pode localizar itens de trabalho abertos se definir a coluna Campo como Ativado Por, a coluna Operador para =e a coluna Valor como @Me.
@CurrentIteration Use essa variável para filtrar automaticamente os itens de trabalho atribuídos ao sprint atual para a equipe selecionada com base no contexto de equipe selecionado.
@Project Use essa variável para pesquisar itens de trabalho no projeto atual. Por exemplo, você pode localizar todos os itens de trabalho no projeto da atual se definir a coluna Campo como Projeto da Equipe, a coluna Operador como = e a coluna Valor como @Project.
@StartOfDay
@StartOfWeek
@StartOfMonth
@StartOfYear
Use essas macros para filtrar os campos DateTime com base no início do dia atual, semana, mês, ano ou um deslocamento para um desses valores. Por exemplo, você pode localizar todos os itens criados nos últimos três meses se definir a coluna Campo como Data de Criação, a coluna Operador como >= e a coluna Valor como @StartOfMonth - 3.
@Today Use essa variável para pesquisar itens de trabalho relacionados à data atual ou a uma data anterior. Também é possível modificar a variável @Today subtraindo dias. Por exemplo, você pode localizar todos os itens ativados na semana passada se definir a coluna Campo como Data da Ativação, a coluna Operador como >= e a coluna Valor como @Today - 7.
[Qualquer] Use essa variável para pesquisar itens de trabalho relacionados a qualquer valor definido para um campo específico.

Macro @me

A macro @me substitui o nome da conta integrada do Windows do usuário que executa a consulta. O exemplo a seguir mostra como usar a macro e a instrução estática equivalente. A macro destina-se ao uso com campos de identidade, como Assigned To.

WHERE  
   [System.AssignedTo] = @Me 

Macro @today

Você pode usar a macro @today com qualquer campo DateTime. Essa macro substitui a meia-noite da data atual no computador local que executa a consulta. Você também pode especificar @today+x ou @today-y usando deslocamentos inteiros para x dias após @today e y dias antes de @today, respectivamente. Uma consulta que usa a macro @today pode retornar conjuntos de resultados diferentes dependendo do fuso horário no qual ela é executada.

Os exemplos a seguir pressupõem que hoje é 3/1/19.

WHERE  
   [System.CreatedDate] = @today

É o equivalente a:

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

And

WHERE  
   [System.CreatedDate] > @today-2

É o equivalente a:

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

macros @StartOfDay, @StartOfWeek, @StartOfMonth, @StartOfYear

Você pode usar as macros @StartOf... com qualquer campo DateTime. Essa macro substitui a meia-noite do dia atual, início da semana, início do mês ou início do ano no computador local que executa a consulta.

Observação

Tem como requisito o Azure DevOps Server 2019 Atualização 1 ou versão posterior.

Essas macros aceitam uma cadeia de caracteres modificadora que tem um formato de (+/-)nn(y|M|w|d|h|m). Semelhante à macro @Today, você pode especificar deslocamentos de mais ou menos inteiros. Se o qualificador de unidade de tempo for omitido, ele usará como padrão o período natural da função. Por exemplo, @StartOfWeek("+1") é o mesmo que @StartOfWeek("+1w"). Se o sinal de mais/menos (+/-) for omitido, será assumido mais.

Essa sintaxe permite aninhar modificadores e deslocar a consulta duas vezes. Por exemplo, a cláusula Closed Date >= @StartOfYear - 1, filtra itens de trabalho que foram fechados desde o ano passado. Ao modificá-la para Closed Date >= @StartOfYear('+3M') - 1, ela exclui itens de trabalho fechados nos três primeiros meses do ano passado. A sintaxe WIQL é a mesma mostrada no exemplo a seguir.

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

Os exemplos a seguir pressupõem que hoje é 5/4/19.

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

É o equivalente a:


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

And

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

É o equivalente a:

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

Macros personalizadas

O WIQL também dá suporte a macros personalizadas arbitrárias. Qualquer cadeia de caracteres prefixada por um @ é tratada como macro personalizada e é substituída. O valor de substituição da macro personalizada é recuperado do parâmetro de contexto do método de consulta no modelo de objeto. O método a seguir é a API usada para macros:

public WorkItemCollection Query(string wiql, IDictionary context)

O parâmetro de contexto contém pares chave-valor para macros. Por exemplo, se o contexto contiver um par chave-valor de (projeto, MyProject), o @project será substituído por MyProject no WIQL. Essa substituição é como o construtor de consultas de item de trabalho lida com a macro @project no Visual Studio.

Especificar consultas históricas (ASOF)

Você pode usar uma cláusula ASOF em uma consulta para filtrar itens de trabalho que satisfaçam as condições de filtro especificadas, conforme foram definidas em uma data e hora específicas.

Observação

Você não pode criar consultas ASOF no construtor de consultas do Visual Studio. Se você criar um arquivo de consulta (.wiq) que inclui uma cláusula ASOF e, em seguida, carregá-lo no Visual Studio, a cláusula ASOF será ignorada.

Suponha que um item de trabalho tenha sido classificado em um Caminho de Iteração de Fabrikam Fiber\Release 1 e atribuído a "Jamal Hartnett" antes de 05/05/2022. No entanto, o item de trabalho foi recentemente atribuído a "Raisa Pokrovskaya" e movido para um novo caminho de iteração do Lançamento 2. A consulta de exemplo a seguir retorna itens de trabalho atribuídos a Jamal Hartnett, pois a consulta é baseada no estado dos itens de trabalho a partir de uma data e hora passadas.

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'

Observação

Se nenhuma hora for especificada, o WIQL usará meia-noite. Se nenhum fuso horário for especificado, o WIQL usará o fuso horário do computador cliente local.

Definir a ordem de classificação (ORDER BY)

Você pode usar a cláusula ORDER BY para classificar os resultados de uma consulta por um ou mais campos em ordem crescente ou decrescente.

Observação

As preferências de classificação do SQL Server na camada de dados determinam a ordem de classificação padrão. No entanto, você pode usar os parâmetros asc ou desc para escolher uma ordem de classificação explícita.

O exemplo a seguir classifica os itens de trabalho primeiro por Prioridade em ordem crescente (padrão) e, em seguida, por Data de Criação em ordem decrescente (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

Para retornar os links entre itens de trabalho, especifique FROM WorkItemLinks. As condições de filtro na cláusula WHERE pode se aplicar aos links ou a qualquer item de trabalho que seja a origem ou o destino de um link. Por exemplo, a consulta a seguir retorna os links entre Item da Lista de Pendências do Produto e seus itens filho ativos.

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)

A tabela a seguir resume as diferenças entre consultas de item de trabalho e consultas de links entre itens de trabalho.

Cláusula

Itens de trabalho

Links entre itens de trabalho

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

não aplicável

Especifique um dos seguintes:

  • MODE (MustContain): (Padrão) retorna apenas os registros WorkItemLinkInfo, onde todos os critérios de origem, o destino e link são satisfeitos.
  • MODE (MayContain): retorna registros WorkItemLinkInfo para todos os itens de trabalho que satisfaçam os critérios de origem e de link, mesmo que nenhum item de trabalho vinculado satisfaça os critérios de destino.
  • MODE (DoesNotContain): retorna registros WorkItemLinkInfo para todos os itens de trabalho que satisfaçam a origem, somente se nenhum item de trabalho vinculado satisfizer os critérios de link e de destino.
  • MODE (Recursive): use para consultas de árvore([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'). O tipo de link deve ser Topologia de árvore e direção para frente. Retorna registros WorkItemLinkInfo para todos os itens de trabalho que atendem à origem, recursivamente ao destino. ORDER BY e ASOF não são compatíveis com consultas de árvore.

RETURNS

Você pode especificar um dos seguintes nomes de tipo de link do sistema.

Você pode especificar um dos nomes de tipo de link do sistema, listados abaixo, ou um tipo de link personalizado que você definiu com o processo XML local.

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

Para obter mais informações, confira Referência do tipo de link.

Exemplo de consulta de tipo de árvore

A consulta a seguir retorna todos os tipos de item de trabalho definidos no projeto atual. A consulta, conforme mostrado no Editor de Consultas, aparece conforme mostrado na imagem a seguir.

Captura de tela do Editor de Consultas, consulta de árvore, todos os itens de trabalho e estados.

A sintaxe WIQL equivalente é mostrada abaixo.

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)


A consulta a seguir retorna todos os tipos de item de trabalho definidos no projeto atual. A consulta, conforme mostrado no Editor de Consultas, aparece conforme mostrado na imagem a seguir.

Captura de tela do Editor de Consultas, consulta de link direto, todos os itens de trabalho e estados.

A sintaxe WIQL equivalente é mostrada abaixo.

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)

Mais exemplos de consultas

O exemplo de consulta WIQL típico a seguir usa nomes de referência para os campos. A consulta seleciona itens de trabalho (nenhum tipo de item de trabalho especificado) com uma Priority=1. A consulta retorna a ID e o Título do conjunto de retorno como colunas. Os resultados são classificados por ID em ordem crescente.

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

Padrão de data/hora

Especifique o padrão de data/hora de acordo com um dos dois padrões:

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

Exemplos de cláusulas

As instruções de exemplo a seguir mostram cláusulas de qualificação específicas.

Cláusula

Exemplo

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 (Filtro de Tempo)

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

Cadeia de caracteres e PlainText

Literais de cadeia de caracteres de aspas (há suporte para aspas simples ou duplas) em uma comparação com uma cadeia de caracteres ou um campo de texto sem formatação. Literais de cadeia de caracteres dão suporte a todos os caracteres Unicode.

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

Você pode usar o operador contains para pesquisar uma substring em qualquer lugar no valor do campo.

WHERE [System.Description] contains 'WIQL' 

Área e iteração (TreePath)

Você pode usar o operador UNDER para os campos Área e Caminho de Iteração. O operador UNDER avalia se um valor está dentro da subárvore de um nó de classificação específico. Por exemplo, a expressão abaixo seria avaliada como true se o Caminho da Área fosse 'MyProject\Server\Administration', 'MyProject\Server\Administration\Feature 1', 'MyProject\Server\Administration\Feature 2\SubFeature 5' ou qualquer outro nó dentro da subárvore.

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

Modificadores e operadores especiais

Você pode usar alguns modificadores e operadores especiais em uma expressão de consulta.

Use o operador IN para avaliar se um valor de campo é igual a qualquer um de um conjunto de valores. Esse operador tem suporte para os tipos de campo String, Integer, Double e DateTime. Consulte o exemplo a seguir junto com seu equivalente semântico.

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

O operador EVER é usado para avaliar se um valor de campo é igual ou se já igualou um valor específico em todas as revisões anteriores de itens de trabalho. Os tipos de campo String, Integer, Double e DateTime tem suporte para este operador. Há sintaxes alternativas para o operador EVER. Por exemplo, os snippets abaixo consultam se todos os itens de trabalho já foram atribuídos a Jamal, Raise ou 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>'
    )