Для каждого справочника может быть создан один обработчик, выполняемый в случае ряда событий, происходящих с записями справочника.
Обработчик при создании записи справочника BeforeCreate:
Вызывается при создании записи справочника.
На вход передаются создаваемая запись справочника и параметры ее создания.
Обычно обработчик этого события используется для автоматического заполнения полей создаваемой записи справочника.
Обработчик инициализации записи справочника AfterLoad:
Вызывается после открытия записи справочника, но не вызывается при создании новой записи.
На вход передаются открываемая запись справочника и флаг, определяющий будут ли загружены внутренние объекты записи справочника.
С помощью обработчика этого события можно, например, загрузить дополнительные данные в запись справочника.
Обработчик перед сохранением записи справочника BeforeSave:
Вызывается при сохранении создаваемой/редактируемой записи справочника.
На вход передается сохраняемая запись справочника.
С помощью обработчика этого события можно, например, проверить данные и при необходимости изменить их перед сохранением.
После успешного выполнения обработчика запись справочника будет сохранена, а ядром будет вызван обработчик после сохранения, либо, в случае неудачного выполнения, будет возвращена ошибка.
Обработчик при неудавшемся сохранении записи справочника SaveFailed:
Вызывается в случае выдачи исключения во время операции сохранения записи справочника.
На вход передаются сохраняемая запись справочника и исключение, выданное во время сохранения.
Обработчик после сохранения записи справочника AfterSave:
Вызывается после успешного выполнения обработчика перед сохранением и после непосредственно сохранения записи справочника, но до фиксации транзакции.
На вход передается сохраненная запись справочника.
С помощью обработчика этого события можно отменить сохранение, выдав исключение, и отменить все внесенные в запись справочника изменения (внести изменения в уже сохраненную запись нельзя). Также обработчик этого события можно использовать для выполнения автоматических действий, которые должны быть совершены только после корректного сохранения всех данных.
Обработчик перед удалением записи справочника BeforeDelete:
Вызывается перед удалением записи справочника.
На вход передается идентификатор удаляемой записи справочника;
С помощью обработчика этого события можно отменить удаление, выдав исключение.
Обработчик при неудавшемся удалении записи справочника DeleteFailed:
Вызывается в случае выдачи исключения во время операции удаления записи справочника.
На вход передаются идентификатор удаляемой записи справочника и исключение, выданное во время удаления.
Обработчик после удаления записи справочника AfterDelete:
Вызывается после успешного выполнения обработчика перед удалением, а также после успешного удаления записи справочника (записи справочника уже не существует), но до фиксации транзакции.
На вход передается идентификатор удаленной записи справочника;
С помощью обработчика этого события можно отменить удаление, выдав исключение.
Кроме того, прикладной разработчик может изменять общий обработчик событий справочника – он имеет такой же интерфейс, но вызывается при любом событии записи справочника любого типа.
Последовательность вызовов обработчиков событий справочника:
1.При сохранении:
•общий обработчик перед сохранением;
•обработчик перед сохранением;
•сохранение изменений записи в БД;
•общий обработчик после сохранения;
•обработчик после сохранения;
Если на любом этапе сохранения произошла какая-либо ошибка, будет вызван обработчик для исключительной ситуации SaveFailed.
2.При удалении:
•общий обработчик перед удалением;
•обработчик перед удалением;
•удаление записи в БД;
•общий обработчик после удаления;
•обработчик после удаления;
Если на любом этапе удаления произошла какая-либо ошибка, будет вызван обработчик для исключительной ситуации DeleteFailed.
3.При создании:
•создание объекта соответствующего класса;
•получение нового идентификатора;
•общий обработчик при создании;
•обработчик при создании.
4.При загрузке записи:
•загрузка записи из БД и инициализация объекта;
•общий обработчик инициализации записи;
•обработчик инициализации записи.