按分配或工作流更改查询

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

有效跟踪工作项目中的任务和工作流更改对于保持项目可见性和确保顺利进行至关重要。 本文指南介绍如何创建用于监视这些更改的查询,从而更好地管理和监督团队的工作。

在工作流中跟踪工作状态

  • 工作流状态:当工作项从全新活动建议转为完成关闭时跟踪工作项的进度。 每个工作流包括:

    • 状态
    • 有效转换
    • 转换的原因

    工作流状态和原因因工作项类型和项目过程而异。

  • 状态转换和重新分配:

    • 可以在状态转换期间重新分配工作项。
    • 示例: 测试人员创建 bug 并将其分配给团队成员进行分类。 解决后,bug 将重新分配给测试人员。

查询重新激活的工作项

使用 更改日期 字段识别曾关闭但后来重新激活的工作项。 关注已发生的重新激活:

  • Today
  • 昨天
  • 在上周

重新激活项的查询编辑器筛选器。

你还可以使用以下字段:

  • 激活者
  • 激活日期
  • 其他与工作流相关的字段

提示

并非所有字段对每个工作项类型都有效。 请参阅工作流和查询字段,查看哪些字段适用于你的查询和工作项类型。

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

先决条件

类别 要求
访问权限级别 - 若要查看和运行共享查询:项目成员
- 添加和保存共享查询:需至少 基本 访问权限。
权限 对于要添加查询的文件夹,请将参与权限设置为允许。 默认情况下,“参与者”组没有此权限。

注意

在公共项目中,利益干系人 访问权限的用户对查询功能具有与 基本 访问权限的用户相同的完全访问权限。 有关详细信息,请参阅利益干系人访问快速参考

类别 要求
访问权限级别 - 若要查看和运行共享查询:项目成员
- 若要添加并保存共享查询:至少具有基本访问权限
权限 对于要添加查询的文件夹,请将参与权限设置为允许。 默认情况下,“参与者”组没有此权限。

支持的运算符和宏

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


数据类型

支持的运算符和宏


布尔值 1

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


日期时间

= , <> , > , < , >= , <= , =[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 运算符筛选属于或不属于类别组或安全组的项。 有关详细信息,请参阅查询字段、运算符和宏

日期和时间模式

您为 DateTime 字段输入的日期和时间模式应与您在配置文件中选择的模式相匹配。 要查看或更改选择,请参阅设置用户首选项

显示“时间和区域设置”窗格上的“日期模式”下拉列表选项的屏幕截图。显示“时间和区域设置”窗格上的“时间模式”下拉列表选项的屏幕截图。

显示“时间和地区”窗格的屏幕截图,其中包含“日期模式”和“时间模式”字段。

基于标识的查询

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

使用 = 查找当前分配、使用 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 = _


团队或组成员身份查询

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

查询编辑器的屏幕截图,基于安全组的分配进行筛选。

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

  • 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


查询工作项状态的更改

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

查询编辑器的屏幕截图,筛选状态更改日期和状态字段。

查询面板的更改

使用查询字段(板栏板栏已完成板通道),可以根据工作项在面板上的流状态列出工作项。 此外,还可以从这些查询创建状态或趋势图表

可以按团队区域路径、特定自定义列和泳道筛选项目。 如果重命名列或泳道,请相应地更新查询筛选器。 有关更多想法,请参阅此博客文章:新字段为查询带来了好处及更多内容

查询编辑器的屏幕截图,筛选面板“板栏”和“板栏通道”字段。

注意

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

筛选出

包括这些查询子句


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

Work Item Type = User Story
AndBoard Column = Code
AndBoard 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

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

引用名称=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
数据类型=字符串(标识)

代码评审响应

State

状态 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. “要求类别”适用于产品积压工作和面板中显示的所有工作项类型,并且可能包括基于在版块和积压工作上显示 Bug 的团队设置添加到 Bug 类别的类型。 有关工作项类型类别的详细信息,请参阅使用类别对工作项类型进行分组

注意

即使向工作项表单中添加与看板相关的字段(如“看板列”或“看板通道”),也不能从表单中修改该字段。

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

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

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

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

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

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

注意

即使向工作项窗体添加与看板相关的字段(例如 看板列看板通道),也无法从窗体中修改这些字段。

人员选取器

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

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

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

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

日期和标识字段

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

日期和时间模式

您为 DateTime 字段输入的日期和时间模式应与您在配置文件中选择的模式相匹配。 要查看或更改选择,请参阅设置用户首选项

显示“时间和区域设置”窗格上的“日期模式”下拉列表选项的屏幕截图。显示“时间和区域设置”窗格上的“时间模式”下拉列表选项的屏幕截图。

显示“时间和地区”窗格的屏幕截图,其中包含“日期模式”和“时间模式”字段。

状态更改

下面的 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 资源之一: