在 Azure Boards 中按分配或工作流更改进行查询

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

工作流中的状态支持在工作从新状态变为已关闭或已完成状态时跟踪工作状态。 看板查询字段支持在工作从看板的一个栏或泳道移动到另一个栏或泳道时跟踪工作的状态。

每个工作流都包含一组状态、状态之间的有效转换以及将工作项转换为所选状态的原因。 工作流状态和原因因工作项类型和用于创建项目的默认流程而异。

大多数工作项会从“新”、“活动”或“建议”状态变为“已完毕”或“已关闭”状态。 当每个工作项从一种状态变为另一种状态时,可能也将此项重新分配了给团队的不同成员。 例如,测试人员可能创建一个 Bug,在会审过程中将其分配给其他团队成员。 当其他团队成员解决此 Bug 后,它会重新分配给创建它的测试人员。

例如,可以找到已关闭但又重新激活的所有工作项。 通过指定“更改日期”字段,可以重点关注今天、昨天或上周发生的重新激活。

Query Editor filter for reactivated items.

还可以使用“激活者”和“激活日期”字段或其他工作流字段。

提示

并非所有字段对所有工作项类型都有效。 跳转到工作流和看板查询字段,了解可以包含在查询中的字段集及其所适用的工作项类型。

如果不知道如何创建查询,请参阅使用查询编辑器列出和管理查询

支持的运算符和宏

指定标识或工作流关联字段的查询子句可以使用下表中列出的运算符和宏。 若要了解字段数据类型,请参阅本文后面提供的工作流和看板字段


Data type

支持的运算符和宏


布尔值1

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


DateTime

= , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], In, Not In, Was Ever
宏:@Today, @Today +/- n 对任何“日期时间”字段都有效


标识

= , <> , > , < , >= , <= , =[Field], <>[Field], >[Field], <[Field], >=[Field], <=[Field], Contains, Does Not Contain, In, Not In, In Group, Not In Group, Was Ever宏:@Me 对所有“标识”字段都有效


单一文本(字符串)2

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


使用 InNot In 运算符筛选或排除两个或多个选取列表条目或一组带分隔符的项。 使用 In GroupNot In Group 运算符筛选属于或不属于类别组或安全组的项。 有关详细信息,请参阅查询字段、运算符和宏

日期和时间模式

为“日期/时间”字段输入的日期和时间模式应与通过配置文件选择的日期和时间模式匹配。 若要查看或更改选择,请参阅设置用户首选项、时间和区域设置

Time and Locale page, Date pattern optionsTime and Locale page, Time pattern options

Time and Locale page, Date pattern options

基于标识的查询

使用搜索框或查询编辑器根据对“标识”字段所做的分配快速查找工作项。 此外,还可以根据更改、解决或关闭工作项的人员筛选工作项。 通过指定时间段,可以进一步限定查询的范围,这有助于提高性能。

使用 = 查找当前分配、使用 Was Ever 根据过去的分配列出项,以及使用 @Me 将范围限定为用户标识。

筛选出

包括这些查询子句


分配给我的活动项

Assigned To @Me
And State = Active

在某个时间点分配给我的已关闭项

Assigned To Was Ever @Me
And State = Closed

分配给 Web 团队的活动用户情景

Work Item Type = User Story
And State = Active
And Assigned To In Group [FabrikamFiber]\Web

我在过去 30 天内修改过的项

Changed By = @Me And Changed Date >= @Today-30

未分配的项(将“值”留空)

Assigned To = _


团队或组成员身份查询

若要筛选分配给属于团队或安全组的某人的项,请使用“在组中”运算符。

Screenshot of Query Editor, Filter based on assignment to a security group.

可使用“在组中”或“不在组中”运算符来根据是组成员或不是组成员的几个值筛选查询。 可以指定的组示例包括以下项:

  • Teams
  • 内置安全组和自定义安全组
  • Microsoft Entra ID 和 Active Directory 安全组
  • 工作项类别

