.NET クライアント ライブラリを使用して Azure DevOps Services でバグを作成する

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

新しいバグ (または作業項目) の作成はかなり簡単です。 フィールド値を設定し、JSON パッチ オブジェクトを REST エンドポイントに送信するだけで済みます。

前提条件

作業項目を作成するには、次のものが必要です。

  • Azure DevOps Services の組織。 お持ちでない場合は、無料で作成できます
  • 個人用アクセス トークンを 作成する方法を確認する
  • C# 開発環境では、Visual Studio を使用 できます

Visual Studio で C# プロジェクトを作成する

Visual Studio での C# プログラミングの詳細については、Visual Studio の C# プログラミングに関するドキュメントを 参照してください

C# コードの内容

次のコード サンプルでは、いくつかのことが起こっています。

  1. 認証
    1. PAT を使用して資格情報を作成する
    2. Azure DevOps Services URI と資格情報を使用して VSSConnection を作成する
  2. VSSConnection を使用したクライアントの取得
  3. バグの作成
    1. フィールド値を設定するオブジェクトの配列を作成する
    2. その配列をシリアル化された json オブジェクトに変換する
    3. シリアル化された json オブジェクトを REST エンドポイントに送信する

C# のコード スニペット

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
using Microsoft.VisualStudio.Services.WebApi.Patch;
using Microsoft.VisualStudio.Services.WebApi;
using System.Net.Http.Headers;
using System.Net.Http;
using Newtonsoft.Json;

 
public class CreateBug 
{
    readonly string _uri;
    readonly string _personalAccessToken;
    readonly string _project;

    /// <summary>
    /// Constructor. Manually set values to match your organization. 
    /// </summary>
    public CreateBug()
    {
        _uri = "https://dev.azure.com/{orgName}";
        _personalAccessToken = "personal access token";
        _project = "project name";
    }

    /// <summary>
    /// Create a bug using the .NET client library
    /// </summary>
    /// <returns>Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem</returns>    
    public WorkItem CreateBugUsingClientLib()
    {
        Uri uri = new Uri(_uri);
        string personalAccessToken = _personalAccessToken;
        string project = _project;

        VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken);
        JsonPatchDocument patchDocument = new JsonPatchDocument();

        //add fields and their values to your patch document
        patchDocument.Add(
            new JsonPatchOperation()
            {
                Operation = Operation.Add,
                Path = "/fields/System.Title",
                Value = "Authorization Errors"
            }
        );

        patchDocument.Add(
            new JsonPatchOperation()
            {
                Operation = Operation.Add,
                Path = "/fields/Microsoft.VSTS.TCM.ReproSteps",
                Value = "Our authorization logic needs to allow for users with Microsoft accounts (formerly Live Ids) - http:// msdn.microsoft.com/library/live/hh826547.aspx"
            }
        );

        patchDocument.Add(
            new JsonPatchOperation()
            {
                Operation = Operation.Add,
                Path = "/fields/Microsoft.VSTS.Common.Priority",
                Value = "1"
            }
        );

        patchDocument.Add(
            new JsonPatchOperation()
            {
                Operation = Operation.Add,
                Path = "/fields/Microsoft.VSTS.Common.Severity",
                Value = "2 - High"
            }
        );
        VssConnection connection = new VssConnection(uri, credentials);
        WorkItemTrackingHttpClient workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>();

        try
        {
            WorkItem result = workItemTrackingHttpClient.CreateWorkItemAsync(patchDocument, project, "Bug").Result;

            Console.WriteLine("Bug Successfully Created: Bug #{0}", result.Id);

            return result;
        }
        catch (AggregateException ex)
        {
            Console.WriteLine("Error creating bug: {0}", ex.InnerException.Message);
            return null;
        }
    }
}

次のステップ