0

VSTS API を使用してアイテムのすべての親リンクを削除し、それらの親を関連アイテムとして設定しようとしています。

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

リレーションを削除するために必要な「パス」がどのように機能するかを完全には理解していません。一貫性のない結果が得られ、機能する場合と機能しない場合があります (したがって、明らかに間違っています)。

私は、単にAPI によって返された順序であると仮定しています。たとえば、次のようになります。

  • インデックス[0] アイテム
  • 索引[1]項目
  • Index[2] 項目 <- これは削除したい項目なので、index 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;
    
    }
    

ドキュメントには、パスが次のように記載されています。

追加、置換、削除、またはテストする値へのパス。特定の関係については、「関係/ID」を使用します。すべての関係について、「/relations/-」を使用します。

もちろん、インデックスはIDではありませんが、関係/IDを正確に取得するにはどうすればよいですか?

4

2 に答える 2

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, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "typeKey": "PatchOperationFailedException", "errorCode": 0, "eventId": 3000 }

代わりに0 と 1 を使用してもid問題ありません。

'replace'私が間違っているかもしれませんが、操作の前に操作を使用するとエラーが発生する可能性があると推測できました'add'。たとえば、値を変更 (つまり、「置換」操作) する前に、リンクの'comment'内側にを追加する必要があります。'attributes'

于 2017-01-21T20:31:13.170 に答える