> ## Content Index
> Fetch the complete content index at: https://www.azurebrasil.cloud/llms.txt
> Use this file to discover other available public pages before exploring further.

# Manipulando Work Items no Azure Devops pela API REST
- URL: https://www.azurebrasil.cloud/blog/manipulando-work-items-no-azure-devops-pela-api-rest/
- Published: 2024-08-29T12:06:09.000Z
- Updated: 2024-09-11T16:08:50.000Z
- Author: Rafael dos Santos

Ola pessoALL,

Com o crescimento do [PowerEmbedded](http://powerembedded.com.br/?ref=azurebrasil.cloud) estamos com um desafio de gerenciar melhor os tickets de suporte e as demandas dos usuários. Um das necessidades é que fosse fácil para o time de desenvolvimento ter visibilidade e atrelar isso nos commits/branches. Como utilizamos o Azure Devops para controlar o código e tarefas do sistema, decidimos por integrar a criação dos tickets de suporte direto da plataforma no nosso board.

Vou listar aqui os passos necessários para fazer a integração utilizando a API REST do Azure Devops.

[Get started with the REST APIs for Azure DevOps Services and Azure DevOps Server - Azure DevOps Services REST APILearn the basic patterns for using the REST APIs for Azure DevOps Services and Azure DevOps Server.![](https://learn.microsoft.com/favicon.ico)Microsoft Learnmijacobs![](https://learn.microsoft.com/en-us/media/open-graph-image.png)](https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-7.2&ref=azurebrasil.cloud)

> Edit 2024-09-11: Vídeo contendo os passos demonstrados aqui no artigo

### Autenticação

Para nossa integração escolhi fazer a autenticação por meio de Service Principal para facilitar o lado do desenvolvimento, mas poderia fazer via Identidade Gerenciada para aumentar o nível de segurança.

Precisaremos referenciar 3 pacotes no nosso projeto:

- Azure.Identity
- Microsoft.TeamFoundationServer.Client
- Microsoft.VisualStudio.Services.InteractiveClient

Para comunicar com a API precisaremos de uma instância da classe **VssConnection**, para facilitar estou registrando ela no contêiner do .net core e a partir dela escolho qual cliente vou usar.

  
  services.AddSingleton(x =>
    {
        var credential = new ClientSecretCredential("seu-tenant-id", "seu-client-id", "seu-client-secret");
        var vssAadCredentials = new VssAzureIdentityCredential(credential);
        var orgUrl = new Uri(new Uri("https://dev.azure.com"), "nome-da-organizacao");
        return new VssConnection(orgUrl, vssAadCredentials);
    });

### Trabalhando com Work Items

Agora que temos nossa autenticação definida, precisamos apenas utilizar o cliente correto para manipular os items do nosso Azure Devops, vou deixar 2 exemplos aqui de listar work items e criar um work item.

  
    public partial class SupportController
    {
        public async Task Index(
            [FromServices] VssConnection connection)
        {
            var client = connection.GetClient();
            var workItems = await client.GetWorkItemsAsync("nome-do-projeto", new[] { 638, 668 });
    
            return View(workItems);
        }
    }

No código a cima, os números 638 e 668 são os IDs dos work items no projeto.

![](https://storage.ghost.io/c/00/52/0052dced-0017-4d07-b190-1f5c48e0ab59/content/images/2024/08/image-28.png)

Para Criar um work item podemos utilizar o seguinte código:

  `
    var patchDocument = new JsonPatchDocument
    {
        new JsonPatchOperation()
        {
            Operation = Operation.Add,
            Path = "/fields/System.Title",
            Value = title
        }
    };

    try
    {

        var result = await client.CreateWorkItemAsync(patchDocument, project, "bug");
        Console.WriteLine($"Work item created: Id = {result.Id}");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        return -1;
    }
  `

Referências:

- [https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-7.2](https://learn.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-7.2&ref=azurebrasil.cloud)

- [https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/authentication-guidance?view=azure-devops](https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/authentication-guidance?view=azure-devops&ref=azurebrasil.cloud)

- [https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/client-libraries/samples?view=azure-devops#authentication](https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/client-libraries/samples?view=azure-devops&ref=azurebrasil.cloud#authentication)

- [https://github.com/microsoft/azure-devops-auth-samples/tree/master/ServicePrincipalsSamples/ClientLibsNET](https://github.com/microsoft/azure-devops-auth-samples/tree/master/ServicePrincipalsSamples/ClientLibsNET?ref=azurebrasil.cloud)

- [https://learn.microsoft.com/en-us/azure/devops/integrate/concepts/dotnet-client-libraries?view=azure-devops](https://learn.microsoft.com/en-us/azure/devops/integrate/concepts/dotnet-client-libraries?view=azure-devops&ref=azurebrasil.cloud)

- [https://medium.com/@sandeepsinh/create-work-item-with-rest-api-in-azure-devops-28f979a12f37](https://medium.com/@sandeepsinh/create-work-item-with-rest-api-in-azure-devops-28f979a12f37?ref=azurebrasil.cloud)

Espero que tenham gostado do artigo e me contem nos comentários se vocês pensam em utilizar a integração com o Azure Devops também.

[]s e até a próxima pessoALL.