我有一個包含自定義列表主站點的站點。我有許多包含此列表副本的子站點。當有人編輯或添加一個新的列表項到主列表中時,我希望所有的子站點都通過與主列表關聯的事件處理程序進行相應更新。將主列表中的列表項複製到子站點
例如如果添加的項目,將其添加到每個子網站的列表
如果更新項目,更新各子站點的相應的列表項
如果項目被刪除,從每個子網站刪除相應的列表項
我已經嘗試使用SPListItem.Copy方法和listItem的CopyTo方法無濟於事。做這種技術的最佳做法是什麼?
我有一個包含自定義列表主站點的站點。我有許多包含此列表副本的子站點。當有人編輯或添加一個新的列表項到主列表中時,我希望所有的子站點都通過與主列表關聯的事件處理程序進行相應更新。將主列表中的列表項複製到子站點
例如如果添加的項目,將其添加到每個子網站的列表
如果更新項目,更新各子站點的相應的列表項
如果項目被刪除,從每個子網站刪除相應的列表項
我已經嘗試使用SPListItem.Copy方法和listItem的CopyTo方法無濟於事。做這種技術的最佳做法是什麼?
我相信SPListItem.Copy和SPListItem.CopyTo只有在目標列表與原始項目位於同一SPWeb上時纔有效。我假設這些列表項有一些「身份」字段,它不僅將其與其他列表項目區分開來,而且在所有子網站和頂級網站中始終保持一致(與ID不同,它不是100 %在你的控制下)。可能是標題,可能是編程分配的編號,可能是任何東西。我將這稱爲「身份」字段。
我假設你知道事件處理程序。如果你不這樣做,你可以看到一個非常基本的例子here,它解釋了所有的核心概念。
刪除是最容易處理的事情。只需遍歷子網站,用正確的「標識」字段遍歷主列表中的項目,然後調用SPListItem.Delete()。這應該足以放入ItemDeleting事件。
添加稍微困難。再次遍歷子網站,但是這次使用如下方法。
SPListItem target = list.Items.Add();
target["Title"] = properties.AfterProperties["Title"];
//Repeat similar assignments for all fields in the list item which can be assigned during creation.
target.Update();
這將不得不進行修改,以包括各個領域可以進行修改,以及對「身份」領域,如果你不已經包括了它。您不必擔心會自動分配的任何內容(如果Copy/CopyTo工作正常,SharePoint將處理它們)。把它放在ItemAdded事件中。
最後,更新項目與添加項目非常相似,而不是調用list.Items.Add(),而是通過遍歷主列表獲取正確的項目,並獲得正確的「標識「字段。把它放在ItemUpdated事件中。
您可能想要確保主列表的子網站上的權限與頂級網站上的相同。希望這對你有用!
如果它是要用作查找列的主列表,則可以在根站點中創建列表,然後將站點列指向它。該網站列可以用於任何你的子網站列表。
你能多解釋一下嗎? – mandroid 2010-04-29 20:56:11
謝謝 - 很好的答案。 – Graeme 2010-04-13 16:30:55