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

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

工作流中的状态支持跟踪工作状态,因为它从新状态移动到关闭或完成状态。 看板查询字段支持跟踪工作状态,因为它从一列或泳道移动到看板上的另一列。

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

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

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

Query Editor filter for reactivated items

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

提示

并非所有字段都对所有 WIT 有效。 跳转到 工作流和看板查询字段 ,获取可在查询中包含的字段集及其适用的 WIT。

如果不熟悉如何创建查询,请参阅 “使用查询编辑器”列出和管理查询

支持的运算符和宏

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


Data type

支持的运算符和宏


布尔值1

= 、、 <> =[Field] 、 <>[Field]


DateTime

= 、、 <> 、 <> 、 >= <、=[Field]、<>[Field]、>[Field]<、[Field]、>=[Field]、=[Field]、<In、Not in、Ever
:具有任何 DateTime 字段 的@Today@Today +/- n 有效


标识

= 、 、 <> , <>> , = <, =[Field], <>[Field], >[Field]<, >=[Field], <=[Field], Contains, Not contains, not contains, not contain, in, not in, in, not in, not in, in, not in group, ever
@me 对所有标识字段有效


单文本 (字符串) 2

= 、 、 <> , <>> , = <, =[Field], <>[Field], >[Field]<, >=[Field], <=[Field], Contains, Not contains, not contains, not contain, in, not in, in, not in, not in, in, not in group, ever


注意

  1. TFS 2017 及更高版本支持 布尔 数据类型字段。
  2. Was Ever 运算符目前仅对Azure DevOps Services看板列有效。

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

基于标识的查询

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

用于 = 查找当前分配, “曾经” 基于过去的分配列出项,并 @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 = _

团队或组成员身份查询

若要筛选分配给属于团队或安全组的人员的项目,请使用 In Group 操作员。

Filter based on assignment to a TFS security group

可以使用 In GroupNot In Group 运算符根据组成员或不是组成员的多个值筛选查询。 可以指定组的示例包括以下项:

  • Teams
  • 内置和自定义安全组
  • Azure Active Directory和 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 to query on State Change Date and State fields

查询对看板的更改

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

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

Query filter on Kanban board 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
数据类型=DateTime

全部

分配到 2

分配到 2、3、4

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

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

全部

板列

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

引用名称=System.BoardColumn
数据类型=String

要求类别 4

要求类别 5

完成板列

工作项的当前工作分配 (False) 或完成 (True) 看板列。 仅当为看板 列启用拆分列 时分配。

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

要求类别 4

要求类别 5

板巷

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

要求类别 4

要求类别 5

关闭 1, 2

关闭 1、2、3

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

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

全部

关闭日期

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

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

全部

创建者 :1、2

创建者 :1、2、3

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

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

全部

创建日期

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

引用名称=System.CreatedDate
数据类型=DateTime

全部

原因

原因 3, 4

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

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

引用名称=System.Reason
数据类型=String

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

已解决 1、2

已由 1、2、3 解决

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

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

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

全部

解决日期

已解决日期 1、2

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

将工作项移动到 “已解决 ”或“完成”工作流状态的日期和时间。

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

全部

解决原因

已解决的原因 3

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

引用名称=Microsoft.VSTS.Common.ResolvedReason
数据类型=String

所有 (敏捷、CMMI)

审阅者

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

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

代码评审响应

状态

状态 3、4

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

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

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

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

引用名称=System.State
数据类型=String

全部

状态更改日期

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

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

全部

注意

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

注意

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

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

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

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

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

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

  5. 要求类别适用于产品积压工作和看板中显示的所有工作项类型。 该类别包括基于 板上显示 bug 和积压工作的团队设置添加到 Bug 类别的项目。 有关工作项类型类别的详细信息,请参阅 使用类别对工作项类型进行分组

注意

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

人员选取器

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

Screenshot of people picker

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

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

日期和标识字段

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

状态更改

以下 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>

“已激活依据/日期”和“解析依据/日期”字段

系统根据相应的工作流类别状态发生更改时更新这些字段:“已激活的日期”、“ 已激活日期”、“ 已解析日期”和“ 已解析日期”。 当工作流状态更改为 “建议 ”状态类别时, 将更新“已激活依据 ”和 “激活日期 ”。 当工作流状态更改为 “已解决 ”状态类别时,将更新 “已解析依据 ”和 “已解析日期 ”。

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

注意

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

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

其他说明:

  • 每当工作项从设置以外的任何类别状态移动时,字段都会得到更新。 例如,如果将工作项从 “新建 ”更新为 “已修复”,则更新 “已解析的日期 ”字段。 但是,如果从 “固定 ”和 “准备测试”进行更新(处于相同类别状态),则不会更新 “已解析依据/已解析日期 ”字段。
  • 在向后转换(例如从 “已解析” 状态切换为 “活动 ”状态)时,系统会清除 “解析依据/解析日期 ”字段的值。 如果从 “活动 ”到 “新建”,系统会清除 “已激活的按/已激活日期” 字段的值。
  • 请勿手动更改这些字段的值。 它们是受系统规则控制的系统字段。 尝试设置的任何值都将超过写入。

REST API

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