今からでも間に合う

技術を学ぶのは今からでも遅くない

C#を使ってAzure DevOpsでWorkItemを自動作成

C#でazure devops rest apiを使い、WorkItemを作成する。

環境

  • Visual Studio 2022 Community
  • .NET Framework 4.8 Console App

nugetパッケージ

Microsoft.TeamFoundationServer.Client [19.255.1]

事前準備

azure devops側でPersonal Access Tokenを取得しておく

コード

using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using System;
using System.Collections.Generic;
  
namespace AzureAccess
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var uri = new Uri(Define.URL);//https://dev.azure.com/{organization}/
            var credentials = new VssBasicCredential("", Define.PAT);
  
            // 接続
            var connection = new VssConnection(uri, credentials);
  
            using (var witc = connection.GetClient<WorkItemTrackingHttpClient>())
            {
                var patchDocument = new Microsoft.VisualStudio.Services.WebApi.Patch.Json.JsonPatchDocument();
                patchDocument.Add(new Microsoft.VisualStudio.Services.WebApi.Patch.Json.JsonPatchOperation()
                {
                    Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                    Path = "/fields/System.IterationPath",
                    Value = $"{Define.ProjectName}\\Iteration1"
                });
                patchDocument.Add(new Microsoft.VisualStudio.Services.WebApi.Patch.Json.JsonPatchOperation()
                {
                    Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                    Path = "/fields/System.AreaPath",
                    Value = $"{Define.ProjectName}\\TestArea1"
                });
                patchDocument.Add(new Microsoft.VisualStudio.Services.WebApi.Patch.Json.JsonPatchOperation()
                {
                    Operation = Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                    Path = "/fields/System.Title",
                    Value = "create task from code"
                });
                //こちらの書き方でも可。ただし、Pathの最初の「/」を勝手に付加するので不要。つけてると例外になる
                var patchDocument2 = VssJsonPatchDocumentFactory.ConstructJsonPatchDocument(
                    Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                    new Dictionary<string, object>
                    {
                        {"fields/System.IterationPath", $"{Define.ProjectName}\\Iteration1" },
                        {"fields/System.AreaPath", $"{Define.ProjectName}\\TestArea1" },
                        {"fields/System.Title", "create task from code" },
                    });
                //validateOnlyをtrueにしておくと、実際には追加しないが追加後のWorkItemを確認することができる。
                //この場合、Idは割り振られない
                var ret = witc.CreateWorkItemAsync(patchDocument, Define.ProjectName, "Task", validateOnly: true).Result;
            }
            Console.Read();
        }
    }
}

(追記)おまけ

こんな風にラップしておいたほうが親切かな。

        internal class JsonPatchDocumentBuilder
        {
            private Dictionary<string, object> _properties;

            public JsonPatchDocumentBuilder()
            {
                _properties = new Dictionary<string, object>();
            }
            public JsonPatchDocumentBuilder IterationPath(string path)
            {
                _properties.Add("fields/System.IterationPath", path);
                return this;
            }
  
            public JsonPatchDocumentBuilder AreaPath(string path)
            {
                _properties.Add("fields/System.AreaPath", path);
                return this;
            }
  
            public JsonPatchDocumentBuilder Title(string title)
            {
                _properties.Add("fields/System.Title", title);
                return this;
            }
  
            public JsonPatchDocumentBuilder Description(string desc)
            {
                _properties.Add("fields/System.Description", desc);
                return this;
            }
  
            public JsonPatchDocumentBuilder AssignedTo(string user)
            {
                _properties.Add("fields/System.AssignedTo", user);
                return this;
            }
  
            public JsonPatchDocument Build()
                => VssJsonPatchDocumentFactory.ConstructJsonPatchDocument(
                    Microsoft.VisualStudio.Services.WebApi.Patch.Operation.Add,
                    _properties);
        }

参考

基本的に使用するクライアントは以下のリファレンスと対照性があるので、やりたいことをリファレンスで調べてからコードに落としていくと楽。

learn.microsoft.com

プライバシーポリシー


d払いポイントGETモール