Как изменить поле BoardColumn рабочего элемента с помощью REST API - PullRequest
0 голосов
/ 16 мая 2019

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

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

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

В TFS Board я могу перемещатьсяWI от первого столбца до второго столбца.

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

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

КогдаЯ изменяю комментарий в workitem2, чтобы изменить поле «Состояние», это работает.

Есть идеи?

1 Ответ

0 голосов
/ 16 мая 2019

Поле 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
...