Упражнение 5.2: Маппинг таблицы с обработчиком события заполнения
Задание 2
Теперь мы добавим в файл внешней процедуры dsPO_procs.p, который создали на прошлых занятиях, код для загрузки библиотеки процедур обработчиков событий и код связки набора данных с конкретным обработчиком.
| Шаг | Действие | 
| 1 | Откройте в OpenEdge Editor файл внешней процедуры dsPO_procs.p. | 
| 2 | В начале этой процедуры добавьте описание переменной типа HANDLE с именем hdsEventHandlers: DEFINE VARIABLE hdsEventHandlers AS HANDLE NO-UNDO. | 
| 3 | Скопируйте и вставьте код внутренней процедуры get_dsPO. Назовите новую процедуру get_dsPO2. Вы будете использовать эту процедуру для проверки выполнения события на сервере. Создание копии гарантирует, что другие вызовы, сделанные на сервер, не будут затронуты нашими изменениями. | 
| 4 | В начало процедуры get_dsPO2 после объявления переменных добавьте оператор для загрузки внешней процедуры dsPO_EventHandlers.p в качестве персистентной процедуры установив хэндл hdsEventHandlers. При этом поскольку процедура будет запускаться как персистентная, то сначала проверьте значение hdsEventHandlers, чтобы загрузить её только если она ещё не загружена. IF hdsEventHandlers = ? THEN
    RUN PurchaseOrder/dsPO_EventHandlers.p PERSISTENT SET hdsEventHandlers. | 
| 5 | Свяжите временную таблицу ttPOLine с обработчиком событий ExtendDiscount и событием AFTER-FILL. Использование этого события гарантирует, что обработчик будет выполнен только после того, как все записи ttPOLine добавлены во временную таблицу для соответствующей записи из ttPurchaseOrder. Добавьте следующий код сразу после предыдущего: BUFFER ttPOLine:SET-CALLBACK-PROCEDURE("AFTER-FILL", "ExtendDiscount", hdsEventHandlers). | 
| 6 | Сохраните файл и убедитесь в отсутствии ошибок компиляции. | 