基于工作流更改的查询

使用“状态”、“原因”和“解决原因”字段根据工作流更改查询项。

筛选出

包括这些查询子句


已解决的情景

Work Item Type = User Story
And State = Resolved

新的或活动的情景、Bug 和任务

Work Item Type In User Story,Bug,Task
And State In New,Active

由于是重复项而已删除的项

State= Removed
And Reason = Duplicate

未通过验收测试的项

Resolved Reason = Acceptance tests fail

过去 15 天内关闭的项

State = Closed
And Closed Date > @Today-15


工作流更改和基于标识的查询

可以快速找到已更改、已解决或已关闭的项。 还可以查找其他团队成员更改的项。 有几个字段(如“创建者”、“更改者”、“解决者”和“关闭者”)根据对工作流所做的更改进行填充。

筛选出

包括这些查询子句


我关闭的用户情景

Work Item Type = User Story
And Closed By = @Me

我在上周解决的项

Resolved By = @Me
And Resolved Date >= Today-7


查询工作项状态的更改

若要列出在特定日期范围内更改了状态的工作项,可以使用“状态更改日期”字段来缩小搜索范围,然后为“状态”字段的更改添加子句。 下图中显示了一个示例。

Screenshot of Query Editor, filter State Change Date and State fields.

查询看板的更改

使用看板查询字段(“板栏”、“板栏已完成”和“板通道”),可以根据工作项在看板上的流状态列出工作项。 还可以基于这些查询创建状态或趋势图

可以基于团队区域路径以及项是否位于特定的自定义看板栏和泳道中来列出项。 如果重命名栏或泳道,则需要更新查询筛选器以反映新名称。 有关更多想法,请参阅此博客文章:新字段为查询带来了看板好处及更多内容

Screenshot of Query Editor, filter on Kanban Board Column and Board Lane fields.

注意

默认情况下,查询的范围现在限定为当前项目。 检查“跨项目查询”以查找集合内其他项目中定义的工作项。

筛选出

包括这些查询子句


“代码/正在执行”栏中的用户情景

Work Item Type = User Story
And Board Column = Code
And Board Column Done = False

“加速”泳道中的项

Board Lane = Expedite

标签包含“Test”的任何泳道中的项

Board Lane Contains Test

曾经位于“评审中”栏中的项

Board Column Was Ever In Review


重要

多个团队的看板面板上显示的工作项可能会产生不符合预期的结果,因为每个团队都可以自定义其看板面板栏和泳道。 分配给看板“面板栏”、“面板栏已完成”和“面板泳道”字段的值可能与另一个团队从其他面板更新工作项时预期的值不同。 有关详细信息,请参阅在 Azure Boards 中添加、评审和更新工作项

工作流和看板字段

以下字段可用于筛选查询。 当工作项从一个状态进行到另一个状态时,其中一些字段会更新。 或者,当你将看板中的工作项移动到其他栏或泳道时,这些字段会更新。 其中一些字段不会显示在工作项窗体上,但会针对下表中列出的工作项类型跟踪这些字段。

有关字段属性的详细信息,请参阅工作项字段和属性

字段名称

说明

工作项类型


激活者 1、2、3

将工作项的状态更改为“正在进行”类别状态的团队成员的姓名。

将工作项的状态从“新”更改为“活动”或在工作项已关闭、已完成或已完毕后重新激活工作项的团队成员的姓名。

引用名称=Microsoft.VSTS.Common.ActivatedBy
数据类型=字符串(标识)

Bug、变更请求、长篇故事、功能、问题、产品积压工作项、要求、评审、风险、共享步骤、任务、测试用例、用户情景

激活日期 1、3

将工作项更改为“正在进行”类别状态的日期和时间。

工作项在已关闭、已完成或已完毕后从“新”更改为“活动”或重新激活的日期和时间。

引用名称=Microsoft.VSTS.Common.ActivatedDate
数据类型=日期时间

全部

分配给 2

分配给 2、3、4

