Триггер, который вызывается при открытии формы – «WHEN-NEW-FORM-INSTANCE». В нашей форме необходимо, чтобы при загрузке сразу выполнялись запросы в блоках данных, чтобы можно было видеть, какие данные уже внесены в таблицы.
Заполнение полей из справочников при открытии формы
Чтобы поля, которые были созданы для отображения дополнительных данных справочников, были заполнены соответствующими данными уже при открытии формы, в блоках «DOVER» и «DOVER_SP» нужно создать триггеры «POST-QUERY» (рис. 128).
Рисунок 128 - Создание триггера POST-QUERY
Код «POST-QUERY» триггера для блока данных «DOVER»:
IF:dover.kod_org IS NOT NULL THEN SELECT naimen INTO:DOVER.naim_org FROM s_org WHERE kod =:DOVER.kod_org; END IF; IF:dover.kod_fiz_lic IS NOT NULL THEN SELECT Concat(Concat(Concat(Concat(fam, ' '), im), ' '), otch) as fio INTO:DOVER.fio FROM s_fiz_lic WHERE kod =:DOVER.kod_fiz_lic; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; |
Код «POST-QUERY» триггера для блока данных «DOVER_SP»:
IF:dover_sp.kod_s_naimen IS NOT NULL THEN SELECT naimen INTO:DOVER_SP.naimen FROM s_naimen WHERE kod =:DOVER_SP.kod_s_naimen; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; |
Код триггера «WHEN-NEW-FORM-INSTANCE»:
|
|
:System.Message_Level:= '5'; Go_Block('DOVER'); Execute_Query; Go_Block('DOVER_SP'); Execute_Query; Go_Block('DOVER'); |
При закрытии окна формы выполняется триггер «WHEN-WINDOW-CLOSED». Если в форме есть несохраненные данные, то нужно предложить пользователю их сохранить. Для этих целей необходимо использовать сообщение – объект «Alert».
Чтобы создать объект «Alert», необходимо в окне Object Navigator выделить узел «Alerts» и выбрать пункт меню Edit->Create.
Для нового сообщения «Alert» установим следующие свойства:
– Name: SAVE_ALERT
– Title: Сообщение
– Message: Вы хотите сохранить сделанные Вами изменения?
– Button 1 Label: Да
– Button 2 Label: Нет
– Button 3 Label: Отмена
– Default Alert Button: Button 3
Теперь создадим триггер формы «WHEN-WINDOW-CLOSED» со следующим кодом:
DECLARE but NUMBER; stat VARCHAR2(14); BEGIN Go_Block('DOVER'); stat:=:System.Block_Status; Go_Block('DOVER_SP'); stat:= stat ||:System.Block_Status; if stat <> 'QUERYQUERY' THEN but:= Show_Alert('SAVE_ALERT'); if but = ALERT_BUTTON3 then -- Нажали "Отмена" return; end if; if but = ALERT_BUTTON1 then -- Нажали "Да" Save_Form; end if; end if; Exit_Form(NO_VALIDATE); END; |