我有一个包含自定义列表Master的网站。我有许多子站点,其中包含此列表的副本。当有人编辑或添加新列表项到主列表时,我希望所有子站点都相应地通过与主列表关联的事件处理程序进行更新。
e.g。如果添加了项目,则将其添加到每个子站点的列表中
如果项目已更新,请更新每个子站点的相应列表项
如果项目被删除,请从每个子站点删除相应的列表项
我尝试过使用SPListItem.Copy方法以及listItem的CopyTo方法无济于事。做这种技术的最佳做法是什么?
答案 0 :(得分:1)
我相信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事件中。
您可能希望确保主列表的子网站上的权限与顶级网站上的权限相同。希望这对你有用!
答案 1 :(得分:0)
如果它是您要用作查阅列的主列表,则可以在根站点中创建列表,然后将站点列指向该列表。然后,可以在任何子网站列表中使用该网站列。