演练:对工作项类型进行基本自定义

更新:2007 年 11 月

在本演练中,您将以最常见的方式自定义现有工作项类型。您将了解用于自定义工作项类型的工具和定义这些类型的 XML 语言。

下列过程对这些自定义进行了阐释:

  • 创建团队项目   在此过程中,您创建一个包含将在后续过程中使用的工作项类型的团队项目。

  • 查看工作项类型   在此过程中,您显示一个现有工作项类型的表单。

  • 导出工作项   在此过程中,您将工作项类型的定义导出到一个 XML 文件中。

  • 重命名类型   在此过程中,您更改包含工作项类型定义的 XML 文件,将工作项类型的名称从“Task(任务)改为“Special Task”(特殊任务)。

  • 导入更改   在此过程中,您将在前一个过程中更改的工作项类型导入 Team Foundation Server。

  • 添加字段   在此过程中,您将名为“Category”(类别)的新字段添加到一个现有工作项类型。

  • 向字段添加规则   在此过程中,您添加一个规则使新的“Category”字段成为必选字段。

  • 创建选取列表   在此过程中,您将添加“Category”字段的允许值列表。新的值将作为从工作项类型创建的工作项中的选项出现。

  • 更改工作流   在此过程中,您向工作项类型添加新的状态和转换。

  • 更改表单布局   在此过程中,您更改工作项表单上的字段位置。

先决条件

为了完成这些演练中的步骤,您需要:

Visual Studio Team System 的一个副本,或已安装团队资源管理器并具有 Team Foundation Server 连接的 Visual Studio 副本。有关更多信息,请参见如何:连接到 Team Foundation Server

如果您可以建立与 Team Foundation Server 的连接,并且拥有适当的权限,就可以通过命令提示窗口、批处理文件或脚本文件对工作项类型进行基本的自定义。为此,您必须使用“Visual Studio 2008 命令提示”实用工具,或者通过使用下面的示例中所述的 vsvars32 在您当前的命令提示中设置多个环境变量。有关加入团队项目的更多信息,请参见演练:加入团队项目

在命令提示下启用 Team Foundation 命令

  • 单击“开始”,单击“所有程序”,指向“Microsoft Visual Studio 2008”,指向“Visual Studio Tools”,然后单击“Visual Studio 2008 命令提示”。

或者,运行 Visual Studio 安装路径(通常为驱动器号:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools)中的 vsvars32

必需的权限

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

创建团队项目

创建团队项目

  1. 启动 Visual Studio。

  2. 通过单击“视图”然后单击“团队资源管理器”,打开团队资源管理器。

  3. 在团队资源管理器中,右击您连接到的 Team Foundation Server 的名称,然后单击“新建团队项目”。

  4. 在“在 <Team Foundation Server 名称> 上新建团队项目”对话框中,在“团队项目的名称是什么?”下面,键入 WITLab,然后单击“下一步”。

  5. 在“选择过程模板”页上,在“应使用哪个过程模板来创建团队项目?”下面,单击“MSF for Agile Software Development - <版本号>”,然后单击“完成”。

    创建团队项目可能需要几分钟时间。

  6. 当“已创建团队项目”页显示时,清除“启动过程指南”框,然后单击“关闭”。

    这样,就创建了名为“WITLab”的新团队项目,它在团队资源管理器中显示在您的 Team Foundation Server 下面的节点中。

查看工作项类型

前提条件:您已经完成了创建团队项目。“WITLab”团队项目已经可用。

查看工作项类型

  1. 启动 Visual Studio 并打开团队资源管理器。

  2. 在团队资源管理器中,展开 WITLab 团队项目,并等待几秒钟以便加载其文件夹。

  3. 在团队项目中,右击“工作项”节点,指向“添加工作项”,然后单击“Task”。

    随即显示一个表示新的“Task”工作项的表单。该表单的有些字段包含默认值。在本演练中,您将自定义从中创建此工作项的“Task”工作项类型。

