Упражнение 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 | Сохраните файл и убедитесь в отсутствии ошибок компиляции. |