Передмова, Oracle, Бази даних, статті

Даний документ містить досить короткий опис тригерів, що використовуються в Oracle Forms. Основним матеріалом для створення методички була довідкова система до Developer 200 Forms Designer, книга “Oracle Енциклопедія користувача “, а також програми, написані безпосередньо автором даної роботи.

Як здається автору даного документа для виконання стандартного завдання необхідно і можливо досить освоїти такі тригери:
WHEN_NEW_INSTANCE_FORM, WHEN_NEW_INSTANCE_ITEM, ON_CHANGE, WHEN_VALIDATE_ITEM,
POST_QUERY, ON_ERR.




Зміст





Про події і тригерах


Тригери – це безпосередньо шматки програмного коду, який ви пишете для реалізації функціональності вашого застосування. Кожен тригер має ім’я і містить один або більше PL / SQL операторів. Тригер на рівні середовища розробки зв’язується з яким-небудь подією і виконується при виникненні цього події.

Імена тригерів відповідають runtime подій, з якими вони пов’язані. Так наприклад тригер “When-Button-Pressed” відповідає події натискання кнопки “Button Pressed”, у відповідності з цим, коли користувач натискає дану кнопку Oracle Forms. викликає даний тригер і виконує його код.

Тригер має бути пов’язаний безпосередньо з яким-небудь об’єктом, таким як форіа, блок у формі або який-небудь елемент (текстове поле, кнопка і т.д.) Наприклад в формі з трьома кнопками кожна з них має When-Button-Pressed тригер і кожен з цих тригерів містить різний PL / SQL код. Користувач натискає якусь кнопку і тригер, прикріплений до цієї кнопці (When-Button-Pressed) спрацьовує. Очевидно, що інші тригера When-Button-Pressed, прикріплені до інших кнопкам не спрацьовують.

Типи подій


Oracle Forms обробляє певний набір подій, кожна з яких має вбудований тригер (мається на увазі там немає готового коду, але він може бути написаний в цьому місці). Події можна розділити на групи, про основні з яких буде сказано нижче.

Події інтрефейса (Interface
Events)


Події цієї групи очевидні (пов’язані з елементами інтерфейсу):

Подія – Ім’я тригера


Події внутрішнього виконання (Internal Processing Events)


Розглянемо форму з двома блоками A і B, в кожному з яких є по текстовому полю. Для GUI платформ, користувач може перемістити фокус вводу з елемента з Блоку A в елемент Блоку В натиснувши мишкою на останній. Хоча ця операція включає тільки одну дію (натискання мишки на елементі блоку В) на Насправді вона викликає цілий ряд подій, кожна з яких може мати власний тригер Розглянемо цю послідовність подій та пов’язані з ними тригери.


Важливо розуміти, що навігаційні події, такі як “Leave the Item” і “Enter the Block” виникають в ході внутрішньої навігації у формі, що відповідає переходам між об’єктами ієрархії в.Oracle Forms.

У цьому прикладі, щоб перемістити фокус від вихідного елемента до бажаного, програма Oracle Forms спершу перевірила значення у вихідному елементі, потім піднялася на рівень запису і перевірила всі елементи записи, потім на рівень блоку і т.д. поки не закінчила установкою готовності введення для бажаного елемента.

Модель, використовувана Oracle Forms, гарантує цілісність даних в рамках елемента, записи, блоку і форми. Для кожного з перелічених об’єктів в даній моделі є свій рівень. Як буде показано далі для кожного рівня визначений набір тригера, що дозволяють реалізувати необхідну функціональність додатка

Огляд категорій тригерів


Цей параграф містить огляд найбільш часто використовуваних тригерів, згрупованих за функціональним категоріям


Тригери блоків (Block
Processing Triggers
)


Тригера блоків спрацьовують при виникненні подій, пов’язаних з управлінням записами в блоках.

Наведемо основні тригера даної категорії та їх можливе використання

When-Create-Record (“Коли створюється новий запис”)


Спрацьовує при спробі Oracle Forms створити новий запис в блоці. Може бути использованно для завдання значення за замовчуванням в складних ситуаціях, напрмер коли воно (значення за замовчуванням) може залежати від уже введених даних (напрмер в попереднього запису). Зрозуміло в простих випадках користуйтеся властивістю DefaultValue для елементів.

When-Clear-Block


Спрацьовує, коли Oracle Forms видаляє всі записи з поточного блоку

When-Database-Record


Спрацьовує, коли Oracle Forms змінює статус записи на Insert (для нової запису) or Update (для зміненої вже зберігається). Цей статус вказує, що даний запис буде оброблена наступної COMMIT_FORM операцією (тобто буде оброблена сервером).

