Обработчик событий справочник – это скрипт, автоматически выполняемый в случае ряда событий, происходящих с записями справочника. Для каждого справочника может быть создан свой обработчик событий. Для создания обработчика необходимо нажать кнопку Event script в форме редактирования справочника. По умолчанию при создании нового справочника обработчик событий не создается.
Список всех обработчиков событий справочников можно найти в справочнике "Scripts". Кроме того, обработчик событий конкретного справочника можно открыть из его формы редактирования:
Обработчики событий справочников реализуют интерфейс IDictionaryEventHandler.
Обработчик может реагировать на следующие события, происходящие с записями справочника:
•BeforeCreate – обработчик выполняется непосредственно перед созданием записи справочника, после нажатия пользователем кнопки создания новой записи.
на входе на обработчик передаются:
•создаваемая запись справочника;
•параметры ее создания;
•BeforeClone – обработчик выполняется перед клонированием записи справочника. Он позволяет подготовить запись к клонированию: очистить лишние данные, сменить имя записи для устранения дубликатов и так далее.
на входе на обработчик передаются:
•оригинальная запись справочника, которая будет клонироваться;
•дополнительные параметры создания для новой записи;
•AfterLoad – обработчик выполняется после открытия записи справочника, но не выполняется в случае создания новой записи. С его помощью можно, например, загрузить дополнительные данные в запись справочника.
на входе на обработчик передаются:
•открываемая запись справочника;
•флаг, определяющий будут ли загружены внутренние объекты записи справочника. Внутренними объектами записи справочника являются, например, его свойства-ссылки. В случае указания на необходимость загрузки внутренних объектов в качестве значений таких свойств-ссылок будут загружены записи, на которые они ссылаются, целиком. В противном случае будут загружены лишь идентификаторы записей, на которые ссылаются свойства-ссылки;
•BeforeSave – обработчик выполняется непосредственно перед сохранением записи справочника, после нажатия пользователем кнопки сохранения. С его помощью можно, например, проверить данные и при необходимости изменить их перед сохранением.
на входе на обработчик передается сохраняемая запись справочника;
•AfterSave – обработчик выполняется после сохранения записи справочника, в том числе после выполнения обработчика BeforeSave, но до фиксации транзакции. С его помощью можно отменить сохранение, выдав исключение, и отменить все внесенные в запись справочника изменения (внести изменения в уже сохраненную запись справочника нельзя).
на входе на обработчик передается сохраненная запись справочника;
•SaveFailed – обработчик выполняется в случае выдачи исключения во время операции сохранения записи справочника.
на входе на обработчик передаются:
•сохраняемая запись справочника;
•исключение, выданное во время сохранения;
•BeforeDelete – обработчик выполняется непосредственно перед удалением записи справочника, после нажатия пользователем кнопки удаления. С его помощью можно отменить процесс удаления, выдав исключение.
на входе на обработчик передается идентификатор удаляемой записи справочника;
•AfterDelete – обработчик выполняется после удаления записи справочника (записи справочника уже не существует), в том числе после выполнения обработчика BeforeDelete, но до фиксации транзакции. С его помощью можно отменить удаление, выдав исключение.
на входе на обработчик передается идентификатор удаленной записи справочника;
•DeleteFailed – обработчик выполняется в случае выдачи исключения во время операции удаления записи справочника.
на входе на обработчик передаются:
•идентификатор удаляемой записи справочника;
•исключение, выданное во время удаления.
Кроме обработчика событий конкретного справочника (который может и не быть создан), существует общий обработчик событий справочников CommonDictionaryEventHandler, который реагирует на события, происходящие с записями любого справочника. Он реагирует на те же события, но всегда выполняется перед обработчиком событий конкретного справочника.
Обработчик событий CommonDictionaryEventHandler можно найти в справочнике "Scripts" или открыть через списковую форму справочника Dictionaries:
Последовательность вызовов обработчиков событий справочника:
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 справочника.