我正在創建一個工作項目遷移應用程序,從「東西」到TFS 2013,我希望TFS工作項目在源系統中處於相應的工作流程狀態。例如,如果源工作項處於「關閉」狀態,我希望它在TFS中處於「完成」狀態。如何通過API更改新創建的TFS工作項的工作流狀態?
我按照建議在this article,這表明對WorkItemStore
對象的屬性BypassRules
爲了能夠設置CreatedDate
字段設置爲true
。我想,這同樣適用於更改工作流程狀態,因爲它也需要繞過規則。
所以,我試過如下:
// 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
被調用Save()
方法之前正確設置爲true
。此外,workItem.IsValid
也是true
。
有趣的事實是,如果我改變我的方式獲得WorkItemStore
對象,從
var store = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);
到
var store = collection.GetService<WorkItemStore>();
它可以節省沒有任何問題!但在這種情況下,我不知道如何設置BypassRules
到true
。當創建WorkItemStore
對象時,此屬性是隻讀的,如果我嘗試將工作流步驟設置爲「新建」以外的其他位置,則會出現驗證錯誤。
所以,我的基本問題是:如何通過API在TFS中創建工作項並能夠在此新創建的項目中更改State
字段?