Мы переходим на TFS 2018, и в настоящее время мы используем API C # TFS 2013 для подключения к TFS, а также для создания и обновления рабочих элементов. Я пытаюсь найти лучший подход для перехода с использования API 2013 на новый API 2018.
В настоящее время процесс создает пустой рабочий элемент с помощью метода NewWorkItem () в WorkItemStore, и его поля заполняются в различных частях расширения задания на основе некоторых правил, и мы вызываем метод validate () рабочего элемента, чтобы проверить, соответствуют ли значения вошли в порядке. Затем строятся отношения между родителем и дочерним элементом (PBI и Task), и все отправляется одновременно с использованием метода BatchSave из WorkItemStore.
Я пытаюсь найти лучший способ повторить это в API TFS 2018 и начал использовать WorkItemTrackingHttpClient, более конкретно, метод CreateWorkItemAsync для создания WorkItem и указания полей с помощью JsonPatchDocument, это лучший подход или мы должны использовать другой? Проблема с этим подходом состоит в том, что мы должны продолжать отправлять изменения в значениях полей WorkItem (разные поля задаются в разных частях расширения задания), а не устанавливать все поля WorkItem, устанавливая его родительский элемент. или ребенка, а затем подать все сразу.
//TFS 2013:
var workItem = Store.Projects[TeamProject].WorkItemTypes[workItemType].NewWorkItem();
//field assignment
workItem.Fields[CoreField.AssignedTo].Value = Store.TeamProjectCollection.AuthorizedIdentity.DisplayName;
//field validation
workItem.Validate().Cast<Field>().Any(field => field.ReferenceName == referenceName)
//link creation
parent.WorkItemLinks.Add(new WorkItemLink(Store.WorkItemLinkTypes[Fields.RequirementToTaskRelationName].ForwardEnd, childrenId));
//batch save after everything done
Store.BatchSave(new[] { parentWorkItem, taskWorkItem });
//TFS 2018:
//work item creation
WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
var workItem = witClient.CreateWorkItemAsync(document, TeamProject, workItemType).Result;
//fields assignment
var document = new JsonPatchDocument();
AddFieldValue(document, CoreFieldReferenceNames.Title, GetHtmlFieldValue(false, Event.Title));