Как изменить поле BoardColumn рабочего элемента с помощью REST API

У меня есть настроенная доска с:

  • Первый столбец по умолчанию «Новый» сопоставлен с состоянием «Новый».

  • Второй столбец «Задачи» также сопоставлен с состоянием «Новое» (после еженедельного просмотра нового WI команда перемещает их в этот столбец, чтобы не просматривать их в следующий раз).

В TFS Board я могу переместить WI из первой колонны во вторую колонку.

С REST API, когда я прочитал существующий WI, я получил правильную информацию для поля 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' 

Когда я пытаюсь использовать BoardColumn в workitem2, возникает исключение.

Когда я изменяю комментарий в workitem2 для изменения поля State, это работает.

Любая идея?

Всего 1 ответ


Поле System.BoardColumn предназначено только для чтения, оно не является обычным правилом рабочего элемента, поэтому в этом случае может помочь bypass = true . Это причина, почему вы не можете обновить это поле обычным способом.

Согласно новым предоставленным вами Документам Microsoft (соответствующий раздел добавлен 3 дня назад), есть решение. Вы можете обновить поле, если вы обновите другое значение поля - если вы получите рабочий элемент и исследуете поля, вы увидите поле такого типа:

WEF_432678B52358ACDA34ASDA243489FD343_Kanban.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

Есть идеи?

10000