Tfs 如何使用RESTAPI修改工作项的BoardColumn字段

Tfs 如何使用RESTAPI修改工作项的BoardColumn字段,tfs,azure-devops-rest-api,Tfs,Azure Devops Rest Api,我有一个定制板,带有: 第一个默认列“New”映射到“New”状态 第二列“待办事项”也映射到“新”状态(每周审查新WI后,团队将其移至该列中,以避免下次审查) 在TFS板中,我可以将WI从第一列移动到第二列 在读取现有WI时,使用RESTAPI,我获得了BoardColumn字段的正确信息 但当我使用RESTAPI修改BoardColumn时,它引发了一个异常 我有绕过规则的许可 $tfsTargetUri = "https://path to my collection/" $tfs

我有一个定制板,带有:

  • 第一个默认列“New”映射到“New”状态

  • 第二列“待办事项”也映射到“新”状态(每周审查新WI后,团队将其移至该列中,以避免下次审查)

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

在读取现有WI时,使用RESTAPI,我获得了BoardColumn字段的正确信息

但当我使用RESTAPI修改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中的注释以更改状态字段时,这是有效的


有什么想法吗?

字段
System.BoardColumn
是设计只读的,不是常规的工作项规则,因此
bypass=true
在这种情况下会有所帮助。这就是您无法用常规方式更新此字段的原因

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

WEF_432678B52358ACDA34ASDA243489FD343_Kanban.Column
将此字段更新为Board列状态时,工作项将移动到此Board列

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

$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

以下是使用Postman时对我有效的设置:


是的,但CreatedBy也是只读的,可以使用REST API和旁路规则修改此字段。查看此代码,它似乎可以工作:@Dominique您是对的!它起作用了!您在PowerShell中成功完成了吗?@Dominique此部分是3天前添加的文档!我更新了我的答案:)你好,ShaykySorry,首先对我迟来的回答感到抱歉。是的,现在可以用了。适合检查提示:如果您想更改错误的Board列,请在Board设置中“Bugs是按要求管理的”。否则看板字段不存在。感谢您从workitem对象提取BoardColumnField的代码。