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:
- Codificando Eventos de Work Items no TFS – Entendendo a API
- Codificando Eventos de Work Items no TFS – Alterando o status de work items linkados
- Codificando Eventos de Work Items no TFS – TFS Event Workflows
- Codificando Eventos de Work Items no TFS – Sumarizando o esforço com o TFS Event Workflow
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.
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.
Ao alterar o status da Feature para Done, todos os PBI´s filhos são alterados também para Done.
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