首页 > 解决方案 > 如何使用 REST API 修改工作项的 BoardColumn 字段

问题描述

我有一个定制的董事会:

在 TFS Board 中,我可以将 WI 从第一列移动到第二列。

当我阅读现有的 WI 时,使用 REST API,我得到了 BoardColumn 字段的正确信息。

但是当我使用 REST API 修改 BoardColumn 时,它会引发异常。

我有绕过规则的权限。

 $tfsTargetUri = "https://path to my collection/"
 $tfsTargetProject = "MyProject"
 $MyWI = 56 #use an existing Id
 $mycredentials = Get-Credential

 $workitem2 =
 @(
 @{op="test";path="/rev";value="1"},
 @{op="add";path="/fields/System.BoardColumn";value="New"}
 #@{op="add";path="/fields/System.State";value="Active"}
 )

 $json2 = $workitem2 | ConvertTo-Json  -Depth 100
 $url2= $tfsTargetUri + $tfsTargetProject + '/_apis/wit/workitems/' + $MyWI +'?bypassRules=true&api-version=2.0'
 $targetbug = Invoke-RestMethod -Uri $url2 -Method Patch -Credential $mycredentials -Body ([System.Text.Encoding]::UTF8.GetBytes($json2)) -ContentType 'application/json-patch+json' 

当我在 workitem2 中尝试使用 BoardColumn 时,它会引发异常。

当我修改 workitem2 中的注释以更改 State 字段时,这是有效的。

任何想法?

标签: tfsazure-devops-rest-api

解决方案


该字段System.BoardColumn是只读的,不是常规的工作项规则,因此bypass = true在这种情况下可以提供帮助。这就是您无法以常规方式更新此字段的原因。

根据您提供的新Microsoft Docs(3 天前添加的相关部分),有一个解决方案。如果您更新另一个字段值,则可以更新该字段 - 如果您获取工作项并调查这些字段,您将看到这种字段:

WEF_432678B52358ACDA34ASDA243489FD343_Kanban.Column

当您将此字段更新为 Board Column State 时,工作项将移至此 Board Column。

示例如何从工作项详细信息中提取此字段:

$url = $collection/_apis/wit/workitems/$id?api-version=4.0
$workItem = Invoke-RestMethod -Uri $url -Method Get ...
$boardColumnField = $workItem.fields.PSObject.Properties.Name.Where({$_.Contains("Kanban")})[0]

# Now in the work item json use it: /fields/$boardColumnFied

推荐阅读