Обработчики событий справочников

Обработчик событий справочник – это скрипт, автоматически выполняемый в случае ряда событий, происходящих с записями справочника. Для каждого справочника может быть создан свой обработчик событий. Для создания обработчика необходимо нажать кнопку Event script в форме редактирования справочника. По умолчанию при создании нового справочника обработчик событий не создается.

Список всех обработчиков событий справочников можно найти в справочнике "Scripts". Кроме того, обработчик событий конкретного справочника можно открыть из его формы редактирования:

Scripts_DictEventHandlers

Обработчики событий справочников реализуют интерфейс IDictionaryEventHandler.

Обработчик может реагировать на следующие события, происходящие с записями справочника:

BeforeCreate – обработчик выполняется непосредственно перед созданием записи справочника, после нажатия пользователем кнопки создания новой записи.

input на входе на обработчик передаются:

создаваемая запись справочника;

параметры ее создания;

BeforeClone – обработчик выполняется перед клонированием записи справочника. Он позволяет подготовить запись к клонированию: очистить лишние данные, сменить имя записи для устранения дубликатов и так далее.

input на входе на обработчик передаются:

оригинальная запись справочника, которая будет клонироваться;

дополнительные параметры создания для новой записи;

AfterLoad – обработчик выполняется после открытия записи справочника, но не выполняется в случае создания новой записи. С его помощью можно, например, загрузить дополнительные данные в запись справочника.

input на входе на обработчик передаются:

открываемая запись справочника;

флаг, определяющий будут ли загружены внутренние объекты записи справочника. Внутренними объектами записи справочника являются, например, его свойства-ссылки. В случае указания на необходимость загрузки внутренних объектов в качестве значений таких свойств-ссылок будут загружены записи, на которые они ссылаются, целиком. В противном случае будут загружены лишь идентификаторы записей, на которые ссылаются свойства-ссылки;

BeforeSave – обработчик выполняется непосредственно перед сохранением записи справочника, после нажатия пользователем кнопки сохранения. С его помощью можно, например, проверить данные и при необходимости изменить их перед сохранением.

input на входе на обработчик передается сохраняемая запись справочника;

AfterSave – обработчик выполняется после сохранения записи справочника, в том числе после выполнения обработчика BeforeSave, но до фиксации транзакции. С его помощью можно отменить сохранение, выдав исключение, и отменить все внесенные в запись справочника изменения (внести изменения в уже сохраненную запись справочника нельзя).

input на входе на обработчик передается сохраненная запись справочника;

SaveFailed – обработчик выполняется в случае выдачи исключения во время операции сохранения записи справочника.

input на входе на обработчик передаются:

сохраняемая запись справочника;

исключение, выданное во время сохранения;

BeforeDelete – обработчик выполняется непосредственно перед удалением записи справочника, после нажатия пользователем кнопки удаления. С его помощью можно отменить процесс удаления, выдав исключение.

input на входе на обработчик передается идентификатор удаляемой записи справочника;

AfterDelete – обработчик выполняется после удаления записи справочника (записи справочника уже не существует), в том числе после выполнения обработчика BeforeDelete, но до фиксации транзакции. С его помощью можно отменить удаление, выдав исключение.

input на входе на обработчик передается идентификатор удаленной записи справочника;

DeleteFailed – обработчик выполняется в случае выдачи исключения во время операции удаления записи справочника.

input на входе на обработчик передаются:

идентификатор удаляемой записи справочника;

исключение, выданное во время удаления.

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

Обработчик событий CommonDictionaryEventHandler можно найти в справочнике "Scripts" или открыть через списковую форму справочника Dictionaries:

Scripts_DictCommonEventHandlers

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

1.При сохранении:

обработчик события BeforeSave CommonDictionaryEventHandler;

обработчик события BeforeSave справочника;

сохранение изменений записи в БД;

обработчик события AfterSave CommonDictionaryEventHandler;

обработчик события AfterSave справочника;

Если на любом этапе сохранения произошла какая-либо ошибка, будет вызван обработчик события SaveFailed (сначала CommonDictionaryEventHandler, потом справочника).

2.При удалении:

обработчик события BeforeDelete CommonDictionaryEventHandler;

обработчик события BeforeDelete справочника;

удаление записи в БД;

обработчик события AfterDelete CommonDictionaryEventHandler;

обработчик события AfterDelete справочника;

Если на любом этапе удаления произошла какая-либо ошибка, будет вызван обработчик события DeleteFailed (сначала CommonDictionaryEventHandler, потом справочника).

3.При создании:

создание объекта соответствующего класса;

получение нового идентификатора;

обработка переданных параметров (параметры, названия которых совпадают с полями справочника, автоматически присваиваются полям справочника);

обработчик события BeforeCreate CommonDictionaryEventHandler;

обработчик события BeforeCreate справочника.

4.При загрузке записи:

загрузка записи из БД и инициализация объекта;

обработчик события AfterLoad CommonDictionaryEventHandler;

обработчик события AfterLoad справочника.