概述
TFS 内置有CMMI模板、敏捷模板等过程模板,但是为了方便团队管理,TFS 提供自定义过程模板的功能。每个团队可以根据需要自定义模板界面、字段、流程等内容。
本文档将会介绍如何自定义过程模板,以及制定的要求。
环境准备
获取修改权限
过程模板修订完成后,需要导入到对应的团队项目中,此时要求执行导入的账号需要具有该项目的管理员权限(权限由服务器管理员开通)。
安装工具
- VS工具:与TFS服务器版本对应的VS工具。
- Process Editor工具:该工具可以实现TFS过程模板的修改、导入、导出等内容。在网上搜索下载即可,需要根据VS的版本手动安装。
自定义模板
- Process Editor工具对于系统模板的修改、字段的查询等都提供了的方式,此处仅介绍Task、Bug工作项模板的修改、导入、导出。
- 2010和2017(2015)TFS过程模板的自定义方式一致,本文档以2017为例进行说明。
导出模板
- 打开2017 VS,选择工具->Process Editor->Work Item Types->Export WIT。
- 在“连接到团队项目集合”中选择一个目标项目集合,点击连接。
- 选择一个项目中的一个工作项类型(Bug、Task、Epic等方式一致,此处以Bug为例),点击OK,然后选择保存路径即可。在弹出的Global List页面中选择是,弹出导出成功提示框后,则代表完成指定项目工作项模板的导出。此时在保存目录中可以看到一个xml格式的文件。
修订模板
通过VS打开模板文件(导出的xml文件),可以看到有三个页面:Fields、Layout、Workflow,分别代表字段定义页面、界面布局页面、工作流定义页面。
Fields
Fields页面用于对模板中的字段进行新增、删除和编辑。
【新增字段】点击页面中的“New”按钮,在弹出的字段定义框中填写新增字段的信息。如图Figure 3 4新增字段定义
Fields Definition
Name:字段名称,具有唯一性。2010版支持中文,2015以上版本不支持中文,只支持英文,。此名称可用于工作项查询列表中的列选项。
Type:数据类型,一般描述性信息为string,日期类用DateTime,特殊类型可以设置为History、Html等。
Referance Name:字段引用名,在程序中需要处理,命名规则为:命名空间.名称,必须是英文。TFS内置了两个命名空间:System和Microsoft,公司自定义字段统一为Weihong :Weihong.XX.(XX.)XX,例如:Weihong.Common.Team。
【说明】
第二节根据是Bug工作项还是Task工作项确定,若是两者都包含该字段,则是Common;
第三节为可选项:若为团队特有字段,则为团队英文名称,若为软件研发体系通用字段(通常是软件部修改模板时使用),则不需要。
第四节与Name一致,不能有空格和符号,因此缩写字段需要补全。
注意:Name与Referance Name在TFS全局变量中必须是唯一的,因此一旦定义好,导入TFS服务器后,则不允许修改;并且两者是一一对应的,因此定义时需要慎重。TFS中所有的全局变量名存储在数据库“TFSWorkItemTracking”的“Fields”表中。
Help Text:字段解释,此内容可以帮助使用者进一步理解字段的含义。
Rules
此页面可以定制该字段的一些规则,如图Figure 3.2 2字段规则定义
常用的有以下几个:
ALLOWEDVALUES:定义该字段允许接受的值,一般用于数量较少的下拉列表。
ALLOWEXISTINGVALUE:允许字段保留现有值,即使该值不再位于选择列表中也是如此。当更改选择列表中或包含人名的选择列表中的字段值时,建议包括此规则。
COPY:用户创建或修改工作项时,将指定的值复制到字段。
DEFAULT:为用户创建或修改工作项时为空的字段指定一个值。如果一个字段已经有一个值,则DEFAULT规则将被忽略。
READONLY:字段为只读形式,不允许修改。不要将READONLY与EMPTY元素一起使用,因为EMPTY还将字段设置为只读。如果将这些元素组合在一起,结果将不一致。
REQUIRED:设置字段为必填字段。用户必须先将先填写此字段字段,才能保存工作项。
WHEN:指一个字段为指定值时应用于父字段的规则。一般用于两个字段值之间的关联性设置。
SEVERDEFAULT:用户保存工作项时,将当前用户名或服务器时钟值复制到该字段。这些字段通常在表单上显示为只读。
SUGGESTEDVALUES:定义一个用户可以选择但不限于选择的值的列表。用于可以复选的字段。
其他规则的介绍可以参照微软官网介绍。(https://docs.microsoft.com/en-us/azure/devops/reference/xml/apply-rule-work-item-field?view=azure-devops-2019#conditional-rules )
【编辑字段】点击页面中的“Edit”按钮,可以修改已定义的字段内容。
【删除字段】点击页面中的“Delete”按钮,可以模板中已定义的字段。再删除字段之前需要先确认字段没有被其他地方引用,比如流程中或界面布局中。
注意:此处的删除仅限于删除该文件中定义的字段,无法删除TFS服务中保存的字段。
Layout
Layout页面用于过程模板的界面设计,可以将模板界面分组、分页、添加控件等。它提供多种布局方式,同时限制了各种方式之间的相互使用,下面对常用的几个进行详细介绍。
New Control:添加一个新的控件,只能在Column和Tab Page下面使用,在layout页面中可以设置该控件的相关信息。如图Figure 3.2 3 Contorl的属性信息
常用属性有以下几个:
- Field Name:指定与控件关联的工作项字段。
- Type:指定控件的数据类型。例如:
AttachmentControl:用于显示工作项附件。该控件没有关联的字段或字段类型。
DateTimeControl:用于显示字段类型为的格式化日期字段DateTime。
FieldControl:用于显示纯文本,数字,布尔值,或选择列表中的字段。
HtmlFieldControl:用于显示字段类型为文本格式HTML。
LabelControl:用于显示与字段无关的文本。文本可以是纯文本或超链接。可以指定使用额外的控制LabelText,Link和Text元素。
LinksControl:用于显示链接控制工具栏和管理工作项与情节提要之间的链接关系。该控件没有关联的字段或字段类型。可以使用LinksControlOptions元素指定要过滤的链接类型和其他控件选项。
WorkItemLogControl:用于显示工作项历史记录信息和字段类型为的字段History。注: 该System.History字段是唯一使用此数据类型的字段。
MultiValueControl:用于显示控件类型为多选的字段。 - Lable:界面显示的控件的标签名称。指定的字符串不得超过80个字符,中英文不限,建议名称与关联的字段名称一致,方便查询。
- Lable Font Size:指定标签的大小。
- Lable Position:指定标签相对于控制数据的位置。
- Padding:指定控件的内部边框周围的空间量(以像素为单位)。
- Margin:指定控件的外部边框周围的间距(以像素为单位)。
- MinimumSize:指定控件应在表单中占据的最小像素大小。
New Group:添加一个新的群组,可以设置群组的标签以及内外围边框的距离。如图Figure 3.2 4Group的属性信息
Figure 3.2 4Group的属性信息
New Column:添加一个新的列,可以将一个Group划分成多列。有两种设置列宽的方式:固定列宽(以像素为单位)、固定占比(所在群组中的比例)。两种方式只能选择一种,常用固定占比这种方式。如图Figure 3.2 5 Column的属性信息
Figure 3.2 5 Column的属性信息
在布局排版过程中可以通过界面中的“Preview Form”按钮进行界面预览,方便随时调整界面显示。
更多的界面设置介绍可以参照微软官网介绍。(https://docs.microsoft.com/en-us/azure/devops/reference/xml/xml-element-reference?toc=%2Fazure%2Fdevops%2Freference%2Ftoc.json&bc=%2Fazure%2Fdevops%2Freference%2Fbreadcrumb%2Ftoc.json&view=tfs-2015 )
Workflow
Workflow页面用于模板的工作流定义。工作流程依赖于系统提供的State字段的流转,可以在不同路径中设置必填项。
【修改流程】可以在已有流程的基础上修改State转变的Reason、必填字段设置等。如图Figure 3.2 7 修改流程
Figure 3.2 6 修改流程
- 修改某条数据流的状态转换条件:左键双击该数据流程的Transition(或右击“Transition”选择“Open Details”),在弹出的Workflow Transition对话框中设置State转变的Reason、Actions、Fields。如图Figure 3.2 7 数据流条件设置
Figure 3.2 7 数据流条件设置
Reason:State转换的原因,可以设置多个,并设置一个默认的。如图Figure 3.2 8 State转换原因
Figure 3.2 8 State转换原因
Actions:可选项。一般设置系统自带的更改项。
Fields:State转换过程中对于特定字段的条件设置。如图Figure 3.2 9 添加字段条件。在Rules中可以设置字段的条件,与3.2.1Fields中对字段设置规则的方式以及规则的定义一致。
Figure 3.2 9 添加字段条件
2. 修改State中内容:右键双击State的名称可以进行名称的修改;双击State头的空白区域(或右击空白区域选择“Open Details”),可以设置State的字段规则。此处一般设置的系统定义的字段,可以在该状态时根据设置的条件自动更新字段内容。如图Figure 3.2 10 State Field规则设置
Figure 3.2 10 State Field规则设置
【新增流程】若已有流程定义无法满足需要,点击VS中的“工具箱”,可新增流程。如图Figure 3.2 6 新增流程
- 新增State:拖动工具箱中的State到页面中,即可对其进行定义。
- 新增流程路径:点击工具箱中的Transition Link,将两个State连接起来,即可新增退一条路径。表示可以从一个State变换到另一个State,注意箭头指向的State表示为转变后的State。若两个State之间没有连接,则代表两者之间无法转换。
Figure 3.2 11 新增流程
导入模板
模板修改完成后,通过Process Editor工具进行导入:工具->Process Editor->Work Item Types -> Import WIT,导入时需要选择一个指定的项目。模板导入后刷新一下工作项,即可看到新模板。
常见问题
- 实现字段内容多选:
- 安装VS对应版本的WitCustomControlSetup.msi插件,每个版本的VS都需要安装对应版本;
- 下拉列表的值要使用SUGGESTEDVALUES,每个值要用[]括起来;
- 在界面布局的时候Type类型选择MultiValueControl。
- 导入模板时若有字段名称冲突,可通过命令行方式进行彻底删除。
例如:C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE>Witadmin deletefield/collection:http://172.16.10.116:8080/tfs/study /n:Weihong.Common.Team
Witadmin还有很多其他的命令,例如导出模板、导入模板、彻底删除工作项等。具体的方式可以通过执行“Witadmin help”方式查询。
注意:此方式慎用,因为会将服务器中该字段存储的所有值都删除,无法恢复。 - 有时导出的文件做更改再导入出现问题时,可能是由于文件加密的原因,这时可重新操作一遍再行导入。
- 2010版的模板中WorkFlow中,必须将需要更新的系统字段设置在Transition中,否则模板使用时会有问题:若State不更新,则其他字段无法更新。