Я создаю приложение миграции рабочего элемента из «чего-то» в TFS 2013 и хочу, чтобы рабочие элементы TFS находились в соответствующих состояниях рабочего процесса, как в исходной системе. Например, если исходный рабочий элемент находится в состоянии «Закрыто», я хочу, чтобы он находился в состоянии «Готово» в TFS.Как изменить состояние рабочего процесса только что созданного рабочего элемента TFS через API?
Я следовал советует в this article, что предполагает установить BypassRules
свойство WorkItemStore
объекта true
для того, чтобы иметь возможность установить CreatedDate
поле. Я полагаю, то же самое относится к изменению состояния рабочего процесса, так как это также требует обхода правил.
Итак, я попытался следующие:
// 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();
Как вы можете видеть, этот образец не нарушает никаких правил проверки, и workItem.Validate().Count
возвращает 0
. Но призыв к workItem.Save()
бросает следующее исключение:
Дополнительная информация: TF26212: Team Foundation Server не смог сохранить изменения. Могут возникнуть проблемы с заданием типа работ . Повторите попытку или свяжитесь с администратором Team Foundation Server .
я дважды проверил, что BypassRules
установлен в true
прямо перед вызовом метода Save()
. Кроме того, workItem.IsValid
также является true
.
Интересный факт заключается в том, что если изменить способ, которым я получить WorkItemStore
объект, из
var store = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);
в
var store = collection.GetService<WorkItemStore>();
он может сохранить без каких-либо проблем! Но в этом случае я не знаю, как установить BypassRules
на true
. Это свойство доступно только для чтения, когда создается объект WorkItemStore
, и я получаю ошибки проверки, если я пытаюсь установить шаг рабочего процесса на нечто иное, чем «Новое».
Итак, мой основной вопрос: Как создавать рабочие элементы в TFS через API и иметь возможность изменять поле State
в этом новом созданном элементе?