【问题标题】:How to create Azure DevOps task via rest api如何通过 rest api 创建 Azure DevOps 任务
【发布时间】:2021-01-19 20:11:40
【问题描述】:

我写了一些 PowerShell functions 来帮助我更快地创建用户故事,这一切都很好,但是现在我一直在搞清楚如何为用户故事/工作项创建任务,并且显然要分配它们到特定的工作项。

我也找不到任何描述这一点的文档。 我几乎想象我需要使用 uri "https://dev.azure.com/$($Organisation)/$Project/_apis/wit/workitems/`$Task?api-version=5.1" 但我不能了解如何将其与工作项相关联,作为其中的一部分或之后。

谁能帮助或指出一些实际的文档,好吗?

编辑:在寻找其他东西时,我偶然发现了this,但遗憾的是,这对我来说是错误的,所以它现在可能已被弃用......

编辑;感谢大家的帮助。这现在对我有用 这是我的代码,以防将来某天对某人有用:

#96116 is the parent work item, 96113 the child task
$ContentType = "application/json-patch+json"
$Token = System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PersonalAccessToken)"))
$Header = @{Authorization = 'Basic ' + $Token;accept=$ContentType}
$uri = "https://dev.azure.com/$Organisation/$Project/_apis/wit/workitems/96113?api-version=6.1-preview.3"
$body= @'
[
  {
    "op": "add",
    "path": "/relations/-",
    "value": {
      "rel": "System.LinkTypes.Hierarchy-Reverse",
      "url": "https://dev.azure.com/$Organisation/$Project/_apis/wit/workitems/96113",
      "attributes": {
          "isLocked": false,
          "name": "Parent"
      }
    }
  }
]
'@
Invoke-RestMethod -Uri $uri -Method PATCH -Headers $Header -Body $Body -ContentType $contentType

【问题讨论】:

标签: powershell azure-devops-rest-api


【解决方案1】:

您可以按照以下步骤创建一个新的Task,并将指定的User Story链接为其Parent新的Task

  1. 使用端点“Work Items - Create”创建新的Task

  2. 使用端点“Work Items - Update”链接指定的User Story作为Parent

    • 请求 URI
      PATCH https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{id}?api-version=6.1-preview.3
      
    • 必需的标头
      Content-Type: application/json-patch+json
      
    • 请求正文
      [
        {
          "op": "add",
          "path": "/relations/-",
          "value": {
            "rel": "System.LinkTypes.Hierarchy-Reverse",
            // This is the URL of the linked parent work item.
            "url": "https://dev.azure.com/{organization}/{project}/_apis/wit/workItems/{parent work item ID}",
            "attributes": {
                "isLocked": false,
                "name": "Parent"
            }
          }
        }
      ]
      

我已经测试过这个方法,它可以正常工作。

