SharePoint:Ошибка при отмене регистрации EventReceiver в форме ContentType
-
09-09-2019 - |
Вопрос
У меня возникли некоторые проблемы с отменой регистрации некоторых получателей событий, формирующих contenttype.contenttype и получатели были развернуты и зарегистрированы мной, поэтому я не пытаюсь удалить какие-либо встроенные MOSS или внутренние eventreceivers.
Я пытаюсь заархивировать это с помощью следующего фрагмента кода:
using (SPSite site = new SPSite("http://wssdev06/"))
{
using (SPWeb web = site.RootWeb)
{
// web.AllowUnsafeUpdates = true;
SPContentType type = web.AvailableContentTypes[<ContentTypeName>];
while (type.EventReceivers.Count > 0)
{
type.EventReceivers[0].Delete();
}
type.Update();
// web.AllowUnsafeUpdates = false;
}
}
К сожалению, команда "type.Update()" выдает исключение, сообщающее мне, что коллекция не может быть изменена.Как вы можете видеть в коде, я уже пробовал разные способы решения этой проблемы, такие как разрешение небезопасных обновлений или запуск этого кода с повышенными привилегиями.Но я всегда получаю одно и то же исключение.
Так что же я делаю не так?
Решение
Ваша проблема заключается в том, что свойство "AvailableContentTypes" возвращает вам ДОСТУПНО ТОЛЬКО ДЛЯ ЧТЕНИЯ Коллекция.
Вам также следует использовать свойство 'ContentTypes', и все должно быть в порядке.
С уважением,
Выкопанный.
Другие советы
Основан ли этот тип на типе публикации?У меня были проблемы с изменением этих типов.В противном случае вы могли бы попробовать изменить весь SchemaXml этого типа.Я обнаружил, что это иногда работает, когда другие методы этого не делают.
Вы должны быть в состоянии установить type.ReadOnly = false
чтобы включить запись в тип.
Кроме того, ваш SPWeb не нуждается в утилизации - см. Блог Роджера Лэмба здесь для получения более подробной информации.