TFS中链接子WIT至父WIT时,如何继承父字段值到子WIT模板?
我来帮你解决TFS中自动将父工作项字段复制到子工作项模板的问题!以下是几种实用的实现方案,按复杂度从低到高排序:
实现父工作项字段自动复制到子工作项模板
方法1:修改工作项类型定义(WITD)的内置规则
这是最原生的解决方案,不需要额外工具,直接通过TFS内置规则实现:
导出子工作项类型的定义文件
打开命令提示符,执行以下命令(替换成你的TFS服务器地址、集合、项目和子工作项类型名称):witadmin exportwitd /collection:http://你的TFS服务器:8080/tfs/你的集合名 /p:你的项目名 /n:"Task" /f:Task.xml添加字段复制规则
打开导出的XML文件,找到你要继承父字段的节点(比如标题System.Title),添加COPY规则:<FIELD name="Title" refname="System.Title" type="String" reportable="dimension"> <!-- 仅在创建子工作项时复制一次父字段值 --> <COPY from="parent" /> <!-- 可选:如果需要父字段更新时自动同步子字段,添加下面这条规则 --> <!-- <SERVERDEFAULT from="parent" /> --> </FIELD>导入修改后的定义文件
执行命令将修改后的配置导回TFS:witadmin importwitd /collection:http://你的TFS服务器:8080/tfs/你的集合名 /p:你的项目名 /f:Task.xml测试效果
创建一个父工作项,通过「添加链接」→「新建工作项」创建子工作项,此时子工作项的标题会自动填充为父工作项的标题。
方法2:PowerShell脚本+REST API(适合批量同步已有子工作项)
如果已经存在大量子工作项需要批量同步父字段,或者需要更灵活的自定义逻辑,可以用TFS REST API结合PowerShell实现:
获取父工作项的字段值
$tfsUrl = "http://你的TFS服务器:8080/tfs/你的集合名/你的项目名/_apis/wit/workitems/父工作项ID?api-version=5.1" $parentWorkItem = Invoke-RestMethod -Uri $tfsUrl -Method Get -UseDefaultCredentials $parentTitle = $parentWorkItem.fields."System.Title"获取父工作项的所有子工作项
$childIds = $parentWorkItem.relations | Where-Object {$_.rel -eq 'System.LinkTypes.Hierarchy-Forward'} | ForEach-Object { $_.url.Split('/')[-1] } $childItemsUrl = "http://你的TFS服务器:8080/tfs/你的集合名/你的项目名/_apis/wit/workitems?ids=$($childIds -join ',')&api-version=5.1" $childWorkItems = Invoke-RestMethod -Uri $childItemsUrl -Method Get -UseDefaultCredentials批量更新子工作项字段
foreach ($child in $childWorkItems.value) { $updateUrl = "http://你的TFS服务器:8080/tfs/你的集合名/你的项目名/_apis/wit/workitems/$($child.id)?api-version=5.1" $body = @( @{ op = "replace" path = "/fields/System.Title" value = $parentTitle } ) | ConvertTo-Json Invoke-RestMethod -Uri $updateUrl -Method Patch -Body $body -ContentType "application/json-patch+json" -UseDefaultCredentials }
方法3:Azure DevOps Server扩展(适合升级后的环境)
如果你的TFS已经升级为Azure DevOps Server,可以在平台市场中搜索现成的扩展(比如「Parent Field Sync」类工具),这类扩展提供可视化配置界面,无需手动修改XML或编写脚本,适合非技术用户快速配置。
注意:修改WIT定义前,建议先备份原配置文件,并在测试环境验证效果,避免影响生产环境的工作项数据。
内容的提问来源于stack exchange,提问作者Seapeter
相关产品推荐
相关产品推荐

