Обновить отношения/ссылки рабочих элементов в VS Team Services

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

https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items#update-work-items

Я не совсем понимаю, как работает «Путь», необходимый для удаления отношений - я получаю противоречивые результаты, где иногда это работает, иногда нет (поэтому я явно делаю это неправильно)

Я делаю предположение, что это просто порядок, возвращаемый API. Так, например:

  • Индекс[0] элемент
  • Индекс[1] элемент
  • Элемент Index[2] ‹ — это тот, который я хочу удалить, поэтому я использую индекс 2

        public void RemoveParentLink(int pathIndex, int itemToUpdate, string link)
    {
    
        JsonPatchDocument patchDocument = new JsonPatchDocument();
    
        patchDocument.Add(
           new JsonPatchOperation()
           {
               Operation = Operation.Remove,
               Path = $"/relations/{pathIndex}"
    
           }
        );
    
        WorkItem result = witClient.UpdateWorkItemAsync(patchDocument, itemToUpdate).Result;
    
    }
    

В документации указано, что Path:

Путь к значению, которое вы хотите добавить, заменить, удалить или протестировать. Для конкретного отношения используйте «relations/Id». Для всех отношений используйте «/relations/-».

Конечно, индекс НЕ является идентификатором, но как мне точно получить отношение/идентификатор?


person Keeno    schedule 21.01.2017    source источник


Ответы (2)


Использование GetWorkItemAsync или GetWorkItemsAsync с параметром WorkItemExpand.Relations для получения связанных рабочих элементов.

Var workItem=witClient.GetWorkItemAsync(id: [work item id], expand: Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemExpand.Relations).Result.

Тогда индекс — это индекс отношений.

введите здесь описание изображения

person starian chen-MSFT    schedule 23.01.2017

'id' в пути '/relation/id' на самом деле является индексом. Вы получаете определение рабочего элемента, затем 'id' является индексом ссылки в массиве 'relations'. Следовательно, ваше предположение верно.

Доказательство: учитывая рабочий элемент с 2 ссылками, если вы попытаетесь удалить/изменить идентификатор >= 2, он ответит:

{ "$id": "1", "innerException": null, "message": "Индекс вне допустимого диапазона для пути /relations/2.", "typeName": "Microsoft.VisualStudio.Services.WebApi.Patch.PatchOperationFailedException , Microsoft.VisualStudio.Services.WebApi, версия = 14.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a", "typeKey": "PatchOperationFailedException", "errorCode": 0, "eventId": 3000 }

Вместо этого 0 и 1 как id работают нормально.

Я могу ошибаться, но я мог предположить, что вы можете получить ошибку при использовании операции 'replace' перед операцией 'add'. Например, вам нужно добавить 'comment' внутри 'attributes' ссылки перед изменением (т. е. операцией «заменить») ее значения.

person Luca Cappa    schedule 21.01.2017