When-Remove-Record


Спрацьовує, коли яка-небудь запис видаляється. Може бути використане для перерахунку “підсумкових сум” по блоку

Приклад 1 Є табличний блок T_LUDI, що містить список співробітників деякого підприємства. і в ньому поле зарплата

Під цим блоком розташований інший блок BLOCK_ITOGI. В ньому є поля – сума по зарплаті і премії для всіх введених співробітників. Щоб перерахувати суму із зарплати при видаленні однієї із запису досить ввести текст:


begin
:BLOCK_ITOGI.TOT_ZARPLATA:=:BLOCK_ITOGI.TOT_ZARPLATA-:T_LUDI.ZARPLATA;
end;

“Інтерфейсні” Тригери (Interface Event Triggers)


“Інтерфейсні” тригери спрацьовують (що випливає з їхньої назви) при виникненні подій інтерфейсу. Деякі з них (такі як When-Button-Pressed), спрацьовують тільки при безпосередніх діях користувача. Інші, як When-Window-Activated, можуть бути спрацювати в внаслідок як безпосередньо дії користувача (мишку поставив на цей екран) так і в результаті дій програми (відкрив форму командою OPEN_FORM).

Наведемо основні тригера даної категорії та їх можливе використання

When-Button-Pressed


Найбільш часто використовуваний тригер, спрацьовує коли користувач натискає кнопку

Приклад 2 Для обчислення загальних сум по зарплаті і премії з поиощью кнопки “Обчислити”

  begin
do_key(“commit_form”);
select sum(T_LUDI.ZARPLATA) into :BLOCK_ITOGI.TOT_ZARPLATA from T_LUDI;
select sum(T_LUDI.PREMIA) into :BLOCK_ITOGI.TOT_PREMIApremia from T_LUDI;
end;

When-CheckBox-Changed


Спрацьовує, коли користувач перемикає стан check-box-a

When-Image-Activated


Спрацьовує, коли користувач двічі натискає на картинку (image item)

When-Image-Pressed


Спрацьовує, коли користувач натискає на картинку (image item)

Key- [all]


Замінює дії пов’язані з даними “функціональними” клавішами. Наприклад ви можете написати тригер Key-EXIT, щоб замінити стандартний вихід.

When-Radio-Changed


Спрацьовує, коли користувач змінює поточну “обрану” кнопку в радіо-групі.

When-Timer-Expired


Спрацьовує, коли час програмного таймеа закінчується Використовуйте тригер When-Timer-Expired для поновлення значень будь-яких елементів або виконання будь-яких інших завдань, які повинні статися через певний проміжок часу

When-Window-Activated


Спрацьовує, коли користувач або додаток активізує вікно. Може бути використаний для отримання в програмі початкових значень властивостей вікна за допомогою вбудованої функції GET_WINDOW_PROPERTY, а також для автоматичної установки фокусу на певний елемент залежності від ситуації.

When-Window-Closed


Спрацьовує, коли користувач закриває вікно за допомогою Close команди.

When-Window-Deactivated


Спрацьовує, коли вікно стає неактивним наприклад в результаті активізації іншого вікна

When-Window-Resized


Спрацьовує, коли вікно змінюється в розмірах користувачем або програмно (Наприклад за допомогою RESIZE_WINDOW or SET_WINDOW_PROPERTY.)

Майстер-деталь

Тригери (Master-Detail Triggers)Oracle Forms генерує майстер-деталь тригери автоматично, коли ви визначаєте зв’язок між блоками. Згенеровані тригера забезпечують координацію між запісямт в головному (майстер) блоці і в підпорядкованому (деталь) блоці. Це виражається наприклад, що при переході на запис в головному блоці, автоматично в підлеглому з’являються записи, пов’язані з обраною в головному. Якщо ви не хочете створити свою спеціальну систему зв’язку, то вам немає необхідності, що-небудь міняти в сгенерированном коді.

Наведемо основні тригера даної категорії та їх можливе використання

On-Check-Delete-Master


Спрацьовує, коли Oracle Forms намагається стерти в головному (майстер) блоці

On-Clear-Details


Спрацьовує, коли Oracle Forms потрібно видалити записи з підлеглого блоку так як в головному пов’язаної записи більше немає (після видалення її звідти)

On-Populate-Details Fires


Спрацьовує, коли Oracle Forms потрібно синхронізувати вміст підлеглого блоку з активною записом в головному блоці

