2013-11-14 46 views
1

我正在創建一個工作項目遷移應用程序,從「東西」到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>(); 

它可以節省沒有任何問題!但在這種情況下,我不知道如何設置BypassRulestrue。當創建WorkItemStore對象時,此屬性是隻讀的,如果我嘗試將工作流步驟設置爲「新建」以外的其他位置,則會出現驗證錯誤。

所以,我的基本問題是:如何通過API在TFS中創建工作項並能夠在此新創建的項目中更改State字段?

回答

4

好吧,夥計們,因爲它經常發生,答案是手動。讓我解釋。

的在我的問題article I referenced明確規定:

你需要的項目集合服務的會員賬戶

但它沒有提到,你不能很容易地添加用戶或組Project Collection Service Accounts。如果您嘗試通過網絡訪問來做到這一點,您將失敗 - 僅添加按鈕被禁用。此外,屏幕截圖是誤導性的,顯示帳戶是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)

相關問題