Упражнение 5.4: Процедура обработки события изменения на клиенте
Задание 4
В этом задании необходимо создать внешнюю процедуру dsPO_ClientEventHandlers.p, которая будет содержать обработчик событий набора данных для клиентского кода. Этот обработчик будет сфокусирован на изменении в таблице ttPOLine, по следующему сценарию: товар с номером 33 больше не поставляется и должен быть заменён на товар с номером 50, который имеет туже цену. Когда запись ttPOLine меняется по этому сценарию, в поле POLineStatus значение должно поменяться с «Ordered» на «Back Ord» в базе данных. Изменение этого статуса должен выполнить код обработчика событий.
Шаг |
Действие |
1 | Создайте новую ABL-процедуру с именем dsPO_ClientEventHandlers.p в каталоге src/PurchaseOrder проекта Client. |
2 | В файл этой процедуры добавьте внутреннюю процедуру обработчика ошибок с именем BackOrder, которая будет выполняться после того, как в запись ttPOLine будут внесены изменения. Не забудьте добавить встраиваемый файл с описанием набора данных dsPO.
{include/dsPO.i} PROCEDURE BackOrder: DEFINE INPUT PARAMETER DATASET FOR dsPO. END PROCEDURE. |
3 | Добавьте в эту процедуру код проверки следующих условий:
Если эти условия истинные, то значение поля ttPOLine.POLineStatus установить равным «Back Ord». Подсказка: использование буфера для записи ttPOLine позволит получить доступ к её полям с помощью синтаксиса «::». DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO. hBuffer = DATASET dsPO:GET-BUFFER-HANDLE("ttPOLine"). IF hBuffer::POLineStatus = "Ordered" AND hBuffer::ItemNum = 50 THEN hBuffer::POLineStatus = "Back Ord". RETURN. |
4 | Сохраните изменения и убедитесь в отсутствии ошибок компиляции. |