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

我正在创建一个工作项迁移应用程序,从“某事”到TFS 2013,我想让TFS工作项处于相应的工作流状态,就像在源系统中一样。 例如,如果源工作项处于“已关闭”状态,我希望它在TFS中处于“完成”状态。

我在本文中遵循了建议,建议将WorkItemStore对象的BypassRules属性设置为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(); 

如您所见,此示例不违反任何validation规则,而workItem.Validate().Count返回0 。 但是对workItem.Save()的调用会引发以下exception:

其他信息:TF26212:Team Foundation Server无法保存您的更改。 工作项类型定义可能存在问题。 再试一次或联系您的Team Foundation Server管理员。

我在调用Save()方法之前检查了BypassRules是否设置为true 。 此外, workItem.IsValid也是true

有趣的是,如果我改变了获取WorkItemStore对象的方式,请从

 var store = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules); 

 var store = collection.GetService(); 

它可以保存没有任何问题! 但在这种情况下,我不知道如何将BypassRules设置为true 。 创建WorkItemStore对象时,此属性是只读的,如果我尝试将工作流步骤设置为“新建”以外的其他内容,则会出现validation错误。

所以,我的基本问题是: 如何通过API在TFS中创建工作项,并能够在这个新创建的项中更改State字段?

好吧,伙计们,正如经常发生的那样,答案是手动的。 让我解释。

我在问题中引用的文章明确指出:

您需要成为项目收集服务帐户的成员

但它没有提到您无法轻松地将用户或组添加到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 

本文将对此进行详细说明, 该文章正确描述了具有正确分辨率的情况。 可以在以下位置找到TFSSecurity.exe:%ProgramFiles(x86)%\ Microsoft Visual Studio \ Common7 \ IDE(例如C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE)