Depois das festas de final de ano estou começando o ano a todo o vapor, nesses primeiros dias do ano estou estudando TFS – Team Foundation Server 2010 e fui designado a fazer uma customização do status nos WorkItems.
O problema?
Estamos inciando um projeto segundo o padrão Agile, porém esse padrão para cada WorkItem trabalha com os status Active e Resolved e o gerente de projeto queria os mesmos status do CMMI que é Proposed, Active, Resolved e Close.
A solução?
Customizar os workflow de status do Agile baseado no CMMI.
Passo 1
Primeiro de tudo temos que baixar o Team Foundation Server Integration Tools que pode ser encontrado aqui esse plugin serve para nos auxiliar na customização
Passo 2
Depois de instaldo o plugin, vamos exportar o work item do tipo Task para alterar seu workflow, entre em Tools -> Process Editor -> WorkItem Types -> Export WIT
Selecione a collection
Selecione o projeto
Clique em OK e escolha o local para salvar
Passo3
Vamos alterar o workflow, é possivel realizar essa alteração visualmente com o plugin que instalamos no VS, porém depois de alguns testes optei por fazer as alterações direto no arquivo XML
Abra o arquivo Task.xml em um editor (notepad) e procure pela tag (linha 138) veja que temos somente dois states (Active e Resolved) vamos adicionar mais dois states um chamado Proposed e outro chamado Resolved
[sourcecode language=”xml”]
<STATES>
<STATE value="Proposed">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedBy">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</STATE>
<STATE value="Active">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedBy">
<ALLOWEXISTINGVALUE />
<EMPTY />
</FIELD>
</FIELDS>
</STATE>
<STATE value="Resolved">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<EMPTY />
</FIELD>
<FIELD refname="System.AssignedTo">
<ALLOWEXISTINGVALUE />
<REQUIRED />
</FIELD>
</FIELDS>
</STATE>
<STATE value="Closed">
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ClosedBy">
<ALLOWEXISTINGVALUE />
<REQUIRED />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<REQUIRED />
</FIELD>
</FIELDS>
</STATE>
</STATES>
[/sourcecode]
Agora temos que definir as transactions entre os states conforme a figura abaixo
Transaction 1 – New to Proposed
[sourcecode language=”xml”]
<TRANSITION from="" to="Proposed">
<REASONS>
<DEFAULTREASON value="New" />
</REASONS>
<FIELDS>
<FIELD refname="System.AssignedTo">
<COPY from="currentuser" />
</FIELD>
</FIELDS>
</TRANSITION>
[/sourcecode]
Transaction 2 – Proposed to Active
[sourcecode language=”xml”]
<TRANSITION from="Proposed" to="Active">
<REASONS>
<REASON value="Investigate" />
<DEFAULTREASON value="Accepted" />
</REASONS>
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
<SERVERDEFAULT from="clock" />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
<ALLOWEXISTINGVALUE />
<COPY from="currentuser" />
<VALIDUSER />
</FIELD>
</FIELDS>
</TRANSITION>
[/sourcecode]
Transaction 3 – Active to Proposed
[sourcecode language=”xml”]
<TRANSITION from="Active" to="Proposed">
<REASONS>
<DEFAULTREASON value="Investigation Complete" />
</REASONS>
</TRANSITION>
[/sourcecode]
Transaction 4 – Proposed to Closed
[sourcecode language=”xml”]
<TRANSITION from="Proposed" to="Closed">
<REASONS>
<DEFAULTREASON value="Rejected" />
</REASONS>
</TRANSITION>
[/sourcecode]
Transaction 5 – Active to Resolved
[sourcecode language=”xml”]
<TRANSITION from="Active" to="Resolved">
<REASONS>
<DEFAULTREASON value="Complete and Requires Review / Test" />
</REASONS>
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
<READONLY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
<ALLOWEXISTINGVALUE />
<READONLY />
</FIELD>
</FIELDS>
</TRANSITION>
[/sourcecode]
Transaction 6 – Resolved to Active
[sourcecode language=”xml”]
<TRANSITION from="Resolved" to="Active">
<REASONS>
<DEFAULTREASON value="Review/Test Failed" />
</REASONS>
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
<ALLOWEXISTINGVALUE />
<COPY from="currentuser" />
<VALIDUSER />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
<SERVERDEFAULT from="clock" />
</FIELD>
</FIELDS>
</TRANSITION>
[/sourcecode]
Transaction 7 – Resolved to Closed
[sourcecode language=”xml”]
<TRANSITION from="Resolved" to="Closed">
<REASONS>
<DEFAULTREASON value="Review / Test Passed" />
</REASONS>
<FIELDS>
<FIELD refname="Microsoft.VSTS.Common.ActivatedDate">
<READONLY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ActivatedBy">
<ALLOWEXISTINGVALUE />
<READONLY />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedDate">
<SERVERDEFAULT from="clock" />
</FIELD>
<FIELD refname="Microsoft.VSTS.Common.ClosedBy">
<ALLOWEXISTINGVALUE />
<COPY from="currentuser" />
<VALIDUSER />
<REQUIRED />
</FIELD>
</FIELDS>
<ACTIONS>
<ACTION value="Microsoft.VSTS.Actions.Checkin" />
</ACTIONS>
</TRANSITION>
[/sourcecode]
Veja o resultado final do nosso WorkFlow
Passo 4
Depois de alterado nosso workflow, vamos importar nosso arquivo XML para o TFS, clique em Tools -> Process Editor -> Work Item Types -> Import WIT
Selecione o arquivo que customizamos e selecione o projeto que deseja alterar o workflow
Passo 5
Vamos fazer um teste criando um novo Work Item do tipo TASK para ver o resultado do nosso novo workflow, veja abaixo as imagens com todo o workflow customizado
![]() |
![]() |
![]() |
![]() |
![]() |
Qualquer dúvida, opinião, reclamação mande seu comentário!
Um Abraço!
Leandro Prado, Bom dia.
Tenho uma dúvida que foi levantada pela diretoria da empresa onde trabalho!
Temos produtos desenvolvidos em VB6, que estão armazenados no SVN, tem como integrar estes produtos com a ferramentas do TFS? colocar o codigo fonte dentro do repositório do TFS?
Obrigado
Rodrigo
SIM! basta instalar o componente Team Foundation Server MSSCCI Provider 2010 32-bit
Att,
Leandro Prado
Leandro, obrigado.