Поделиться через


Устранение неполадок с событиями

Дата последнего изменения: 9 марта 2015 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Библиотеки документов и типы контента
Списки и типы контента
Библиотеки документов
Веб

При программировании событий могут возникать необычные образцы поведения в зависимости от контекста, в котором реализуются обработчики событий. Далее описываются образцы поведения событий, связанные с конкретными контекстами, которые можно встретить при написании кода.

Поведение событий разделено на четыре категории:

  • Библиотеки документов и типы контента

  • Списки и типы контента

  • Библиотеки документов

  • Веб

Библиотеки документов и типы контента

ПРОБЛЕМА

ОПИСАНИЕ

ПРОБЛЕМА №1

Страница ASPX с определенным типом контента создается в библиотеке документов. Страница связана с событиями ItemAdding и ItemAdded. Однако эти события не инициируются.

Решение. Если файл загружается в библиотеку документов, ему назначается тип контента по умолчанию. Однако, если загрузить файл и назначить ему тип контента, например тип "A", результат будет состоять в том, что тип контента файла изменяется с типа по умолчанию на тип "A" после его добавления в библиотеку документов.

В этом сценарии, если у типа контента "A" есть привязки к ItemAdding/ItemAdded и ItemUpdating/ItemUpdated, события ItemAdding/ItemAdded не вызываются, если назначить новый тип контента "A" файлу. Однако в этом сценарии вызываются события ItemUpdating/ItemUpdated.

Если файл создается непосредственно из типа контента с помощью функции создания нового документа, а не посредством загрузки документа, события ItemAdding/ItemAdded успешно инициируются, как и событие ItemUpdating.

ПРОБЛЕМА №2

Событие ItemAdding, привязанное к этому типу контента, генерируется, даже если загружается документ с другим типом контента. Обратите внимание, что каждому документу, загружаемому в библиотеку документов, назначается тип контента по умолчанию. Поэтому при каждом добавлении документа в библиотеку документов события ItemAdding\ItemAdded генерируются, если эти события привязаны к типу контента по умолчанию.

Решение. Тип контента документа можно изменить на этапе обновления, соответственно скорректировав идентификатор типа контента.

ПРОБЛЕМА №3

Запрос на удаление элемента с помощью формы списков не предоставляет связанного идентификатора типа контента. Поэтому события ItemDeleting и ItemDeleted возникают для всех элементов списка, а не только для элементов конкретного типа контента. Это происходит, даже если событие было зарегистрировано только для указанного типа контента.

Решение. По своей конструкции SharePoint Foundation инициирует события для всех элементов списка, если запрос не привязан к типу контента. Это дает возможность инициировать события для всех элементов, если получатель события зарегистрирован для всех элементов в списке.

Такое поведение влияет на политики, в которых участвуют события Delete. Если реализуется политика, предполагающая удаление, применяется политика к типу контента, а затем тип контента привязывается к списку, политика будет применяться ко всем элементам в списке, а не только к элементам типа контента, к которым применяется политика.

Списки и типы контента

ПРОБЛЕМА

ОПИСАНИЕ

ПРОБЛЕМА №1

При регистрации события ItemUpdating для типа контента, привязанного к списку, событие возникает, даже если элементы другого типа контента обновляются на основе объектной модели. Обратите внимание, что SharePoint Foundation возвращает нуль (0) в качестве идентификатора типа контента, а не идентификатора типа контента элемента.

Решение: отсутствует.

ПРОБЛЕМА №2

События списков не возникают для типа списка UserInformation.

Решение: отсутствует.

Библиотеки документов

ПРОБЛЕМА

ОПИСАНИЕ

ПРОБЛЕМА №1

При добавлении нового типа контента к списку, к которому привязаны события, некоторые из них могут вызываться, так как при привязке типа контента к списку могут участвовать несколько промежуточных факторов, такие как добавление файлов (например, Template.doc), обновление документов или добавление новых полей.

Решение. Такое поведение возможно только для библиотеки общих документов, а не для настраиваемых библиотек документов. Для общих документов при добавлении типа контента создается папка Forms/<Content Type> и в эту папку копируется файл Template.doc, что приводит к генерированию событий.

ПРОБЛЕМА №2

При добавлении документа в библиотеку документов в представление проводника с помощью WebDAV методы ItemAdding(SPItemEventProperties) и ItemAdded(SPItemEventProperties) вызываются один раз, но методы ItemUpdating(SPItemEventProperties) и ItemUpdated(SPItemEventProperties) вызываются дважды.

Решение. Отсутствует. Такое поведение по умолчанию соотносится с внутренними процессами, участвующими в добавление файла в представление папки проводника, обуславливает необходимость вызова этих методов дважды.

ПРОБЛЕМА №3

При переименовании файла в библиотеке документов с помощью WebDAV в представления проводника событие переименования не вызывает событий ItemUpdating(SPItemEventProperties) и ItemUpdated(SPItemEventProperties), если не изменить также расширение файла при переименовании файла.

Решение: отсутствует.

Веб

ПРОБЛЕМА

ОПИСАНИЕ

ПРОБЛЕМА №1

Для методов WebAdding(SPWebEventProperties) и WebProvisioned(SPWebEventProperties) свойство ServerRelativeUrl является пустым, когда родительский веб-сайт является корневым веб-сайтом.

Решение. Правильные значения свойства ServerRelativeUrl в событии WebAdding — это URL-адрес родительского веб-сайта. Правильное значение для события WebProvisioned — это URL-адрес созданного дочернего сайта.

ПРОБЛЕМА №2

Установка состояния CancelNoError для получателя событий в событии WebDeleting(SPWebEventProperties) или SiteDeleting(SPWebEventProperties) вызывает перенаправление на страницу ошибки, что означает, что веб-сайт удален.

Решение. Отсутствует. Элемент управления просто возвращает вызывающий метод после инициации события. Веб-сайт не был удален.

ПРОБЛЕМА №3

Установка состояния CancelNoError для получателя событий в событии FieldAdding(SPWebEventProperties) вызывает перенаправление на страницу ошибки, что означает, что столбец не существует при добавлении поля в список.

Решение. Отсутствует. Элемент управления просто возвращает вызывающий метод после инициации события. Столбец не был удален.

ПРОБЛЕМА №4

Установка состояния CancelNoError для получателя событий в событии ItemAttachmentDeleting(SPWebEventProperties) вызывает перенаправление на страницу ошибки "Исключение от HRESULT" при попытке удалить вложение из элемента.

Решение. Отсутствует. Элемент управления просто возвращает вызывающий метод после инициации события.