导出工作项类型

前提条件:您已经完成了创建团队项目。“WITLab”团队项目已经可用。

导出工作项类型

  1. 打开一个 Visual Studio 命令提示窗口。

  2. 在命令提示符下,键入以下命令然后按 Enter:

    witexport /f "文件路径\task.xml" /t "Team Foundation Server 名称" /p WITLab /n Task

    这会将“Task”工作项类型从 Team Foundation Server 导出到一个 XML 文件。导出操作完成时会显示以下消息:

    Work item type export complete.

  3. (可选)要查看“Task”(任务)工作项类型的 XML 定义,请在命令提示符下键入 task.xml 然后按 Enter。

重命名类型

前提条件:您已经完成了导出工作项类型过程。

重命名类型

  1. 在 Visual Studio 中,单击“文件”,然后单击“打开文件”。

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

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

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

    说明:

    如果您运行的是 Windows Vista,则可能无权访问某些文件夹。如果您尝试将工作项类型导出到您无权访问的位置,则注册表虚拟化技术将自动重定向导出的文件,并将其保存到虚拟存储区。有关更多信息,请参见 https://go.microsoft.com/fwlink/?LinkId=92325https://go.microsoft.com/fwlink/?LinkId=92323。若要避免此重定向操作,可以将该文件导出到您有权访问的位置。

  3. 单击 task.xml 文件,然后单击“打开”。出现有关行尾的提示时,单击“否”。

    这将打开 task.xml,即包含“Task”工作项类型的定义的 XML 文件。

  4. 定位到 XML 文件中的以下元素。

    <WORKITEMTYPE name="Task">
    
  5. 将 name 属性的值更改为 Special Task。

    <WORKITEMTYPE name="Special Task">
    
  6. 将更改保存到新的 XML 文件。为此,请在 Visual Studio 的“文件”菜单上,单击“另存 task.xml 为”。

    随即出现“另存文件为”对话框。

  7. 对于“文件名”,请键入 specialtask.xml,然后单击“保存”。

导入更改

前提条件:您已经完成了重命名类型过程。

导入更改

  1. 打开一个 Visual Studio 命令提示窗口。

  2. 将更改后的工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示符处键入以下命令,然后按 Enter:

    witimport /f "文件路径\specialtask.xml" /t "Team Foundation Server 名称" /p WITLab

    这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

    Work item type import complete.

  3. 选择团队项目,然后在“视图”菜单上单击“刷新”,从服务器下载最新的更新。

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

  4. 新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

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

添加字段

前提条件:您已经完成了重命名类型过程。

添加字段

  1. 打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“SpecialTask.xml”的选项卡。

  2. 找到 XML 文件的以下部分。

    <FIELDS>
    
  3. 通过键入下面以粗体文本显示的 XML,创建一个名为“Category”的新字符串字段和用于工具提示的帮助文本。

    <FIELDS>
    <FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String">    <HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT></FIELD>
    
    说明:

    “引用名称”(或 refname)是字段的编程名称。所有其他规则都应该引用此 refname。有关更多信息,请参见字段引用名

  4. 找到 XML 文件中描述工作项表单的部分。

    <FORM>
    
  5. 找到 <FORM> 部分中的下列行。

    <Group Label="Classification">
      <Column PercentWidth="100">
        <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />
        <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />
      </Column>
    </Group>
    
  6. 通过键入下面以粗体文本显示的 XML,插入一个新控件以显示“Category”字段:

    <Group Label="Classification">
      <Column PercentWidth="100">
        <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />
        <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />
        <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />  </Column>
    </Group>
    
  7. 在“文件”菜单上单击“保存”,将更改保存到 XML 文件中。

  8. 将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示符处键入以下命令,然后按 Enter:

    witimport /f "文件路径\specialtask.xml" /t "Team Foundation Server 名称" /p WITLab

    注意   通过在命令行中按向上键这种快捷方式,可以显示输入的上一条命令。

    这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

    Work item type import complete.

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

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

  10. 新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

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

    请注意表单上新的“Category”字段。将鼠标指针移到该字段的标签上方以查看工具提示。

  11. 单击“关闭”关闭新的“Special Task”。提示您保存工作项时,请单击“否”。

