0

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

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

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

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

我尝试使用 SPListItem.Copy 方法以及 listItem 的 CopyTo 方法无济于事。做这种技术的最佳实践是什么?

4

2 回答 2

1

我相信 SPListItem.Copy 和 SPListItem.CopyTo 仅在目标列表与原始项目位于同一 SPWeb 上时才有效。我假设这些列表项有一些“身份”字段,不仅将其与其他列表项区分开来,而且在所有子站点和顶级站点中始终相同(与 ID 不同,它不是 100 % 在您的控制之下)。可以是标题,可以是程序分配的数字,可以是任何东西。我将称之为“身份”字段。

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

删除是最容易处理的事情。只需遍历子站点,遍历具有正确“身份”字段的项目的主列表,然后对其调用 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 事件中。

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

于 2010-04-13T15:32:53.973 回答
0

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

于 2010-04-14T14:04:58.907 回答