Como alterar o estado do fluxo de trabalho do item de trabalho recém-criado do TFS por meio da API?
Estou criando um aplicativo de migração de item de trabalho de "algo" para o TFS 2013 e desejo que os itens de trabalho do TFS estejam em estados de fluxo de trabalho correspondentes como no sistema de origem. Por exemplo, se o item de trabalho de origem estiver no estado "Fechado", quero que ele esteja no estado "Concluído" no TFS.
Tenho seguido aconselha emEste artigo, o que sugere definirBypassRules
propriedade doWorkItemStore
objeto paratrue
a fim de poder definirCreatedDate
campo. Suponho que o mesmo se aplica à alteração do estado do fluxo de trabalho, já que também requer a exclusão de regras.
Então, eu tentei o seguinte:
// obtain collection and authenticate towards it
var collection = new TfsTeamProjectCollection(new Uri(_tfsUrl), cred);
collection.Authenticate();
// get the work item store object
var store = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);
// creating the work item
var workItem = new WorkItem(store.Projects[_tfsProjectName].WorkItemTypes["Product Backlog Item"]);
// setting some standard fields
workItem.Title = "some name";
workItem.Description = "some description";
// validating the work item
if (workItem.Validate().Count > 0)
{
// throw validation rules violated
}
// saving the work item
workItem.Save();
Como você pode ver, esse exemplo não viola nenhuma regra de validação eworkItem.Validate().Count
devolve0
. Mas a chamada paraworkItem.Save()
lança a seguinte exceção:
Informações adicionais: TF26212: Team Foundation Server não pôde salvar suas alterações. Pode haver problemas com a definição do tipo de item de trabalho. Tente novamente ou entre em contato com o administrador do Team Foundation Server.
Eu verifiquei issoBypassRules
está configurado paratrue
logo antes da chamada paraSave()
método. Além daworkItem.IsValid
é tambémtrue
.
O fato interessante é que se eu mudar a maneira de obter oWorkItemStore
objeto, de
var store = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);
para
var store = collection.GetService<WorkItemStore>();
pode salvar sem qualquer problema! Mas neste caso eu não sei como definirBypassRules
paratrue
. Esta propriedade é somente leitura quando oWorkItemStore
objeto é criado, e eu recebo erros de validação se eu tentar definir a etapa do fluxo de trabalho para algo diferente de "Novo".
Então, minha pergunta básica é:como criar itens de trabalho no TFS por meio da API e ser capaz de alterarState
campo neste item recém-criado?