当前拥有该工作项的团队成员的名称。 有关详细信息,请参阅有关同步和人员名称字段的注释 1

引用名称=System.AssignedTo
数据类型=字符串(标识)

全部

板栏

工作项的当前看板栏分配,例如:“活动”、“已关闭”、“已提交”、“已完毕”或其他自定义列分配。

引用名称=System.BoardColumn
数据类型=字符串

要求类别 4

要求类别 5

板栏已完成

当前将工作项分配到“正在执行(False)”或“已完成(True)”看板栏。 仅在为看板栏启用拆分栏时分配。

引用名称=System.BoardColumnDone
数据类型=布林值

要求类别 4

要求类别 5

板通道

工作项的当前看板泳道分配,例如:“默认”、“加速”、“已阻止”或其他自定义泳道分配。 引用名称=System.BoardLane
数据类型=字符串

要求类别 4

要求类别 5

关闭者 1、2

关闭者 1、2、3

将状态设置为“已关闭”、“已完成”或“已完毕”的团队成员的名称。

引用名称=Microsoft.VSTS.Common.ClosedBy
数据类型=字符串(标识)

全部

关闭日期

关闭工作项的日期和时间。

引用名称=Microsoft.VSTS.Common.ClosedDate
数据类型=日期时间

全部

创建者 1、2

创建者 1、2、3

创建了该工作项的团队成员的名称。

引用名称='System.CreatedBy
数据类型=字符串(标识)

全部

创建日期

创建工作项的日期和时间。

引用名称=System.CreatedDate
数据类型=日期时间

全部

原因

原因 3、4

工作项处于当前状态的原因。 从一个工作流状态到另一个工作流状态的每次转换都与相应的原因相关联。

对于本地 XML 流程模型,原因值使用 REASON 元素在工作项类型定义的 WORKFLOW 部分中进行定义。 若要修改定义的原因,请参阅更改工作项类型的工作流

引用名称=System.Reason
数据类型=字符串

所有(测试用例和共享步骤除外)

解决者 1、2

解决者 1、2、3

将工作项的状态更改为“已解决”类别状态的团队成员的姓名。

将工作项的状态更改为“已解决”或“已完毕”工作流状态的团队成员的姓名。

引用名称=Microsoft.VSTS.Common.ResolvedBy,数据类型=字符串(标识)

全部

解决日期

解决日期 1、2

将工作项更改为“已解决”类别状态的日期和时间。

将工作项变为“已解决”或“已完毕”工作流状态的日期和时间。

引用名称=Microsoft.VSTS.Common.ResolvedDate,数据类型=DateTime

全部

解决原因

解决原因 3

已解决工作项的原因。 例如,用户案例代码已完成或 Bug 已修复。 此字段是只读的,且仅对 Agile 和 CMMI 工作项类型有效。

引用名称=Microsoft.VSTS.Common.ResolvedReason
数据类型=字符串

所有(敏捷、CMMI)

审阅者

响应代码评审请求并在代码评审响应中进行编录的团队成员的姓名。

引用名称=Microsoft.VSTS.Common.ReviewedBy
数据类型=字符串(标识)

代码评审响应

状态

状态 3、4

工作项的当前状态。 通过此字段,可在工作项从“新的”或“活动的”变为“已完成”或“已关闭”状态时,更新工作项状态。

若要修改工作流状态,请参阅自定义流程的工作流

若要修改工作流状态,请参阅以下文章:

若要修改工作流状态,请参阅更改工作项类型的工作流

引用名称=System.State
数据类型=字符串

全部

状态更改日期

“状态”字段的值变更的日期和时间。

引用名称=Microsoft.VSTS.Common.StateChangeDate
数据类型=日期时间

全部

