更改工作项类型的工作流

您可以通过导出 XML 文件并修改其内容来更改工作项类型的工作流。 修改了工作流之后,可以立即导入 XML 文件以开始使用更新的工作项类型。

所需权限

若要执行此过程,您必须是**“Team Foundation Administrators (Team Foundation 管理员)”组的成员或项目的“Project Administrators (项目管理员)”**组的成员。 有关更多信息,请参见 Team Foundation Server 权限

更改工作流

  1. 如果要修改单个项目上的工作项类型,请运行 witadmin exportwitd 以导出要修改的工作项类型的 XML 文件。 有关更多信息,请参见自定义和管理工作项类型 [witadmin]

  2. 在 Visual Studio 中,单击**“文件”,单击“打开”,再单击“文件”**。

    将显示**“打开文件”**对话框。

  3. 在**“查找范围”**之下,移动到您导出该文件的位置。

    如果要修改工作项类型以自定义过程模板,则请移动到下载该过程模板的位置。

    提示

    如果您运行的是 Windows Vista,则可能无权访问某些文件夹。 如果您尝试将工作项类型导出到您无权访问的位置,则注册表虚拟化技术将自动重定向导出的文件,并将其保存到虚拟存储区。 若要避免此重定向操作,可以将该文件导出到您有权访问的位置。 有关注册表虚拟化的更多信息,请参见 Microsoft 网站上的下列网页:Registry Virtualization(注册表虚拟化)和 Windows Vista 中常见的文件和注册表虚拟化问题

  4. 选择要更新的工作项类型 XML 文件,然后单击**“打开”。 出现有关行尾的提示时,单击“否”**。

  5. 在该 XML 文件的 <WORKFLOW> 部分中,找到工作项类型的工作流定义,如下面的 XML 所示:

    <WORKFLOW>
      <STATES>
        <STATE value="Active">
          <FIELDS>
            <FIELD refname="Microsoft.VSTS.Common.ClosedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedBy">
    ...
    
  6. 通过插入另一个 <STATE> 元素,向该类型定义添加一个 Unapproved 状态。 新状态突出显示,如下例所示:

    <WORKFLOW>
      <STATES>
        <STATE value="Unapproved">
        </STATE>
        <STATE value="Active">
          <FIELDS>
            <FIELD refname="Microsoft.VSTS.Common.ClosedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedBy">
    ...
    
  7. 创建 null 状态与 Unapproved 状态之间的转换。 为此,请首先找到工作流定义中针对转换的部分。 然后,插入下例中突出显示的以下 XML。

    提示

    由于此更改,该类型的所有新工作项将从 Unapproved 状态开始,并且默认原因为“New”(新建)。

    <TRANSITIONS>
      <TRANSITION from="" to="Unapproved">
        <REASONS>
          <DEFAULTREASON value="New" />
        </REASONS>
      </TRANSITION>
      <TRANSITION from="" to="Active">
        <REASONS>
          <DEFAULTREASON value="New" />
        </REASONS>
        <FIELDS>
          <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
            <COPY from="currentuser" />
          </FIELD>
          <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
            <COPY from="clock" />
          </FIELD>
          <FIELD refname="System.AssignedTo">
            <COPY from="currentuser" />
          </FIELD>
        </FIELDS>
      </TRANSITION>
    
  8. 删除在以下 XML 中突出显示的到 Active 的转换。

    这样做是因为只能存在一个起始转换。

    <TRANSITIONS>
      <TRANSITION from="" to="Unapproved">
        <REASONS>
          <DEFAULTREASON value="New" />
        </REASONS>
      </TRANSITION>
      <TRANSITION from="" to="Active">
        <REASONS>
          <DEFAULTREASON value="New" />
        </REASONS>
        <FIELDS>
          <FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
            <COPY from="currentuser" />
          </FIELD>
          <FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
            <COPY from="clock" />
          </FIELD>
          <FIELD refname="System.AssignedTo">
            <COPY from="currentuser" />
          </FIELD>
        </FIELDS>
      </TRANSITION>
    
  9. 通过插入下例中突出显示的 XML,为起始转换添加一个“Ported”(移植)原因。 这样可以让用户知道该工作项是新的还是从另一个跟踪系统移植过来的。

    <TRANSITIONS>
      <TRANSITION from="" to="Unapproved">
        <REASONS>
          <DEFAULTREASON value="New" />
         <REASON value="Ported" />
        </REASONS>
      </TRANSITION>
    ...
    
  10. 插入下例中突出显示的以下 COPY 规则。 此规则将**“指派给”**字段默认设置为创建该工作项的用户,并且只在起始转换期间进行评估。

    <TRANSITIONS>
      <TRANSITION from="" to="Unapproved">
        <REASONS>
          <DEFAULTREASON value="New" />
         <REASON value="Ported" />
        </REASONS>
        <FIELDS>
           <FIELD refname="System.AssignedTo">
             <COPY from="currentuser" />
           </FIELD>
        </FIELDS>
      </TRANSITION>
    ...
    

    提示

    在其他 <TRANSITION> 或 <STATE> 元素下面插入此规则会将此规则的作用范围限定于其他转换或状态。 有关更多信息,请参见如何计算规则

  11. 通过插入下面的 XML,创建一个从 Unapproved 状态到 Active 状态的转换。如下面的示例中突出显示的部分。 由于此更改,当工作项被批准时,它可以执行此转换。

    <TRANSITIONS>
      <TRANSITION from="" to="Unapproved">
        <REASONS>
          <DEFAULTREASON value="New" />
         <REASON value="Ported" />
        </REASONS>
        <FIELDS>
           <FIELD refname="System.AssignedTo">
             <COPY from="currentuser" />
           </FIELD>
        </FIELDS>
      </TRANSITION>
      <TRANSITION from="Unapproved" to="Active">
        <REASONS>
          <DEFAULTREASON value="Approved" />
        </REASONS>
      </TRANSITION>
      <TRANSITION from="Active" to="Closed">
        <REASONS>
          <DEFAULTREASON value="Completed" />
          <REASON value="Deferred" />
          <REASON value="Obsolete" />
          <REASON value="Cut" />
        </REASONS>
    ...
    
  12. 在工具栏上单击**“保存”**以将更改保存到 XML 文件中。

  13. 若要将新工作项类型导入单个项目中,请参见自定义和管理工作项类型 [witadmin]。 若要将工作项类型添加到过程模板中,请参见向过程模板添加工作项的类型定义

