Копирование элементов списка из основного списка на подузлы - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть сайт, который содержит пользовательский список Master.У меня есть несколько сайтов, которые содержат копии этого списка.Когда кто-то редактирует или добавляет новый элемент списка в основной список, я бы хотел, чтобы все дочерние сайты соответствующим образом обновлялись обработчиком событий, связанным с основным списком.

например, если элемент добавлен, добавьте егок списку каждого подузла

, если элемент обновлен, обновите соответствующий элемент списка каждого подузла

, если элемент удален, удалите соответствующий элемент списка с каждого подузла

Я пытался использовать метод SPListItem.Copy, а также метод CopyTo listItem безрезультатно.Какова лучшая практика выполнения этой техники?

Ответы [ 2 ]

1 голос
/ 13 апреля 2010

Я считаю, что SPListItem.Copy и SPListItem.CopyTo будут работать только в том случае, если целевой список находится на том же SPWeb, что и исходный элемент. Я предполагаю, что эти элементы списка имеют некоторое поле «идентичность», которое не только отличает его от других элементов списка, но также всегда одинаково для всех дочерних сайтов и сайта верхнего уровня (в отличие от идентификатора, который не равен 100). % под вашим контролем). Может быть заголовком, может быть программно назначенным номером, может быть чем угодно. Я просто назову это поле "личность".

Я предполагаю, что вы знаете обработчики событий. Если вы этого не сделаете, вы можете увидеть очень простой пример здесь , который объясняет все основные понятия.

Удаление - это самая легкая вещь для обработки. Просто выполните итерацию по дочерним сайтам, выполните итерацию по основному списку для элемента с правильным полем «identity» и вызовите 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();

Это нужно будет изменить, чтобы включить каждое поле, которое можно изменить, а также поле «идентификатор», если вы его еще не включили. Вам не нужно беспокоиться о том, что будет назначено автоматически (SharePoint все равно будет их обрабатывать, если сработает Copy / CopyTo). Поместите его в событие ItemAdded.

Наконец, обновление элемента очень похоже на добавление элемента, только вместо вызова list.Items.Add (), вместо этого вы получаете правильный элемент, перебирая основной список и получая элемент с правильной «идентичностью» поле. Поместите его в событие ItemUpdated.

Возможно, вы захотите убедиться, что разрешения для дочерних сайтов в основном списке такие же, как и на сайте верхнего уровня. Надеюсь, что это работает для вас!

0 голосов
/ 14 апреля 2010

Если это основной список, который вы хотите использовать в качестве поискового столбца, вы можете создать список на своем корневом сайте и затем указать на него столбец сайта. Этот столбец сайта можно затем использовать в любом из списков дочерних сайтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...