Как установить состояние рабочего элемента при создании или обновлении рабочего элемента в Azure Devops Rest API?

Я работал над созданием API, который программно создает / обновляет рабочий элемент в Azure Devops. Мне удалось создать рабочий элемент и заполнить почти все поля. У меня проблема с настройкой состояния.

Когда я создаю POST-запрос к Azure Devops rest api с любым именем состояния, например Active, Closed, Rejected, он выдает ошибку 400 Bad Request.

Я не знаю, упускаю ли я что-нибудь или что-то не так с тем, как я пытаюсь установить значение.

{
  "op" : "add", 
  "path": "/fields/System.State", 
  "value"="Active",
}

person Pranshu Jawade    schedule 02.02.2021    source источник


Ответы (2)


Посмотрите пример здесь: Обновить поле

Вы должны использовать "value":"Active" в теле запроса.

[
  {
      "op" : "add", 
      "path": "/fields/System.State", 
      "value": "Active"
   }
]
person Shamrai Aleksander    schedule 02.02.2021
comment
Я использую то же самое. Судя по всему, проблема только в create, при любой операции обновления работает нормально. - person Pranshu Jawade; 02.02.2021

Я нашел решение этой проблемы и поэтому отвечаю на него здесь.

Я получал ошибку 400 Bad Request всякий раз, когда пытался создать элемент и установить состояние в одном и том же вызове. Я отладил код и поймал исключение. Я обнаружил, что для некоторых полей существуют некоторые правила проверки. Государство - одно из них.

Правило для поля System.State: всякий раз, когда создается рабочий элемент, он принимает настроенное значение по умолчанию. (В моем случае это было Предложено, в вашем случае это могло быть Новое). Если вы попытаетесь изменить значение во время создания рабочего элемента, он выдаст 400 Bad Request.

Что мне делать, если мне нужно создать рабочий элемент с определенным состоянием?

На данный момент я нашел решение сделать два звонка. Один для создания рабочего элемента, а другой для изменения состояния рабочего элемента на желаемое.

CreateWorkItem()
{
 var result = await _client.Post(url, jsonData);
 var result2 = await _client.Put(result.id, jsonData); // or maybe just the state
 return Ok(result2);
}
person Pranshu Jawade    schedule 02.02.2021