我正在创建一个从“某物”到 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<WorkItemStore>();
它可以毫无问题地保存!但在这种情况下,我不知道如何设置BypassRules
为true
. 此属性在创建对象时是只读的WorkItemStore
,如果我尝试将工作流步骤设置为“新建”以外的其他内容,则会出现验证错误。
所以,我的基本问题是:如何通过 API 在 TFS 中创建工作项并能够更改State
这个新创建的项目中的字段?