2008-11-14 65 views
2

什麼即時通訊想知道該怎麼辦是當有人編輯列表項目,並且它通過我的事件代碼被觸發時發生更改和保存命中,我不希望任何人能夠編輯該列表項目本身,同時仍然處理該請求。所以我想知道如果在這種情況下,我可以禁止別人編輯個別項目,直到完成它正在做的事情。在SharePoint中禁用更新個別列表項目

回答

2

不知道我是否明白你想要什麼。

嘗試向列表或內容類型添加一個字段,如果您願意,可將其用作標誌。當你輸入你的事件代碼時,確保你先檢查標誌,如果沒有設置,設置它並做你的事情。完成你的東西后,解除旗幟。

這裏有一些代碼來說明。請注意,我使用了一個名爲「更新」的列。如果您不關心添加列,您也可以使用SPListItem的屬性。

哦,不要忘記在你之前調用DisableEventFiring到SPListItem.Update,然後再調用EnableEventFiring()。爲了得到這個,你的手上會有一個非常令人討厭的無限循環。

.B

public override void ItemAdding(SPItemEventProperties properties) 
    { 
     if (properties.ListItem["updating"].ToString() == "updating") 
     { 
      properties.Cancel = true; 
      properties.ErrorMessage = "Item is currently updating, please try again later"; 
     } 
     else 
     { 
      properties.ListItem["updating"] = "updating"; 
      this.DisableEventFiring(); 
      properties.ListItem.Update(); 
      this.EnableEventFiring(); 

      // do your stuff 

      properties.ListItem["updating"] = ""; 
      this.DisableEventFiring(); 
      properties.ListItem.Update(); 
      this.EnableEventFiring(); 
     } 
    } 
1

我毫不懷疑,Bjørns解決方案將工作,但你必須執行時,它是非常小心。 請致電記住在你的更新方法中應該包括一個「終於」重置標誌,不管拋出哪個異常,否則你的列表將永遠被鎖定:-(