Как изменить состояние рабочего процесса вновь созданного рабочего элемента TFS через API?
создать приложение для переноса рабочего элемента из "что-то" до TFS 2013, и я хочу, чтобы рабочие элементы TFS находились в соответствующих состояниях рабочего процесса, как в исходной системе. Например, если исходный рабочий элемент находится вЗакрыто" состояние, я хочу, чтобы это было вГотово" состояние в TFS.
Я следовал советам вЭта статья, который предлагает установить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();
это может спасти без каких-либо проблем! Но в этом случае я нене знаю, как установитьBypassRules
вtrue
, Это свойство доступно только для чтения, когдаWorkItemStore
объект создан, и я получаю ошибки проверки, если я пытаюсь установить шаг рабочего процесса в нечто иное, чем "Новый».
Итак, мой основной вопрос:как создавать рабочие элементы в TFS через API и иметь возможность изменятьState
поле в этом новом элементе?