Политика управления информацией в SharePoint

Непонятная головоломка, но она сводит меня с ума:

Я создаю собственную политику управления информацией в MOSS. Я реализовал IPolicyFeature, и моя функция политики успешно регистрируется путем настройки нового SPItemEventReceiver. Все новые элементы в моей библиотеке запускают события так, как должны, и все работает нормально.

IPolicyFeature также имеет метод ProcessListItem, который должен задним числом применять политику к элементам, которые уже были в библиотеке (по крайней мере, он должен делать это до тех пор, пока он продолжает возвращаться true). За исключением того, что это не так. Он применяет политику только к первому элементу в библиотеке, и я абсолютно не знаю, почему.

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

Изменить: ответ Кори ниже, установите меня на правильном пути. Что-то еще действительно терпело неудачу - я не выяснил, что, так как мой windbg-fu не тот, каким он должен быть, но я подозреваю, что это было что-то вроде "изменения коллекции, пока она повторяется". Мой код модифицировал SPListItem, который передается в ProcessListItem, а затем вызывал SystemUpdate для него; как только я изменил код так, чтобы он создал свою собственную переменную (указывающую на точно такой же SPListItem) и использовал ее, проблема ушла...

2 ответа

Решение

Есть только пара вещей, о которых я могу подумать, чтобы попробовать. Во-первых, вы разрабатываете на коробке, где вы могли бы использовать Visual Studio для отладки? Так что просто пройдя через это.

Если предположить, что это не так - я бы запустил WinDBG и подключил его к процессу непосредственно перед тем, как зарегистрировать политику. Включите исключения первого шанса, чтобы они ломались всякий раз, когда они возникают. Вы можете сделать это, выполнив команду "sxe clr" после ее взлома. Вот еще немного информации о WinDBG:

http://blogs.msdn.com/tess/archive/2008/06/05/setting-net-breakpoints-in-windbg-for-applications-that-crash-on-startup.aspx

Затем я буду наблюдать за исключениями First Chance и создавать!PrintException, чтобы увидеть, что происходит. Я предполагаю, что существует исключение, которое приводит к тому, что приложение перестает обрабатывать другие элементы.

Как выглядит логика для вашего ProcessListItem? Вы пытались просто сделать возвращение true, чтобы убедиться, что это работает?

Несколько хороших идей, спасибо. Отладчик Visual Studio не показывал исключение (и я на всякий случай обернул все в блоки try/catch), но я не думал о попытке Windbg...

Другие вопросы по тегам