注意

  1. 请参阅日期和标识字段
  2. 默认情况下,服务器将系统定义的人员名称或基于标识的字段与 Active Directory 或 Microsoft Entra ID 同步。 这些字段包括:“激活者”、“分配给”、“关闭者”、“创建者”和“解决者”。 可以通过添加在 Active Directory 或 Microsoft Entra ID 中创建的安全组,或者将帐户添加到从集合设置“安全性”页定义的现有组或自定义组来授予对项目的访问权限。 请参阅设置 Active Directory 或 Microsoft Entra ID
  3. 请参阅“激活者”/“激活日期”和“解决者”/“解决日期”字段
  4. “要求类别”适用于产品积压工作和看板中显示的所有工作项类型,并且可能包括基于在版块和积压工作 (backlog) 上显示 Bug 的团队设置添加到 Bug 类别的类型。 有关工作项类型类别的详细信息,请参阅使用类别对工作项类型进行分组

注意

即使将与板相关的字段(如“板栏”或“板通道”)添加到工作项窗体,也无法从窗体中修改该字段。

  1. 请参阅日期和标识字段

  2. 默认情况下,服务器将系统定义的人员名称或基于标识的字段与 Active Directory 或 Microsoft Entra ID 同步。 这些字段包括:“激活”、“分配给”、“关闭者”、“创建者”和“解决者”。 可以通过添加在 Active Directory 或 Microsoft Entra ID 中创建的安全组,或者将帐户添加到从集合设置“安全性”页定义的现有组或自定义组来授予对项目的访问权限。 请参阅设置 Active Directory 或 Microsoft Entra ID

    对于本地部署,可通过使用 witadmin changefields 命令行工具来启用或禁用人名字段的同步。 还可通过指定 syncnamechanges 属性来同步自定义人名字段。 请参阅管理工作项字段FIELD(定义)元素引用

  3. 属性设置为 Dimension 的可报告字段。 仅当集合配置为支持本地 XML 模型时有效。 可报告数据导出到数据仓库,并且可以包含在 Excel 或 SQL Server 报表中。 对于本地 Azure DevOps,请使用 witadmin changefield 命令更改字段的可报告属性。

  4. 已编制索引的字段。 为字段启用索引可在查找在查询中指定了该字段的工作项时提高性能。 对于本地 Azure DevOps,请使用 witadmin indexfield 命令更改字段的索引属性。

  5. 要求类别适用于产品积压工作和看板中显示的所有工作项类型。 类别包括根据在版块和积压工作 (backlog) 上显示 Bug 的团队设置添加到 Bug 类别的那些项。 有关工作项类型类别的详细信息,请参阅使用类别对工作项类型进行分组

注意

即使将与板相关的字段(如“板栏”或“板通道”)添加到工作项窗体,也无法从窗体中修改该字段。

人员选取器

人员选取器功能支持“分配给”字段。 例如,从工作项窗体中选择“分配给”字段时,将激活人员选取器。 如下图所示,只需开始输入要选择的用户名,然后进行搜索,直到找到匹配项。 之前选择的用户会自动显示在列表中。 若要选择之前未选择的用户,请输入其全名或针对完整目录进行搜索。

讨论中Screenshot of the <span class=@提及工具的屏幕截图,其中显示了人员选取器。" />

对于使用 Microsoft Entra ID 或 Active Directory 管理其用户和组的组织,人员选取器支持搜索添加到 AD 中的所有用户和组,而不仅仅是添加到项目中的用户和组。

若要将可供选择的标识范围限制为仅添加到项目的那些用户,可以使用“项目范围用户”组执行此操作。 有关详细信息,请参阅管理组织、限制标识搜索和选择

日期和标识字段

根据工作流状态或转换设置多个日期和标识字段。 某些字段(如“创建者”和“创建日期”)是在添加工作项时由系统设置的。 有些字段(如“关闭日期”和“关闭者”)是通过工作项类型的工作流定义设置的。 此外,自定义的工作项类型可能还定义了影响日期和标识字段分配的其他规则。

日期和时间模式

为“日期/时间”字段输入的日期和时间模式应与通过配置文件选择的日期和时间模式匹配。 若要查看或更改选择,请参阅设置用户首选项、时间和区域设置

