2013-02-27 37 views
1

我在保存工作項目時遇到問題。該場景是我有一個Web應用程序,從那裏我發送價值到TFS。我可以改變這兩個地方的價值(也可以通過TFS的網絡應用程序)。我現在面臨的問題是如何檢查工作項目是否已修改或未保存

當我嘗試在TFS中保存工作項時,它會檢查自打開它以來是否進行了任何更改。如果是這樣,你不能保存。當我從web應用程序中保存時,沒有這樣的檢查,我使用了workitem.isvalid方法,仍然沒有檢查修改過的工作項,然後將其從Web應用程序保存。

這是我的代碼

wi.Open(); 

foreach (var str in piWorkItemTfs.Values.Keys) 
    wi[str] = piWorkItemTfs.Values[str]; 


if (!wi.IsValid()) 
{ 
    var listFelaktigaVärde = (from Field field in wi.Validate() select field.Name + "=" + field.Value).ToList(); 

    errorMessage = "Felaktiga värde: Id " + wi.Id + " " + String.Join(", ", listFelaktigaVärde); 
} 
else 
{ 
    wi.Save(); 
    errorMessage = wi.Id.ToString(); 
} 

任何一個可以幫助我避免併發問題,請。我只需要保存工作項目,但以前沒有做過任何更改,否則我會向最終用戶顯示錯誤消息。

回答

2

工作項目上的IsValid()方法只驗證工作項目上的字段是否正確,它不檢查工作項目是否在其他地方更改過。工作項目對象上有一個標記,名稱爲IsDirty,它檢查自上次保存以來工作項目是否已更改。

作爲附註,您顯示爲錯誤消息的字段僅爲不符合工作項類型定義規則的字段(即字段值超出其定義的AllowedValues)。應該檢查它,但檢查自上次保存以來是否發生了更改應顯示不同的錯誤。

下面是MSDN的鏈接爲WorkItem類:http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem(v=vs.110).aspx

編輯

IsDirty標誌將回暖是否與否,工作項已在本地修改。相反,檢查服務器端保存的方法是在保存工作項時嘗試合併。

workItem.Save(SaveFlags.MergeAll); 

IsValid標誌用於本地更改,而不是服務器更改。使用SaveFlags.MergAll選項保存工作項目將執行檢查,並在工作項目已保存在服務器端時拋出異常。

+0

嗨,感謝您的回覆。我也使用了IsDirty,它只在保存後才檢查更改後的值。我的問題是我已經在兩個不同的地方同時打開相同的工作項目(一個在Web應用程序和其他TFS中),當我首先在web中保存工作項並在tfs中保存保存錯誤(檢查是骯髒的)時,但如果我先保存TFS並嘗試從Web應用程序中保存工作項,那麼它不會發出任何異常,但更改後的值會消失。我需要在保存之前顯示一些錯誤(有些人從外部環境修改或不) – user1845163 2013-03-01 05:06:19

+0

已更新答案給你例外。 – 2013-03-01 19:05:05

+0

您好我無法看到MergeAll在SaveFlags – user1845163 2013-03-04 09:27:39

相關問題