向字段添加规则

前提条件:您已经完成了添加字段过程。

向字段添加规则

  1. 打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

  2. 找到 XML 文件的 <FIELDS> 部分,接着在该部分找到“Category”字段。

  3. 通过将以下规则添加到该 XML 文件,使“Category”成为必选字段。该规则以粗体文本显示。

    <FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String" reportable="dimension">
    <HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT>
    <REQUIRED />
    </FIELD>
    
  4. 在“文件”菜单上单击“保存”,将更改保存到 XML 文件中。

  5. 将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示符处键入以下命令,然后按 Enter:

    witimport /f "文件路径\specialtask.xml" /t "Team Foundation Server 名称" /p WITLab

    这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

    Work item type import complete.

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

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

  7. 新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

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

    请注意“Category”字段现在已突出显示。这指示它是必选字段。

  8. 选择“Special Task”工作项上的“标题”字段并键入“示例任务”。

  9. 在工具栏上,单击“保存”以保存该工作项。

    此时将显示一个错误对话框,指出“Category”字段不能为空。单击“确定”关闭对话框。

  10. 在“Special Task”上的“Category”字段中,键入“A 类别”。

  11. 单击“保存”以保存该工作项。

    请注意,该工作项现在可以保存了。

  12. 单击“关闭”关闭新的“Special Task”。

创建选取列表

前提条件:您已经完成了向字段添加规则过程。

创建选取列表

  1. 打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

  2. 找到 XML 文件的 <FIELDS> 部分,接着在该部分找到“Category”字段。

  3. 通过插入一个 ALLOWEDVALUES 规则来添加“Category”字段的允许值列表。新规则在下面的 XML 中以粗体文本显示。

    <FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String" reportable="dimension">
    <HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT>
    <REQUIRED />
    <ALLOWEDVALUES>
        <LISTITEM value="Process Management" />
        <LISTITEM value="Planning" />
        <LISTITEM value="Execution" />
        <LISTITEM value="Review" /></ALLOWEDVALUES>
    </FIELD>
    
  4. 通过删除以粗体文本显示的 REQUIRED 规则,使“Category”成为可选字段。

    <FIELD name="Category" refname="MyCompany.MyProcess.Category" type="String" reportable="dimension">
    <HELPTEXT>Describes the category to which this special task belongs.</HELPTEXT>
    <REQUIRED />
    <ALLOWEDVALUES>
        <LISTITEM value="Process Management" />
        <LISTITEM value="Planning" />
        <LISTITEM value="Execution" />
        <LISTITEM value="Review" />
    </ALLOWEDVALUES>
    </FIELD>
    
  5. 单击“保存”将更改保存到该 XML 文件。

  6. 将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示符处键入以下命令,然后按 Enter:

    witimport /f "文件路径\specialtask.xml" /t "Team Foundation Server 名称" /p WITLab

    这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

    Work item type import complete.

  7. 在 Visual Studio 的团队资源管理器窗口中,单击“刷新”从服务器下载最新的更新。

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

  8. 新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

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

  9. 单击“Category”字段的列表框。

    请注意,该字段现在只支持由 ALLOWEDVALUES 规则指定的值。

    说明:

    下拉列表中的允许值始终按字母顺序出现,与 XML 文件中的 LISTITEM 元素的顺序无关。

  10. 单击“关闭”关闭新的“Special Task”。提示您保存工作项时,请单击“否”。

更改工作流

前提条件:您已经完成了创建选取列表过程。

