在你为已升级的团队项目(使用基于 Microsoft Solutions Framework (MSF) for Agile Software Development v5.0 的过程模板创建)配置功能后,你应该手动更新用户情景和任务工作流分配。 如果你未更新工作流,则任务板仅提供两种状态:“活动”和“已关闭”,如下图所示。 这样会妨碍你和你的团队区分正在进行的和尚未开始的任务。
Agile 团队项目的任务板,不包含建议的手动更新
已使通过“配置功能”向导进行的更新匹配为你的团队项目定义的现有工作流。 对于 5.0 版本的 MSF Agile 过程模板,这意味着随最新版本引入的“新建”和“已移除”状态不存在。 这些状态支持将用户情景从“新建”状态转换为“活动”状态。 在没有定义“新建”状态的情况下,分配给迭代的用户情景将保留在产品积压工作 (backlog) 上直至得到解决,而这并不是所需的或预期的行为。
以同样的方式将“新建”状态添加到“任务”工作流,允许用户使用任务板将任务从“新建”移至“活动”和“已关闭”。 此外,通过将“已移除”状态添加到用户情景和任务类型定义,将允许用户使用计划工具剪切情景和任务。
要支持所需的行为,你必须将“新建”和“已移除”状态添加到用户情景和任务工作项类型,并更新过程配置中分配的元状态映射。
备注
可以通过使用过程编辑器(它是可下载并安装的针对 Visual Studio 的强大工具外接程序)执行下面描述的某些过程。过程编辑器位于“工具”菜单下,可提供用于自定义 Team Foundation Server 过程模板的图形用户界面。可以使用此工具导入和导出工作项类型并修改过程模板的内容。有关详细信息,请参见 Microsoft 网站上的以下页面:Team Foundation Server 增强工具。
要求
- 若要运行 witadmin 命令行工具,你必须是以下某个组的成员:“Team Foundation Administrators”、**“项目集合管理员”或团队项目的“项目管理员”**组。 请参阅Team Foundation Server 权限参考。
更新 Agile 团队项目的工作流和元状态
重要
本主题中的步骤是基于 MSF for Agile Software Development 6.0 编写的。要更新你的团队项目以便支持为 MSF for Agile Software Development 6.1 定义的最新工作流,你可以采用这些步骤而不是复制最新 Agile 过程模板的 WORKFLOW 部分。对最新每季更新中的工作项类型的工作流进行了重要更新。这些更改支持反向转换,因此,当你无意中将看板或任务板的工作项拖动到已解决或已关闭状态时,可以将其拖动回早期的工作流状态。
若要了解有关更新的详细信息,请参阅计划和跟踪的新增功能。
你将需要执行以下步骤:
为用户情景和任务类型以及过程配置导出定义。
将代码片段插入用户情景和任务的工作流部分。
更新过程配置的元状态映射。
为工作项类型和过程配置导入更新的定义。
验证任务板上显示的更改。
重要
要使以下步骤有效,必须在为工作项的用户情景和任务类型定义的工作流中指定“活动”状态。
更新用户情景的工作流状态和转换
若要运行 witadmin 命令行工具,请在安装了 Visual Studio 或 团队资源管理器 的情况下打开命令提示符窗口,然后键入:
cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE
在 64 位版本的 Windows 上,将 %programfiles% 替换为 %programfiles(x86)%。
要导出用户情景的类型定义,请输入以下命令,用你的数据替换此处显示的参数,其中 CollectionURL 指定团队项目集合的 URL,ProjectName 指定集合内定义的团队项目的名称,而“DirectoryPath\FileName.xml”指定要导出的文件的名称和位置。 然后按 Enter 键。
witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:"User Story" /f:"DirectoryPath\FileName.xml"
为 URL 使用此格式:**http://**ServerName:Port/VirtualDirectoryName/CollectionName,例如:http://srvalm:8080/tfs/DefaultCollection。
在文本编辑器或 Visual Studio 中,打开你导出的文件。
在行 <STATES> 和 <STATE value="Active"> 之间添加此代码片段:
<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.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="Removed" />
将以 <TRANSITION from=" " to="Active"> 开头和以 <TRANSITION> 结束的部分替换为此代码片段:
<TRANSITION from="" to="New"> <REASONS> <DEFAULTREASON value="New" /> </REASONS> <FIELDS> <FIELD refname="System.Description"> <DEFAULT from="value" value="As a &lt;type of user&gt; I want &lt;some goal&gt; so that &lt;some reason&gt;" /> </FIELD> </FIELDS> </TRANSITION> <TRANSITION from="New" to="Active"> <REASONS> <DEFAULTREASON value="Implementation started" /> </REASONS> <FIELDS> <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> <COPY from="currentuser" /> <VALIDUSER /> <REQUIRED /> </FIELD> <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> <SERVERDEFAULT from="clock" /> </FIELD> <FIELD refname="System.AssignedTo"> <DEFAULT from="currentuser" /> </FIELD> </FIELDS> </TRANSITION> <TRANSITION from="New" to="Removed"> <REASONS> <DEFAULTREASON value="Removed from the backlog" /> </REASONS> </TRANSITION> <TRANSITION from="Active" to="New"> <REASONS> <DEFAULTREASON value="Implementation halted" /> </REASONS> </TRANSITION> <TRANSITION from="Removed" to="New"> <REASONS> <DEFAULTREASON value="Reconsidering the User Story" /> </REASONS> </TRANSITION>
保存并关闭文件。
导入该文件,用你的数据替换此处显示的参数。
witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\FileName.xml"
更新任务的工作流状态和转换
导入任务的类型定义,用你的数据替换此处显示的参数。
witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:"Task" /f:"DirectoryPath\FileName.xml"
在文本编辑器或 Visual Studio 中,打开你导出的文件。
在行 <STATES> 和 <STATE value="Active"> 之间添加此代码片段:
<STATE value="New"> <FIELDS> <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="Removed" />
将第一个转换块(对应位于 <TRANSITION from="" to="Active"> 及其结束 </TRANSITION> 标记之间的行)替换为此代码片段:
<TRANSITION from="" to="New"> <REASONS> <DEFAULTREASON value="New" /> </REASONS> </TRANSITION> <TRANSITION from="New" to="Active"> <ACTIONS> <ACTION value="Microsoft.VSTS.Actions.StartWork" /> </ACTIONS> <REASONS> <DEFAULTREASON value="Work started" /> </REASONS> <FIELDS> <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> <COPY from="currentuser" /> <VALIDUSER /> <REQUIRED /> </FIELD> <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> <SERVERDEFAULT from="clock" /> </FIELD> <FIELD refname="System.AssignedTo"> <DEFAULT from="currentuser" /> </FIELD> </FIELDS> </TRANSITION> <TRANSITION from="Active" to="New"> <ACTIONS> <ACTION value="Microsoft.VSTS.Actions.StopWork" /> </ACTIONS> <REASONS> <DEFAULTREASON value="Work halted" /> </REASONS> </TRANSITION> <TRANSITION from="New" to="Closed"> <ACTIONS> <ACTION value="Microsoft.VSTS.Actions.Checkin" /> </ACTIONS> <REASONS> <DEFAULTREASON value="Completed" /> <REASON value="Cut" /> <REASON value="Deferred" /> <REASON value="Obsolete" /> </REASONS> <FIELDS> <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> <READONLY /> </FIELD> <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> <READONLY /> </FIELD> <FIELD refname="Microsoft.VSTS.Common.ClosedDate"> <SERVERDEFAULT from="clock" /> </FIELD> <FIELD refname="Microsoft.VSTS.Common.ClosedBy"> <COPY from="currentuser" /> <VALIDUSER /> <REQUIRED /> </FIELD> </FIELDS> </TRANSITION> <TRANSITION from="Closed" to="New"> <REASONS> <DEFAULTREASON value="Reactivated" /> </REASONS> <FIELDS> <FIELD refname="System.AssignedTo"> <COPY from="field" field="Microsoft.VSTS.Common.ClosedBy" /> </FIELD> </FIELDS> </TRANSITION> <TRANSITION from="New" to="Removed"> <REASONS> <DEFAULTREASON value="Removed from the backlog" /> </REASONS> </TRANSITION> <TRANSITION from="Active" to="Removed"> <REASONS> <DEFAULTREASON value="Removed from the backlog" /> </REASONS> </TRANSITION> <TRANSITION from="Removed" to="New"> <REASONS> <DEFAULTREASON value="Reconsidering the Task" /> </REASONS> </TRANSITION>
保存并关闭文件。
导入该文件,用你的数据替换此处显示的参数。
witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\FileName.xml"
更新过程配置的元状态映射
键入以下命令以导出 ProcessConfiguration 文件,并用你的数据替换显示的参数。
witadmin exportprocessconfig /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\ ProcessConfiguration.xml"
其中,CollectionURL 指定团队项目集合的 URL,ProjectName 指定团队项目的名称。 为 URL 使用此格式:**http://**ServerName:Port/VirtualDirectoryName/CollectionName,例如:http://srvalm:8080/tfs/DefaultCollection。
使用记事本或其他文本编辑器,打开 ProcessConfiguration.xml 文件。
找到 <RequirementWorkItems category="Microsoft.RequirementCategory" plural="Stories"> 标记。
将行 <State type="Proposed" value="Active" /> 替换为以下行:
<State type="Proposed" value="New" /> <State type="InProgress" value="Active" />
找到 <TaskWorkItems category="Microsoft.TaskCategory"> 标记并将行 <State type="Proposed" value="Active" /> 替换为以下行:
<State type="Proposed" value="New" /> <State type="InProgress" value="Active" />
验证你拥有以下映射:
<RequirementWorkItems category="Microsoft.RequirementCategory" plural="Stories"> <States> <State type="Proposed" value="New"/> <State type="InProgress value="Active" /> <State type="InProgress value="Resolved" /> <State type="Complete" value="Closed" /> </States> </RequirementWorkItems> <TaskWorkItems category="Microsoft.TaskCategory"> <States> <State type="Proposed" value="New" /> <State type="InProgress" value="Active" /> <State type="Complete" value="Closed" /> </States> </TaskWorkItems>
保存并关闭文件。
导入该配置文件。
witadmin importprocessconfig /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\ProcessConfiguration.xml"
验证任务板上显示的更改
打开 Team Web Access,然后使用具有以下格式的 URL 连接到你的团队项目:
http://MyServer:8080/tfs/TeamProjectCollectionName/MyProject
如果 TWA 已经打开,则刷新你的浏览器以刷新缓存。
验证任务板列现在显示**“新建”、“活动”和“已关闭”**。
Agile 团队项目的任务板,包含更新的工作流状态
若要了解使用任务板的详细信息,请参阅冲刺。