2011-09-22 8 views
1
(1) var list1 = web.GetList("/lists/list1"); 
(2) var item1 = list1.GetItemById(10001); 
(3) ... 

ここでブレークポイントをとるには、ID = 10001の項目を編集用に開き、[タイトル]フィールドを変更して保存します。次に、コードを実行します。SPListItem更新時に競合を保存する

(4)item1[SPBuiltInFieldId.Title] = "some text"; 
(5)item1.Update(); 

行(5)は、競合の例外をスローします。

編集するアイテムを行(3)でロックする方法はありますか?または、競合を避けるための他のアプローチ?

答えて

3

手動

try 
{ 
    var item = list.GetItemById(3); 
    item["MyField"] = "FooBar"; 
    item.Update(); 
} 
catch(SPException conflictEx) 
{ 
    // handle conflict by re-evaluating SPListItem 
    var item = list.GetItemById(3); 
    // .. 
} 

をSPListItemをチェックする必要があり、私は他の機構のATMを知りません。別のアプローチは、SharePointへのLINQを使用している

+0

それは動作しますが、私はそれがアイテムを直接ロックするより良い方法だと思います – devi

0

は、SharePointのにLINQのは、あなたがあなたがでSubmitChangesメソッドを使用して行った変更を保存しようとする

+2

あなたはこれを詳述できますか? –

0

SharePointのLINQプロバイダが同時変更を照会された紛争解決メカニズムを提供しています。

競合が見つかった場合はChangeConflictExceptionがスローされます。

foreach(var notebook in spSite.Notebooks) 
{ 
    notebook.IsTopNotebook = true; 
} 

try 
{ 
    spSite.SubmitChanges(ConflictMode.ContinueOnConflict); 
} 
catch(ChangeConflictException ex) 
{ 
    foreach(ObjectChangeConflict occ in spSite.ChangeConflicts) 
    { 
    if (((Notebook)occ.Object).Memory > 16) 
    {   
     foreach (MemberChangeConflict field in occ.MemberConflicts) 
     { 
     if (field.Member.Name == "IsTopNotebook") 
     { 
      field.Resolve(RefreshMode.KeepCurrentValues); 
     } 
     else 
     { 
      field.Resolve(RefreshMode.OverwriteCurrentValues); 
     } 
     } 
    } 
    else 
    { 
     occ.Resolve(RefreshMode.KeepCurrentValues); 
    } 
    } 
    spSite.SubmitChanges(); 
} 
2

// * 私たちは、次のURLから保存対立 *

を得るでしょう、各リストの変更それ以外 のための新たなSPWebオブジェクトを作成 http://platinumdogs.me/2010/01/21/sharepoint-calling-splist-update-causes-save-conflict-spexception/

例外

using (var thisWeb = featSite.OpenWeb(featWeb.ID)) 
     { 
      try 
      { 
       var listUpdate = false; 
       var theList = thisWeb.Lists[att.Value]; 

       // change list configuration 
       // ..... 

       // commit List modifications 
       if (listUpate) 
        theList.Update(); 
      } 
      catch 
      { 
       // log the event and rethrow 
       throw; 
      } 
     } 
    } 
} 
+0

良い!しかし、それはいつも適用可能ではない。例:両方の更新場所で現在のSPContext.CurrentWebを使用する必要があります。 – devi

+0

2年後でも、私の(金)日が保存されました! – Verthosa

関連する問題