如何通过API更改新创建的TFS工作项的工作流状态?

时间:2013-11-14 15:13:13

标签: c# tfs tfs-sdk tfs2013

我正在创建一个工作项迁移应用程序,从“某事”到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字段?

1 个答案:

答案 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)