0

我正在尝试使用 VSTS API 删除项目上的所有父链接,并将这些父链接设置为相关项目。

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

我不完全理解删除关系所需的“路径”是如何工作的——我得到的结果不一致,有时有效,有时无效(所以,我显然做错了)

我假设它只是API 返回的顺序。因此,例如:

  • 索引[0] 项
  • 索引[1] 项
  • Index[2] item <- 这是我要删除的项目,所以我使用索引 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/-”。

索引当然不是 Id,但我如何准确地获得关系/Id?

4

2 回答 2

4

使用带有 WorkItemExpand.Relations 参数的 GetWorkItemAsync 或 GetWorkItemsAsync 来获取链接的工作项。

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

那么索引就是关系的索引。

在此处输入图像描述

于 2017-01-23T05:32:36.140 回答
1

路径中的 ' id''/relation/id'实际上是一个索引。您检索工作项定义,然后是数组'id'中链接的索引。'relations'因此,您的假设是正确的。

证据:给定一个带有 2 个链接的工作项,如果您尝试删除/修改 id >= 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'

于 2017-01-21T20:31:13.170 回答