Механизм прикладных событий
Наиболее гибким способом взаимодействия частей прикладного решения является обмен прикладными событиями. Платформа обеспечивает регистрацию программ-обработчиков событий и вызов соответствующих обработчиков при возбуждении события в коде программы на внутреннем языке.
Поддерживается три уровня идентификации события: блок, семейство и имя. Событие может нести иерархически организованную структуру дополнительных данных. Все это упаковывается возбуждающей событие программой в переменную типа СОБЫТИЕ:
ПЕРЕМ СОБЫТИЕ: соб соб.блок = "Зарплата" соб.семейство = "УведомленияЗП" соб.имя = "ИзмененПериодЗП" соб.парам["начало"] = дата1 соб.парам["конец"] = дата2 СОБЫТИЕ_ДЛЯ_ВСЕХ(соб)
Здесь "Зарплата" – имя блока, "ИзмененПериодЗП" – имя конкретного события. В индексное поле парам добавляется дополнительная информация для данного события (какие-то значения "дата1" и "дата2"). Функция СОБЫТИЕ_ДЛЯ_ВСЕХ производит рассылку события для всех блоков, у которых есть зарегистрированные обработчики для семейства "УведомленияЗП" или конкретного события "ИзмененПериодЗП".
Регистрация обработчиков событий производится с помощью специальных текстовых файлов *.evd. Например, так может выглядеть evd-файл с регистрацией обработчика для семейства событий "УведомленияЗП":
[Штат] @УведомленияЗП = Штат\ОбработкаУведомлений.ibx
Здесь указывается соответствие семейств событий (со знаком @) или отдельных событий и файлов исполнимого кода, используемых для обработки. "Штат" – имя прикладного блока, который принимает перечисленные события. Для адресной отправки событий одному или нескольким блокам используется функция СОБЫТИЕ_ДЛЯ_БЛОКА.
Обработчиков для одного события может быть задано несколько. Событие будет последовательно передано каждому из них. Если обработчиков для события не задано, то при его возбуждении ничего не произойдет.
Имеется возможность перенаправить обработку события с клиентского места на сервер. Для этого в evd-файле на клиентском месте имя ibx-файла заменяется символом @:
[Штат] @УведомленияЗП = @
При возбуждении события будут проверены обработчики на сервере (на сервере лежат свои evd-файлы). При наличии обработчиков событие будет передано по сети на сервер. Это еще один способ запуска программ на сервере, в дополнение к обсуждавшимся в подразделе Сложные расчеты на сервере.
Механизм прикладных событий позволяет устанавливать слабые связи между прикладными блоками. Это позволяет поставлять блоки конечному пользователю по отдельности. Также взаимодействие блоков через механизм событий способствует принятию четкого и документированного протокола общения.