更改工作流

  1. 打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

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

    <WORKFLOW>
      <STATES>
        <STATE value="Active">
          <FIELDS>
            <FIELD refname="Microsoft.VSTS.Common.ClosedDate">
              <EMPTY />
            </FIELD>
            <FIELD refname="Microsoft.VSTS.Common.ClosedBy">
    ...
    

    请注意,其中只定义了两个状态,即 Active 和 Closed。其中还定义了这两个状态之间的转换,以及一个从 null 状态开始的起始转换,null 状态在首次创建工作项后使用。

  3. 通过插入另一个 <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">
    ...
    
  4. 创建 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>
    
  5. 删除到 Active 的转换(在下面的 XML 中以粗体文本显示)。这样做是因为只能存在一个起始转换,并且您希望使用名为“Ported”的起始转换,下一步将对该转换进行定义。

    <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>
    
  6. 通过插入下面以粗体文本显示的 XML,为起始转换添加一个“Ported”(移植)原因。这样用户便可知道该工作项是新的还是从另一个跟踪系统移植过来的。

    <TRANSITIONS>
      <TRANSITION from="" to="Unapproved">
        <REASONS>
          <DEFAULTREASON value="New" />
         <REASON value="Ported" />    </REASONS>
      </TRANSITION>
    ...
    
  7. 插入下面以粗体文本显示的 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> 元素下面插入此规则会将此规则的作用范围限定为其他转换或状态。

  8. 通过插入下面以粗体文本显示的 XML,创建一个从 Unapproved 状态到 Active 状态的转换。由于此更改,当某个“Special Task”被批准时,它可以执行此转换。

    <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>
    ...
    
  9. 单击“保存”将更改保存到该 XML 文件。

  10. 将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示符处键入以下命令,然后按 Enter:

    witimport /f "文件路径\specialtask.xml" /t "Team Foundation Server 名称" /p WITLab

    这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

    Work item type import complete.

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

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

  12. 新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

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

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

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

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

  16. 单击“保存”保存此转换。

  17. 单击“关闭”关闭该“Special Task”。

更改表单布局

前提条件:您已经完成了更改工作流过程。

