今からでも間に合う

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

Azure DevOps REST API: Exploring List Iteration and Area Path

list iteration path and area path using azure devops rest api.

環境

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

nugetパッケージ

  • Microsoft.TeamFoundationServer.Client [19.255.1]
  • Microsoft.TeamFoundationServer.InteractiveClient [19.255.1]

コード

WorkItemTrackingの、
WorkItemClassificationNodeを使うと取得できる。

ただし、誰もが通る罠として、depthを指定しないとHasChildrenはtrueだけどChildrenがnullで返って来るというのがある。

using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using System;

namespace AzureAccess
{
    public static class Extensions
    {
        public static string DisplayAreaPath(this WorkItemClassificationNode node)
        {
            return node.Path.Replace("\\Area", "");
        }
        public static string DisplayIterationPath(this WorkItemClassificationNode node)
        {
            return node.Path.Replace("\\Iteration", "");
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            var connection = GetConnection(false);
            using (var c = connection.GetClient<WorkItemTrackingHttpClient>())
            {
                var area = c.GetClassificationNodeAsync(Define.ProjectName, TreeStructureGroup.Areas, depth: 10).Result;
                DisplayPath(area, TreeStructureGroup.Areas);

                var ite = c.GetClassificationNodeAsync(Define.ProjectName, TreeStructureGroup.Iterations, depth: 10).Result;
                DisplayPath(ite, TreeStructureGroup.Iterations);

                void DisplayPath(WorkItemClassificationNode parent, TreeStructureGroup g)
                {
                    Console.WriteLine(g == TreeStructureGroup.Areas ? parent.DisplayAreaPath() : parent.DisplayIterationPath());
                    if (parent.HasChildren.Value)
                    {
                        foreach (var item in parent.Children)
                        {
                            DisplayPath(item, g);
                        }
                    }
                }
            }
            Console.ReadLine();
        }
  
        private static VssConnection GetConnection(bool userPat)
        {
            var uri = new Uri(Define.URL);//https://dev.azure.com/{organization}/
            if (userPat)
            {
                var credentials = new VssBasicCredential("", Define.PAT);
                return new VssConnection(uri, credentials);
            }
            else
            {
                var credentials = new VssClientCredentials();
                return new VssConnection(uri, credentials);
            }
        }
    }
}

参考

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

learn.microsoft.com

プライバシーポリシー


d払いポイントGETモール