【讨论】:

    【解决方案2】:

    如上所述,添加关系可以在创建后使用单独的 PATCH 请求完成,但您也可以在一次调用中组合多个 Work Item Tracking 请求。您需要 POST 到 batch 端点并发送 JsonPatchDocuments 数组:

    PATCH https://dev.azure.com/{organization}/{project}/_apis/wit/$batch?api-version=2.2
    "Content-Type": "application/json"
    "Accept": "application/json"
    "Authorization": "Basic {PAT}"
    
    [
        {
             "method": "PATCH",
             // Replace $Task below with the WIT you want to create
             "uri": "/{Project}/_apis/wit/workitems/$Task?api-version=2.2",
             "headers": { "Content-Type": "application/json-patch+json" },
             "body": [
                  { "op": "add", "path": "/fields/System.Title", "value": "Customer can sign in using their Microsoft Account" },
    
                  // Indicates new work item instead of an update. Each new work item uses a unique negative number in the batch.
                  { "op": "add", "path": "/id", "value": "-1" }, 
    
                  {
                      "op": "add",
                      "path": "/relations/-",
                      "value": {
                          "rel": "System.LinkTypes.Hierarchy-Reverse",
                          "url": "https://dev.azure.com/{organization}/{project}_apis/wit/workitems/{work item id to link to}"
                      }
                  }
              ]
         }
    ]
    

    使用此 API,您还可以在一次调用中创建工作项树。您使用否定 ID 将工作项链接在一起,并在批处理执行时将它们转换为真实的工作项 ID。

    批处理 API 的 Docsr 在这里:

    【讨论】:

    • 谢谢,这当然也可能有用...
    【解决方案3】:

    Microsoft 似乎有 creatingdeletingupdating 工作项的文档。

    你的猜测很接近。这是提供的示例:

    请求

    POST https://dev.azure.com/fabrikam/{project}/_apis/wit/workitems/${type}?api-version=6.1-preview.3
    

    身体

    [
      {
        "op": "add",
        "path": "/fields/System.Title",
        "from": null,
        "value": "Sample task"
      }
    ]
    

    回应

    {
      "id": 131489,
      "rev": 1,
      "fields": {
        "System.AreaPath": "CustomProcessPrj",
        "System.TeamProject": "CustomProcessPrj",
        "System.IterationPath": "CustomProcessPrj",
        "System.WorkItemType": "Task",
        "System.State": "New",
        "System.Reason": "New",
        "System.CreatedDate": "2017-10-06T01:04:51.57Z",
        "System.CreatedBy": {
          "displayName": "Jamal Hartnett",
          "url": "https://vssps.dev.azure.com/fabrikam/_apis/Identities/d291b0c4-a05c-4ea6-8df1-4b41d5f39eff",
          "_links": {
            "avatar": {
              "href": "https://dev.azure.com/mseng/_apis/GraphProfile/MemberAvatars/aad.YTkzODFkODYtNTYxYS03ZDdiLWJjM2QtZDUzMjllMjM5OTAz"
            }
          },
          "id": "d291b0c4-a05c-4ea6-8df1-4b41d5f39eff",
          "uniqueName": "fabrikamfiber4@hotmail.com",
          "imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=d291b0c4-a05c-4ea6-8df1-4b41d5f39eff",
          "descriptor": "aad.YTkzODFkODYtNTYxYS03ZDdiLWJjM2QtZDUzMjllMjM5OTAz"
        },
        "System.ChangedDate": "2017-10-06T01:04:51.57Z",
        "System.ChangedBy": {
          "displayName": "Jamal Hartnett",
          "url": "https://vssps.dev.azure.com/fabrikam/_apis/Identities/d291b0c4-a05c-4ea6-8df1-4b41d5f39eff",
          "_links": {
            "avatar": {
              "href": "https://dev.azure.com/mseng/_apis/GraphProfile/MemberAvatars/aad.YTkzODFkODYtNTYxYS03ZDdiLWJjM2QtZDUzMjllMjM5OTAz"
            }
          },
          "id": "d291b0c4-a05c-4ea6-8df1-4b41d5f39eff",
          "uniqueName": "fabrikamfiber4@hotmail.com",
          "imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=d291b0c4-a05c-4ea6-8df1-4b41d5f39eff",
          "descriptor": "aad.YTkzODFkODYtNTYxYS03ZDdiLWJjM2QtZDUzMjllMjM5OTAz"
        },
        "System.Title": "Sample task",
        "Microsoft.VSTS.Common.StateChangeDate": "2017-10-06T01:04:51.57Z",
        "Microsoft.VSTS.Common.Priority": 2
      },
      "_links": {
        "self": {
          "href": "https://dev.azure.com/fabrikam/_apis/wit/workItems/131489"
        },
        "workItemUpdates": {
          "href": "https://dev.azure.com/fabrikam/_apis/wit/workItems/131489/updates"
        },
        "workItemRevisions": {
          "href": "https://dev.azure.com/fabrikam/_apis/wit/workItems/131489/revisions"
        },
        "workItemHistory": {
          "href": "https://dev.azure.com/fabrikam/_apis/wit/workItems/131489/history"
        },
        "html": {
          "href": "https://dev.azure.com/fabrikam/web/wi.aspx?pcguid=20cda608-32f0-4e6e-9b7c-8def7b38d15a&id=131489"
        },
        "workItemType": {
          "href": "https://dev.azure.com/fabrikam/aaee31d9-14cf-48b9-a92b-3f1446c13f80/_apis/wit/workItemTypes/Task"
        },
        "fields": {
          "href": "https://dev.azure.com/fabrikam/_apis/wit/fields"
        }
      },
      "url": "https://dev.azure.com/fabrikam/_apis/wit/workItems/131489"
    }
    

    【讨论】:

    • 您好,感谢您的广泛回答。我没有看到我创建的任务如何与工作项相关联(?)......您链接到的那些页面是我最初编写我在帖子中链接到的模块时使用的页面。使用您在答案中输入的代码只会创建一个孤立的任务,然后我必须手动将其与工作项相关联,这违背了我想做的事情的目的,我认为......:-/跨度>
    • 我的错误,我现在看到您正在寻找关联任务,而不是创建新任务。不幸的是,我不知道如何使用公共 API 链接任务。
    猜你喜欢
    • 2019-08-24
    • 2019-11-23
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多