更改表单布局

  1. 打开包含“Special Task”工作项类型定义的文件。为此,请在 Visual Studio 中单击标记为“specialtask.xml”的选项卡。

  2. 找到该 XML 文件的 <TabGroup> 部分。注意,该部分有用于“Links”(链接)和“File Attachments”(文件附件)的 <Tab> 元素,其中每个 <Tab> 元素包含一个呈现各自控件的 <Control> 元素。

    <Tab Label="Links">
      <Control Type="LinksControl" />
    </Tab>
    <Tab Label="File Attachments">
      <Control Type="AttachmentsControl" />
    </Tab>
    
  3. 通过用下面的新 XML 替换上一步骤所示的 XML,将两个 <Tab> 元素合并为一个同时包含两个控件的“Links and Attachments”(链接和附件)<Tab> 元素。

    <Tab Label="Links and Attachments">
      <Control Type="LinksControl" Label="Links" LabelPosition="Top" />
      <Control Type="AttachmentsControl" Label="Attachments" LabelPosition="Top" />
    </Tab>
    
  4. 找到 <FORM> 的 <Layout> 定义中描述“Classification”(分类)和“Status”(状态)组的部分。

    <Group Label="Classification">
      <Column PercentWidth="100">
        <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />
        <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />
        <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />
      </Column>
    </Group>
    
    说明:

    为获得最佳结果,每个 Control(控件)或 Group(组)应显示在一个 Column(列)中,即使该 Column 跨越整个表单宽度也应如此。相应地,每个 Column 应该显示在一个 Group 中,即使该 Group 没有可见的标签或边界也应如此。

  5. 选择下面以粗体文本显示的行,然后单击“编辑”菜单上的“复制”,以将此内容复制到剪贴板以便以后使用。

      <Column PercentWidth="70">
        <Group>
          <Column PercentWidth="100">
            <Group Label="Classification">
              <Column PercentWidth="100">
                <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />            <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />            <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />          </Column>
            </Group>
    
  6. 删除下面的 XML 中以粗体文本显示的行,将 Classification 组从它在表单上的当前位置移除。

    <Layout>
      <Group>
        <Column PercentWidth="70">
          <Control Type="FieldControl" FieldName="System.Title" Label="&amp;Title:" LabelPosition="Left" />
        </Column>
        <Column PercentWidth="30">
          <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Discipline" Label="&amp;Discipline:" LabelPosition="Left" />
        </Column>
      </Group>
      <Group Label="Classification">    <Column PercentWidth="100">      <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="&amp;Area:" LabelPosition="Left" />      <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="&amp;Iteration:" LabelPosition="Left" />      <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />    </Column>  </Group>
    
  7. 在 <TabGroup> 部分,找到以下定义“Details”(详细信息)选项卡的行:

    <Tab Label="Details">
      <Group>
        <Column PercentWidth="50">
          <Group Label="General">
            <Column PercentWidth="100">
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Iss&amp;ue:" LabelPosition="Left" />
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.ExitCriteria" Label="E&amp;xit criteria:" LabelPosition="Left" />
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Build.IntegrationBuild" Label="Integration &amp;build:" LabelPosition="Left" />
            </Column>
          </Group>
        </Column>
        <Column PercentWidth="50">
          <Group Label="Schedule">
            <Column PercentWidth="100">
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.RemainingWork" Label="Remaining &amp;work (hours):" LabelPosition="Left" />
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.CompletedWork" Label="Com&amp;pleted work (hours):" LabelPosition="Left" />
            </Column>
          </Group>
        </Column>
      </Group>
    </Tab>
    
  8. 将剪贴板中的内容粘贴到以下位置,以将这些控件移至“Details”(详细信息)选项卡。

    <Tab Label="Details">
      <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />  <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />  <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />  <Group>
        <Column PercentWidth="50">
          <Group>
            <Column PercentWidth="100">
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Issue" LabelPosition="Left" />
    ...
    
  9. 进行下列更改(以粗体文本显示),以围绕被移动的字段创建分组并将字段划分为两列。

    <Tab Label="Details">
      <Group Label="Classification">    <Column PercentWidth="50">      <Group>        <Column PercentWidth="100">          <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />
              <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" />
            </Column>      </Group>    </Column>    <Column PercentWidth="50">      <Group>        <Column PercentWidth="100">          <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" />
            </Column>      </Group>    </Column>  </Group>
      <Group>
        <Column PercentWidth="50">
          <Group>
            <Column PercentWidth="100">
              <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Issue" LabelPosition="Left" />
    ...
    
  10. 单击“保存”将更改保存到该 XML 文件。

  11. 将更改后的“Special Task”工作项类型导入 Team Foundation Server。为此,请在 Visual Studio 命令提示符处键入以下命令,然后按 Enter:

    witimport /f "文件路径\specialtask.xml" /t "Team Foundation Server 名称" /p WITLab

    这会将 specialtask 工作项类型导入 Team Foundation Server。导入操作完成时会显示以下消息:

    Work item type import complete.

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

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

  13. 新建“Special Task”工作项。为此,请右击“工作项”节点,指向“添加工作项”,然后单击“Special Task”。

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

    请注意,Classification 组已不再在主表单上。单击“Links and Attachments”选项卡和“Details”选项卡以查看所做更改的结果。

  14. 单击“关闭”关闭新的“Special Task”。提示您保存工作项时,请单击“否”。

后续步骤

有关对工作项类型进行其他自定义的分步指导,请参见演练:对工作项类型进行高级自定义

请参见

任务

演练:管理工作项类型中的字段

其他资源

自定义工作项类型

自定义 Team Foundation 的工作项类型