Customizando WorkItem no TFS 2010

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

    <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>

Agora temos que definir as transactions entre os states conforme a figura abaixo

Transaction 1 – New to Proposed
    <TRANSITION from="" to="Proposed">
	    <REASONS>
	        <DEFAULTREASON value="New" />
	    </REASONS>
	    <FIELDS>
	        <FIELD refname="System.AssignedTo">
	            <COPY from="currentuser" />
	        </FIELD>
	    </FIELDS>
    </TRANSITION>
Transaction 2 – Proposed to Active
        <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>
Transaction 3 – Active to Proposed
        <TRANSITION from="Active" to="Proposed">
	    <REASONS>
	        <DEFAULTREASON value="Investigation Complete" />
	    </REASONS>
	</TRANSITION>
Transaction 4 – Proposed to Closed
        <TRANSITION from="Proposed" to="Closed">
	    <REASONS>
	        <DEFAULTREASON value="Rejected" />
	    </REASONS>
	</TRANSITION>
Transaction 5 – Active to Resolved
        <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>
Transaction 6 – Resolved to Active
        <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>
Transaction 7 – Resolved to Closed
        <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>

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!

Leia mais

Sobre Leandro Prado

Leandro Silveira Prado é graduado em Sistemas de Informação pela PUC-PR, trabalho com desenvolvimento WEB desde 2003. Possui uma vasta experiência em integração de sistemas ja prestou serviços a grandes empresas como FBits Fábrica de Software, Instituto Curitiba de Informática, América Latina Logística e atualmente trabalha como Consultor ALM na especificações.com. Fanático por futebol e torcedor do melhor time do paraná - COXA