我们正在迁移到TFS 2018,目前我们使用c#TFS 2013 API连接到TFS并创建和更新工作项,我正在寻找最佳方法来将2013 API的使用迁移到新的2018 API。 当前,该流程通过WorkItemStore的NewWorkItem()方法创建一个空白的工作项,并且根据某些规则将其字段填充到作业扩展的不同部分,我们调用工作项的validate()方法来检查值输入可以。然后,在父子(PBI和Task)之间建立关系,并使用WorkItemStore中的BatchSave方法同时提交所有内容。
我正在尝试在TFS 2018 API中找到复制此内容的最佳方法,并开始使用WorkItemTrackingHttpClient,更具体地说是用于创建WorkItem并通过JsonPatchDocument指定字段的CreateWorkItemAsync方法,这是最佳方法还是我们应该使用另一个吗?这种方法的问题在于,我们必须继续提交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));