我正在创建一个工作项迁移应用程序,从“某事”到TFS 2013,我想让TFS工作项处于相应的工作流状态,就像在源系统中一样。例如,如果源工作项处于“已关闭”状态,我希望它在TFS中处于“完成”状态。
我已遵循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
。
有趣的是,如果我改变了我从<{p}}获取WorkItemStore
对象的方式
var store = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);
到
var store = collection.GetService<WorkItemStore>();
它可以毫无问题地保存!但在这种情况下,我不知道如何将BypassRules
设置为true
。创建WorkItemStore
对象时,此属性是只读的,如果我尝试将工作流步骤设置为“新建”以外的其他内容,则会出现验证错误。
所以,我的基本问题是:如何通过API在TFS中创建工作项,并且能够在这个新创建的项目中更改State
字段?
答案 0 :(得分:4)
好的,伙计,正如经常发生的那样,答案是手动的。让我解释一下。
我的问题中的article I referenced明确指出:
您需要成为项目收集服务帐户的成员
但是没有提及您无法轻松地将用户或群组添加到Project Collection Service Accounts
。如果您尝试通过Web访问执行此操作,您将失败 - 只需禁用“添加”按钮。此外,屏幕截图具有误导性,显示帐户为Project Collection Administrators group
的成员。
默认情况下,Project Collection Service Accounts group
包含一个名为Team Foundation Service Accounts
的组。这是您应该添加帐户的组。这可以在名为TFSSecurity.exe的控制台应用程序的帮助下完成:
TFSSecurity.exe /g+ "Team Foundation Service Accounts" "Domain\my-service-account" /server:http://mytfsserver:8080/tfs
这在this article中有详细解释,它正确描述了具有正确分辨率的情况。可以在以下位置找到TFSSecurity.exe: %ProgramFiles(x86)%\ Microsoft Visual Studio \ Common7 \ IDE(例如C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE)