TFS 2017 Update 3本地版Area Path规则配置报错求助
我之前维护TFS 2017 Update 3的工作项模板时,碰到过一模一样的问题——想用PROHIBITEDVALUES规则禁止新建Feature/Story/Bug/Task时选根项目作为Area Path,结果保存模板直接弹出TF26062错误,提示规则不支持。折腾一阵后发现,这是因为该版本对TreePath类型字段(比如Area Path)的PROHIBITEDVALUES规则支持有局限,得换个思路实现需求。
错误原因分析
TF26062的核心问题在于:Area Path是层级树状结构字段,TFS 2017 Update 3中PROHIBITEDVALUES规则无法直接对这类字段的根节点生效,或者说语法上不支持直接指定根路径作为禁止项。
可行的解决方案
方案一:用VALIDVALUES间接限制(推荐)
既然不能直接禁止根节点,那就反过来限定只能选择根节点下的子Area。这种方式更符合TFS对TreePath字段的规则支持逻辑,效果完全一致。
修改工作项类型XML中的Area Path字段配置,添加VALIDVALUES规则:
<FIELD name="Area Path" refname="System.AreaPath" type="TreePath"> <!-- 限定只能选择根项目下的所有子节点 --> <VALIDVALUES expanditems="true"> <LISTITEM value="[你的项目名称]\*"/> </VALIDVALUES> </FIELD>
[你的项目名称]\*:表示匹配根项目下的所有子Area节点expanditems="true":会自动展开所有子项,用户在选择Area Path时只能看到这些子节点,无法选择根项目
方案二:针对特定工作项类型配置规则
如果你只想对Feature/Story/Bug/Task这几种类型做限制,其他工作项类型允许选择根项目,可以结合WHEN规则做针对性配置:
<FIELD name="Area Path" refname="System.AreaPath" type="TreePath"> <WHEN field="System.WorkItemType" value="Feature"> <VALIDVALUES expanditems="true"> <LISTITEM value="[你的项目名称]\*"/> </VALIDVALUES> </WHEN> <WHEN field="System.WorkItemType" value="User Story"> <VALIDVALUES expanditems="true"> <LISTITEM value="[你的项目名称]\*"/> </VALIDVALUES> </WHEN> <WHEN field="System.WorkItemType" value="Bug"> <VALIDVALUES expanditems="true"> <LISTITEM value="[你的项目名称]\*"/> </VALIDVALUES> </WHEN> <WHEN field="System.WorkItemType" value="Task"> <VALIDVALUES expanditems="true"> <LISTITEM value="[你的项目名称]\*"/> </VALIDVALUES> </WHEN> </FIELD>
方案三:尝试修正PROHIBITEDVALUES的语法(不保证所有场景生效)
如果坚持想用PROHIBITEDVALUES,可以先检查根路径的写法是否正确——必须用[项目名称]的格式,不能直接写项目名称:
<FIELD name="Area Path" refname="System.AreaPath" type="TreePath"> <PROHIBITEDVALUES> <LISTITEM value="[你的项目名称]"/> </PROHIBITEDVALUES> </FIELD>
不过要注意,这个方法在TFS 2017 Update 3中可能依然会报错,因为该版本对TreePath字段的PROHIBITEDVALUES支持确实不够完善,所以优先推荐前两种方案。
操作注意事项
- 修改模板时,记得先导出当前工作项类型的XML,编辑完成后再重新导入;
- 导入模板后,务必新建对应类型的工作项测试,确认Area Path无法选择根项目;
- 如果导入时提示语法错误,检查XML标签是否闭合、字段引用名称是否正确。
内容的提问来源于stack exchange,提问作者spikey_richie