Time and Locale page, Date pattern optionsTime and Locale page, Time pattern options

Time and Locale page, Date pattern options

状态更改

下面的 XML 语法示例演示了可以为控制选择字段值的工作项类型定义的规则。 此处,当“状态”值设置为“新”时,“解决日期”、“解决者”、“关闭日期”、“关闭日期”、“激活日期”和“激活者”字段设置为 EMPTY。 首先计算“状态”值分配,然后计算转换分配。

   <WORKFLOW>
      <STATES>
        <STATE value="New">
          <FIELDS>
            <FIELD refname="Microsoft.VSTS.Common.ResolvedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ResolvedBy">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ResolvedReason">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedBy">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
              <EMPTY />
            </FIELD>
          </FIELDS>
        </STATE>
        <STATE value="Active">
          <FIELDS>
            <FIELD refname="Microsoft.VSTS.Common.ResolvedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ResolvedBy">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ResolvedReason">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedBy">
              <EMPTY />
            </FIELD>
          </FIELDS>
        </STATE>
        <STATE value="Resolved">
          <FIELDS>
            <FIELD refname="Microsoft.VSTS.Common.ClosedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedBy">
              <EMPTY />
            </FIELD>
          </FIELDS>
        </STATE>
        <STATE value="Closed" />
      </STATES>

“激活者”和“激活日期”转换分配

当 Bug 工作项发生以下转换时,会对“激活者”和“激活日期”字段进行以下分配:

<TRANSITION from="" to="New">
<TRANSITION from="New" to="Active">
<TRANSITION from="New" to="Resolved">
<TRANSITION from="New" to="Closed">
<TRANSITION from="Resolved" to="Active">
<TRANSITION from="Closed" to="Active">
<FIELDS>
   <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
       <COPY from="currentuser" />
           <VALIDUSER />
           <REQUIRED />
    </FIELD>
    <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
        <SERVERDEFAULT from="clock" />
   </FIELD>
</FIELDS>

当 Bug 工作项发生以下转换时:

<TRANSITION from="Active" to="New">
<TRANSITION from="Active" to="Closed">
<TRANSITION from="Resolved" to="Closed">

然后,“激活者”和“激活日期”字段设置为 READONLY

<FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
   <READONLY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
   <READONLY />
</FIELD>

“激活者”/“激活日期”和“解决者”/“解决日期”字段

当基于相应的工作流类别状态发生更改时,系统会更新这些字段:“激活者”、“激活日期”、“解决者”和“解决日期”。 当工作流状态更改为“正在进行”状态类别时,将更新“激活者”和“激活日期”。 当工作流状态更改为“已解决”状态类别时,将更新“解决者”和“解决日期”。

若要详细了解工作流状态如何映射到状态类别,请参阅如何在积压工作和面板中使用工作流状态和状态类别

注意

管理此处所述字段的逻辑适用于 Azure DevOps Services、Azure DevOps Server 2020.1 更新更高版本。

由于这些字段引用工作流状态类别,因此在更新字段时会引用你添加的自定义工作流状态。 若要了解有关自定义的详细信息,请参阅自定义流程的工作流

其他说明:

  • 只要工作项从正在设置的类别状态之外的类别状态移动,字段就会更新。 例如,如果将工作项从“新”更新为“已修复”,则会更新“解决者”/“解决日期”字段。 但是,如果从“已修复”和“已准备好进行测试”进行更新(它们处于同一类别状态),则不会更新“解决者”/“解决日期”字段。
  • 当你向后转换(例如从“已解决”状态转换为“活动”状态)时,系统会清除“解决者”/“解决日期”字段的值。 如果从“活动”更改为“新”,系统会清除“激活者”/“激活日期”字段的值。
  • 请勿手动更改这些字段的值。 它们是受系统规则约束的系统字段。 你尝试设置的任何值都将被覆盖。

REST API

若要以编程方式与查询交互,请参阅以下 REST API 资源之一: