Continuando a sequência de artigos relacionados a API de eventos do TFS, faremos neste post uma automatização de work items. Neste exemplo, quando uma Feature com diversos Product Backlog Items associados for finalizada, automaticamente finalizaremos os PBI´s associados.

Para acompanhar toda a série, seguem os links dos artigos:

Implementando o método ProcessEvent

Continuando o projeto de exemplo apresentado no artigo anterior, vamos fazer uma implementação do método ProcessEvent para interceptar as modificações realizadas nos work items. O objetivo é que ao se alterar o status de uma Feature para Done, todos os PBI´s filhos desta Feature também serão alterados para Done.

2015-04-23_11-03-32

Duas coisas fundamentais serão necessárias para essa nossa feature:

  • Identificar apenas as modificações nos work items do tipo Feature;
  • Identificar os PBI´s filhos da Feature modificada.

Para isso, utilizamos a WorkItemStore, classe responsável por acessar os Work Items no TFS:

var tfs = new TfsTeamProjectCollection(new Uri(TfsUri));
var store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
var workItem = store.GetWorkItem(id);

if (workItem.Type.Name == "Feature" && workItem.State == "Done")
{
    var children = (from WorkItemLink workItemLink in workItem.WorkItemLinks
                    where workItemLink.LinkTypeEnd.Name == "Child"
                    select store.GetWorkItem(workItemLink.TargetId))
                   .Where(wi => wi.Type.Name == "Product Backlog Item");

    foreach (var child in children)
    {
        child.State = "Done";
        child.Save();
    }
}

Na linha 5, identificamos se o Work Item que está sendo modificado é do tipo Feature e o status é Done.

Depois, buscamos todos os filhos deste Work Item que sejam do tipo Product Backlog Item e alteramos o seu status para Done também.

2015-04-23_11-24-11

Ao alterar o status da Feature para Done, todos os PBI´s filhos são alterados também para Done.

2015-04-23_11-32-31

IMPORTANTE: Esse exemplo é útil, mas o código é muito simplista. O ideal é verificar se todos os status dos PBI´s estão prontos para se mover para Done. Por exemplo, no seu cenário, pode ser que você não queira modificar os status de PBI´s que estejam ainda como New. Outra situação, seria não permitir a modificação da Feature para Done se algum PBI não estiver pronto. Mas independente de cada caso, a maior parte do código para fazer essas verificações estão nesse exemplo.

Para publicar esse plugin, leia o artigo anterior.

No próximo post, veremos como utilizar bibliotecas prontas para capturar esses eventos e utilizar Workflow para manipular itens do TFS.

Exemplo: https://github.com/heberop/L3.AlterandoStatusWIFilhos

Até a próxima!

Publicado originalmente em http://do.net.br/2015/04/codificando-eventos-de-work-items-no-tfs-alterando-o-status-de-work-items-linkados/

Heber Pereira