Создать задачу из шаблона через API в Microsoft Team Foundation Server 2018 - PullRequest
0 голосов
/ 16 ноября 2018

Я создаю интеграцию от нашей среды тестирования (Selenium) до Team Foundation Server (TFS) 2018 с использованием C # (наши тесты уже написаны на нем) - интеграция будет генерировать рабочие элементы в TFS на основе результатов тестирования. Я хотел бы создать рабочий элемент из шаблона, и я не могу найти никакой документации по этому вопросу. Я использую клиентскую библиотеку TFS от Microsoft, найденную здесь .

Я могу вытащить шаблон из TFS:

var client = new HttpClient()
// Client auth stuff removed
var method = new HttpMethod("GET");
var httpRequestMessage = new HttpRequestMessage(method, "http://server:port/tfs/collection/team/project/_api/wit/templates/12345abc");
var httpResponseMessage = client.SendAsync(httpRequestMessage).Result;
WorkItemTemplate tfs_template = httpResponseMessage.Content.ReadAsAsync<WorkItemTemplate>().Result;

API для создания новых рабочих элементов здесь выглядит довольно просто, но я не могу найти какой-либо способ соединить два действия или способ применить шаблон с помощью этого вызова. Можно ли создать рабочий элемент через API с шаблоном, и если да, есть ли для него документация?

1 Ответ

0 голосов
/ 16 ноября 2018

Вы не можете создать рабочий элемент из шаблона рабочего элемента. Вы можете использовать шаблоны рабочих элементов, чтобы увидеть, какие поля содержат некоторые значения по умолчанию. Этот пример для нового рабочего элемента из шаблона с остальными api:

        using Microsoft.TeamFoundation.Core.WebApi;
        using Microsoft.TeamFoundation.Core.WebApi.Types;
        using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
        using Microsoft.VisualStudio.Services.Common;
        using Microsoft.VisualStudio.Services.WebApi;
        using Microsoft.VisualStudio.Services.WebApi.Patch;
        using Microsoft.VisualStudio.Services.WebApi.Patch.Json;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;

        namespace ConsoleApp1
        {
            class Program
            {
                static string ServiceURL = "https://your_name.visualstudio.com";
                static string PAT = "your pat";
                static void Main(string[] args)
                {
                    string projectName = "your project";
                    string templateName = "Critical bug";

                    /*connect to service. I use VSTS. In your case: 
                    VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssCredential());
                    https://docs.microsoft.com/ru-ru/azure/devops/integrate/get-started/client-libraries/samples?view=vsts
                    */

                    VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssBasicCredential(string.Empty, PAT));
                    //get clients
                    var WitClient = connection.GetClient<WorkItemTrackingHttpClient>();
                    var ProjectClient = connection.GetClient<ProjectHttpClient>();

                    var project = ProjectClient.GetProject(projectName).Result;

                    //get context for default project team
                    TeamContext tmcntx = new TeamContext(project.Id, project.DefaultTeam.Id);

                    //get all template for team
                    var templates = WitClient.GetTemplatesAsync(tmcntx).Result;

                    //get tempate through its name
                    var id = (from tm in templates where tm.Name == templateName select tm.Id).FirstOrDefault();

                    if (id != null)
                    {
                        var template = WitClient.GetTemplateAsync(tmcntx, id).Result;

                        JsonPatchDocument patchDocument = new JsonPatchDocument();

                        foreach (var key in template.Fields.Keys) //set default fields from template
                            patchDocument.Add(new JsonPatchOperation()
                            {

                                Operation = Operation.Add,
                                Path = "/fields/" + key,
                                Value = template.Fields[key]

                            });

                        //add any additional fields
                        patchDocument.Add(new JsonPatchOperation()
                        {

                            Operation = Operation.Add,
                            Path = "/fields/System.Title",
                            Value = "My critical bug"

                        });

                        var newWorkItem = WitClient.CreateWorkItemAsync(patchDocument, projectName, template.WorkItemTypeName).Result;
                    }            

                }
            }
        }

Мой шаблон: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...