Тригера управління повідомленнями (Message-Handling Triggers)


Oracle Forms автоматично використовує відповідні інформаційні або про помилках повідомлення при виникненні відповідних подій. Тригера даної категорії спрацьовують у відповідь на ці події

On-Error


Спрацьовує, коли Oracle Forms “збирається” видати повідомлення про ошібке.Данний тригер рекомендується використовувати для


Користуйтеся ERROR_CODE, ERROR_TEXT, ERROR_TYPE, DBMS_ERROR_TEXT, або DBMS_ERROR_CODE вбудованими функціями для уточнення умов призвели до “помилку” (До виключення)

У більшості випадків On-Error тригера слід “прив’язати” до форми, а не до блоку або елементу. Так як “вилов” певних помилок може бути утруднений, коли Oracle Forms виконує внутрішню навігацію, таку як під час Commit процесу

Вважаючи цей тригер дуже важливим, наведемо приклад з HELP System

У даному прикладі перевіряється код помилки і в разі певних значень вказані гілки коду їх обробки

DECLARE
lv_errcod NUMBER := ERROR_CODE;
lv_errtyp VARCHAR2(3) := ERROR_TYPE;
lv_errtxt VARCHAR2(80) := ERROR_TEXT;


    BEGIN
    IF (lv_errcod = 40nnn) THEN
    /* ** Виконання деяких дій по обробці
    */
    ELSIF (lv_errcod = 40mmm) THEN
    /* ** Виконання деяких дій по обробці
    */


    ELSIF (lv_errcod = 40zzz) THEN
    /* ** Виконання деяких дій по обробці
    */
    ELSE
    Message(lv_errtyp||”-“||to_char(lv_errcod)||”: “||lv_errtxt);
    RAISE Form_Trigger_Failure;
    END IF;
    END;

    On-Message


    Ловить повідомлення. Може бути використане для заміни стандартного своїм. Щоб визначити дане повідомлення про помилку або інформаційне користуйтесь Oracle
    Forms Codes (MESSAGE_CODE, MESSAGE_TEXT, MESSAGE_TYPE, DBMS_MESSAGE_CODE, or
    DBMS_MESSAGE_TEXT ).

    Приклад

    У даному прикладі при певному коді повідомлення піднімається об’єкт alert (Тривога), який дає користувачеві можливість продовжити роботу або преостановіть її для довиполненія якоїсь операції.

    DECLARE
    alert_button NUMBER;
    lv_errtype VARCHAR2(3) := MESSAGE_TYPE;
    lv_errcod NUMBER := MESSAGE_CODE;
    lv_errtxt VARCHAR2(80) := MESSAGE_TEXT;


      BEGIN
      IF lv_errcod = 40350 THEN
      alert_button := Show_Alert(“continue_alert”);
      IF alert_button = ALERT_BUTTON1
      THEN

      ELSE

      END IF;
      ELSE
      Message(lv_errtyp||”-“||to_char(lv_errcod)||”: “||lv_errtxt);
      RAISE Form_Trigger_Failure;
      END IF;
      END;

      “Навігаційні” тригери (Navigational Triggers)


      Навігаційні тригера або тригера “переходу” спрацьовують у відповідь на соответcтсвующіе однойменні події. На приклад, коли користувач натискає мишою на текстової елемент в іншому блоці виникає послідовність навігаційних подій, в результаті Кторов фокус вводу від поточного елемента переходить до щойно обраному.

      Навігаційні події виникають на різних рівнях ієрархії об’єктів Oracle Forms (форми, блоки, записи, елементи). Навігаційні тригера можна розділити по наступним категоріям: До-(Pre-), Після-(Post-) і Коли-Новий-Примірник (When-New-Instance) тригера.

      Pre-and Post-тригери


      Pre-і Post-тригери спрацьовують, коли Oracle Forms здійснює внутрішні переходи між різними рівнями об’єктної ієрархії Ці тригера відпрацьовуються у відповідь на дії користувача, такі як натискання кнопки [Next Item] (Наступний елемент), а також при внутрішніх переходах, коли Oracle Forms виконує деякі стандартні дії.

      Наведемо основні тригера даної категорії та їх можливе використання

      Pre-Form


      Виконується перед тим, як Oracle Forms “переходить” від зовнішньої форми до даної. Може бути використаний для:


      Pre-Block


      спрацьовує перед тим, як Oracle Forms переходить з рівня форми на рівень блоку. Можливе його використання:


      Pre-Text-Item


      спрацьовує перед тим, як Oracle Forms переходить з рівня запису на рівень елемента (а також при переході від одного елемента до іншого в рамках тієї ж запису). Можливе його використання:


      Post-Text-Item


      Спрацьовує перед тим як Оracle Forms зніме фокус введення з цього елемента. Можна використовувати цей тригер для обчислення або зміни значень елементу. Крім цього зручно використовувати цей тригер для зміни візуальних атрибутів елемента (таких як фон і колір тексту).

      Приклад

      Щоб при знаходженні курсору на поле це поле було виділено можнго використовувати пару тригера (When-New-Item-Instance,Post-Text-Item) Для зміни властивості візуальних атрибутів. Відповідно, перший з них встановлює VISUAL_ATRIBUTE наприклад в VISUAL_WHITE_ON_RED, а другий повертає в звичайний стан.

      BEGIN
      SET_ITEM_PROPERTY(“T_LUDI.FAMILIA”,VISUAL_ATTRIBUTE,”VISUAL_USSUAL”);
      END;

      Post-Record


      Спрацьовує, коли Oracle Forms “залишає” запис. Це відбувається коли фокус введення йде з даного запису наприклад до іншого запису. При переході до елементу поза даного блоку управління переходить до тригера рівня блоку. Може бути використаний для встановлення властивості visual attribute для активної записи, також як це було описано вище для одного елемента

      Post-Block


      Спрацьовує, коли Oracle Forms “залишає” блок і переходить на рівень форми.Может бути використаний для


      Post-Form


      Спрацьовує перед тим, як Oracle Forms переходить до іншої форми.

      When-New-Instance-Тригери


      When-New-Instance тнріггери спрацьовують після послідовності переходів по ієрархії об’єктів Oracle Forms, результатом якої, є переміщення фокуса введення до даного елементу. Насправді цей тригер виконується, коли фокус вже встановлений і форма готова до введення користувача. На відміну від тригерів Pre-і Post-тригери When-New-Instance не спрацьовують при внутрішніх навігаційних подіях.

      Наведемо основні тригера даної категорії та їх можливе використання

      When-New-Form-Instance


      Виконується при запуску форми, після виконання всіх навігаційних переходів. Може бути використаний для завантаження даних в форму, а також для установки глобальних змінних.

      Приклад

      Даний приклад з HELP System, був використаний автором багато разів. У ньому форма заповнюється даними з відповідних таблиць. При автоматичному побудові форми за допомогою Forms Designer цей тригер не створюється, але можна вибрати при створення панель кнопок, одна з яких “Query” виконує теж саме, проте через специфіку реалізації її доводиться натискати два рази.

      BEGIN
      Setup_My_Global_Variables; – Переходимо до головного блоку (щодо майстер-деталь)
      Go_Block(“Glavnii_Block”);
      /* ** Придушуємо стандартні “робочі” повідомлення
      */ :System.Suppress_Working := “TRUE”; – Безпосередньо виконуємо запит
      Execute_Query;
      :System.Suppress_Working := “FALSE”;


        END;

        When-New-Block-Instance


        Спрацьовує відразу після того, як фокус введення переходить від елемента з одного блоку до елементу з іншого. Це відбувається вже тоді, коли Oracle Forms готовий приймати вводяться користувачем дані, тобто вже після “послідовності навігаційних подій. ”

        When-New-Record-Instance


        Виконується після переходу фокуса від елемента з одного запису до елементу в іншого запису Це відбувається вже тоді, коли Oracle Forms готовий приймати вводяться користувачем дані, тобто вже після “послідовності навігаційних подій. Якщо новий запис знаходиться в іншому блоці по відношенню до попередньої, тоді даний тригер викликається після When-New-Block-Instance, але перед When-New-Item-Instance тригером.

        When-New-Item-Instance


        Виконується після переходу фокуса до даного елементу. Це відбувається, коли Oracle Forms готовий приймати вводяться користувачем дані, тобто вже після “Послідовності навігаційних подій Як було сказано вище цей тригер можна використовувати для зміни візуальних атрибутів елемента при отриманні ним фокуса введення.

        Query-Time Тригери


        Тригери запитів (query-time triggers) спрацьовують безпосередньо ДО або ПІСЛЯ того, як оператор або додаток запускає запит в блоці.

        Типове використання тригерів запитів:


        Transactional Тригери


        Тригери транзакцій (transactional triggers) спрацьовують на широкому діапазоні подій, що виникають при взаємодії форм і таблиць БД.

        Основні тригера дане категорії:

        Схожі статті:


        Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

        Коментарів поки що немає.

        Ваш отзыв

        Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

        *

        *