验证导入到单个项目中的更改

  1. 在团队资源管理器中单击**“刷新”**,从服务器下载最新的更新。

    这些更新包括您刚导入的更改。 请等待几秒钟,直到加载了“工作项”节点。 正在加载中的节点显示**“正在工作”**。

  2. 使用所修改的工作项类型创建新工作项。 为完成此任务,请右击**“工作项”节点,指向“添加工作项”**,然后单击该工作项类型。

    此工作项是从您已更改并导入的工作项类型创建的。

  3. 请注意,初始**“状态”现在为“Unapproved”,并且“原因”“New”。 此外,“指派给”值是您的帐户名称。 单击“原因”字段可看到一个列表,其中列出了原因“New”“Ported”**。

  4. 在**“标题”字段中,键入标题,然后单击“保存”保存该工作项。 等待保存操作完成(由状态栏上的“项已保存”**指示)。

  5. 在**“状态”字段中,选择“Active”值以批准该工作项并再次转换它。 请注意,“原因”字段是“Approved”**。

  6. 在工具栏中,单击**“保存”**以保存此转换。

  7. 单击**“关闭”**以关闭该工作项。

请参见

概念

设计工作流

限制状态转换

应用字段规则的时间和位置

其他资源

基于状态、转换或原因自动进行字段赋值