Sharepoint 将列表项从主列表复制到子站点

Sharepoint 将列表项从主列表复制到子站点,sharepoint,listitem,splistitem,Sharepoint,Listitem,Splistitem,我有一个网站,其中包含一个自定义列表主。我有许多子站点,其中包含此列表的副本。当有人编辑或向主列表添加新列表项时,我希望所有子站点都由与主列表关联的事件处理程序相应地更新 e、 g.如果添加了项目,则将其添加到每个子站点的列表中 如果项目已更新,则更新每个子站点的相应列表项目 如果项目已删除,请从每个子站点中删除相应的列表项目 我尝试过使用listItem的SPListItem.Copy方法和CopyTo方法,但都没有用。使用这种技术的最佳实践是什么?我相信只有当目标列表与原始项目位于同一个SP

我有一个网站,其中包含一个自定义列表主。我有许多子站点,其中包含此列表的副本。当有人编辑或向主列表添加新列表项时,我希望所有子站点都由与主列表关联的事件处理程序相应地更新

e、 g.如果添加了项目,则将其添加到每个子站点的列表中

如果项目已更新,则更新每个子站点的相应列表项目

如果项目已删除,请从每个子站点中删除相应的列表项目


我尝试过使用listItem的SPListItem.Copy方法和CopyTo方法,但都没有用。使用这种技术的最佳实践是什么?

我相信只有当目标列表与原始项目位于同一个SPWeb上时,SPListItem.Copy和SPListItem.CopyTo才会起作用。我假设这些列表项有一些“标识”字段,它不仅区别于其他列表项,而且在所有子网站和顶级网站上都是相同的(与ID不同,ID不是100%由您控制)。可以是标题,可以是编程分配的编号,可以是任何内容。我把它称为“身份”字段

我假设您知道事件处理程序。如果你没有,你可以看到一个非常基本的例子,解释了所有的核心概念

删除是最容易处理的事情。只需遍历子网站,遍历具有正确“identity”字段的项目的主列表,并对其调用SPListItem.Delete()。这应该足以放入ItemDeleteing事件中

添加稍微有点困难。再次迭代子网站,但这次使用如下方法

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(),而是通过迭代主列表并获取具有正确“identity”字段的项目来获得正确的项目。将其放入ItemUpdated事件中


您可能希望确保主列表子网站上的权限与顶级网站上的权限相同。希望这对你有用

如果它是要用作查找列的主列表,则可以在根站点中创建该列表,然后将站点列指向该列表。然后,该站点列可以在您的任何子站点列表中使用。

您能再解释一下吗?