REDEFINIREA FUNCTIILOR TASTELOR

Continutul acestui unit:


In acest capitol se va invata cum sa redefinim functiile tastelor.

Subiecte atinse:


PROCEDURI PACKAGED


O procedura packaged este o rutina form-level disponibila in toate formele.Ea este similara ca functionalitate "macro"-urilor din versiunea anterioara SQL*FORMS.


Unele proceduri packaged,cum ar fi MESSAGE,pot fi folosite in orice fel de trigger.Altele sunt restrictionate anumitor tipuri de trigger-e pentru ca ele interfera cu propria procesare a lui SQL*FORMS.Procedurile packaged discutate in acest capitol sunt restrictionate;asta inseamna ca pot fi folosite numai in key-triggers.


Nota:procedurile packaged sunt disponibile de la versiunea 3 la versiunea 5 numai,a lui SQL*FORMS;nu sunt disponibile in alte implementari ale lui PL/SQL.


CUM SUNT FOLOSITE ?


Apelul unei proceduri packaged este o declaratie executabila de PL/SQL. Apelul consta in numele procedurii urmat de o lista de argumente intre paranteze.Formatul listei de argumente depinde de specificul procedurii.


ARGUMENTE VALIDE


Un argument poate fi unul dintre urmatoarele:


Argumentele pot fi deasemenea o combinatie a variabilelor de mai sus si a operatorului de concatenare sau a celor aritmetici.

Tipul de argument valid,adica character string sau number,va depinde de cerintele fiecarei proceduri packaged.

TIPURI DE TRIGGER





Trigger-ele pot fi clasificate in diferite moduri.Probabil cea mai importanta distinctie este intre Key si Event trigger-e.

S-a prezentat deja diferenta dintre un PRE-FORM si un KEY-STARTUP trigger. Fiecare trigger poate valida utilizatorul curent si initializa campurile ecranului intr-o intrare a unui form dar numai KEY-STARTUP poate executa un query.Posibilitatea de a apela proceduri packaged restrictionate, cum ar fi Execute_Query,este o caracteristica functionala ce face distinctia intre key-trigger-e si event-trigger-e.

Key-trigger-ele sunt subiectul acestui unit.

KEY-TRIGGER-E

Key-trigger-ele sunt usor de identificat deoarece toate au nume ce incep cu KEY-.Majoritatea Key-trigger-elor au o legatura one-to-one cu apasarea tastelor specifice.Adica trigger-ul se activeaza numai cand se apasa o anumita tasta sau o secventa de taste.
Procedurile packaged restrictionate (Execute_Query,Next_Block) pot fi invocate numai de key-trigger-e,sau user-named-trigger-e apelate de key- trigger-e.

 Exemplu de key-trigger:
         KEY-EXEQRY on the DEPT Block
         ---------------------------------------------
         EXECUTE_QUERY; GO_BLOCK('EMP');EXECUTE_QUERY;
         GO_BLOCK('DEPT');
         ---------------------------------------------

Asa cum se poate vedea din exemplul de mai sus key-trigger-ele ofera posibilitatea de a atribui multiple functii unei singure taste.Majoritatea trigger-elor care sunt generate automat cand se creaza un detail form sau un default master sunt key-trigger-e care realizeaza mutiple functii ale tastelor.

  _________________________________________________________________
  |                                                                |
  |                  Each Function Key Performs                    |
  |                      a Standard Action                         |
  |                                                                |
  |               ______    ______     ______      ______          |
  |    Function   | F1 |    | F2 |     | F3 |      | F4 |          |
  |    Keys       |____|    |____|     |____|      |____|          |
  |                 |         |          |           |             |
  |                 |         |          |           |             |
  |               -------   -------    ---------    -------        |
  |               |     |   |     |    |       |    |     |        |
  |               |Next |   |Next |    |Execute|    |Clear|        |
  |               |Field|   |Block|    |Query  |    |Field|        |
  |    Standard   |     |   |     |    |       |    |     |        |
  |    Actions    |_____|   |_____|    |_______|    |_____|_       |
  |________________________________________________________________|




  _________________________________________________________________
  |                                                                |
  |                  Key Triggers Allow Keys                       |
  |                      To Change Roles                           |
  |                                                                |
  |               ______    ______     ______      ______          |
  |    Function   | F1 |    | F2 |     | F3 |      | F4 |          |
  |    Keys       |____|    |____|     |____|      |____|          |
  |                    \      |          |           |             |
  |                      \    |          |           |             |
  |                        \  |          |           |             |
  |               -------   -------    ---------    -------        |
  |               |     |   |     |    |       |    |     |        |
  |               |Next |   |Next |    |Execute|    |Clear|        |
  |               |Field|   |Block|    |Query  |    |Field|        |
  |    Standard   |     |   |     |    |       |    |     |        |
  |    Actions    |_____|   |_____|    |_______|    |_____|        |
  |________________________________________________________________|


KEY-TRIGGER-E SI TASTELE ASOCIATE LOR


      Tip trigger            Functia asociata tastei
      -----------            -----------------------
      Key-CLRBLK             [Clear Block]
      Key-CLRFRM             [Clear Form]
      Key-CLRRAC             [Clear Record]
      Key-COMMIT             [Commit/Accept]
      Key-CQUERY             [Count Query Hits]
      Key-CREREC             [Insert Record]
      Key-DELREC             [Delete Record]
      Key-DOWN               [Down]
      Key-DUPFLD             [Duplicate Field]
      Key-DUPREC             [Duplicate Record]
      Key-EDIT               [Edit]
      Key-ENTER              [Enter]
      Key-ENTQRY             [Enter Query]
      Key-EXEQRY             [Execute Query]
      Key-EXIT               [Exit]
      Key-HELP               [Help]
      Key-LISTVAL            [List]
      Key-MENU               [Block Menu]
      Key-NXTBLK             [Next Block]
      Key-NXTFLD             [Next Field]
      Key-NXTKEY             [Next Primary Key Field]
      Key-NXTREC             [Next Record]
      Key-NXTSET             [Next Set of Records]
      Key-PRINT              [Print]
      Key-PRVBLK             [Previous Block]
      Key-PRVFLD             [Previous Field]
      Key-PRVREC             [Previous Record]
      Key-SCRDOWN            [Scroll Down]
      Key-SCRUP              [Scroll Up]
      Key-UP                 [Up]
      Key-UPDREC             [Lock Record]

Nota:Nu se pot redefini toate functiile de taste din SQL*FORMS cu functii key-triggers.De obicei nu poti redefini urmatoarele functii statice de taste pentru ca ele sunt des utilizate de catre terminal sau sistemul de management al interfetei utilizator si nu de catre SQL*FORMS.

 [Beginning of Line]    [End of Line]       [Refresh]
 [Clear Field]          [First Line]        [Right]
 [Copy]                 [Insert Line]       [Scroll Left]
 [Cut]                  [Insert/Replace]    [Scroll Right]
 [Delete Backward]      [Last Line]         [Search]
 [Delete Character]     [Left]              [Select]
 [Delete Line]          [Menu]              [Show Keys]
 [Display Error]        [Paste]             [Transmit]


ON-NEW-FIELD-INSTANCE TRIGGER


Acest trigger se activeaza la intrarea intr-un camp.Este o singura exceptie aceea ca key-trigger-ele pot executa functii de tasta.Utilizatorii pot include afisarea unei liste de valori sau un popup editor pentru a introduce un camp.

  _________________________________________________________________
  |                                                                |
  |                    One Key Can Perform                         |
  |                    Multiple Functions                          |
  |                                                                |
  |                 ______                                         |
  |    Execute      |    |                                         |
  |    Query Key    |____|                                         |
  |                   |                                            |
  |                   |                                            |
  |                   |                                            |
  |               ---------   -------   ---------   ---------      |
  |               |       |   |     |   |       |   |        |     |
  |               |Execute|-->|Next |-->|Execute|-->|Previous|     |
  |               |Query  |   |Block|   |Query  |   |Block   |     |
  |    Standard   |       |   |     |   |       |   |        |     |
  |    Actions    |_______|   |_____|   |_______|   |________|     |
  |________________________________________________________________|



DEFINIREA UNUI KEY TRIGGER:


       KEY-EXEQRY on Master Block
       --------------------------
       EXECUTE_QUERY;
       NEXT_BLOCK;
       EXECUTE_QUERY;
       PREVIOUS_BLOCK;


REDEFINIREA FUNCTIILOR TASTELOR




FOLOSIREA LUI KEY-OTHERS PENTRU A ASIGNA ACEEASI FUNCTIONALITATE LA TOATE TASTELE

       -------------------------------------------------
       |                                               |
       |    1. List of Customers                       |
       |                                               |
       |    2. Product Pricelist                       |
       |                                               |
       |    3. Order Entry                             |
       |                                               |
       |    4. Exit                                    |
       |                                    ___        |
       |    Enter choise and press any key: |__|       |
       |_______________________________________________|

       KEY-OTHERS on MENU block
       ------------------------------------------------
       IF :MENU.CHOISE = 1 THEN
          GO_BLOCK('CUS');
       ELSIF :MENU.CHOISE = 2 THEN
          GO_BLOCK('PRICE');
       ELSIF :MENU.CHOISE = 3 THEN
          GO_BLOCK('ORD');
       ELSIF :MENU.CHOISE = 4 THEN
          EXIT_FORM;
       ELSE
          MESSAGE('Enter a 1, 2, 3 or 4, please');
       END IF;
       ------------------------------------------------


TRIGGER SCOPE SI KEY-OTHERS



  _________
  | Press |
  | [Help]|
  |_______|
      |
      |
  -----------------------     -------------------------     -----------
  | Look for Key-Help on|  -->| Look for KEY-OTHERS on|  -->| Perform |
  |  FIELD. If not then |  |  |  FIELD. If not then   |  |  | HELP    |
  |  BLOCK. If not then |  |  |  BLOCK. If not then   |  |  | function|
  |  FORM.  If not then |__|  |  FORM.  If not then   |__|  |_________|
  |_____________________|     |_______________________|
             |                            |
   If found  |                  If found  |
             |                            |
   Fire KEY-HELP                Fire KEY-OTHERS




FOLOSIREA LUI KEY-OTHERS PENTRU A DEZACTIVA TASTE





      KEY-OTHERS on EMP
      --------------------------
      MESSAGE('Function key unavailable');

      KEY-UP on EMP                 KEY-DOWN on EMP
      --------------                ---------------
      UP;                           DOWN;

      KEY-PRVBLK on EMP             KEY-EXIT on FORM
      -----------------             ---------------
      PREVIOUS_BLOCK;               EXIT_FORM;



FEREASTRA DE DEFINIRE A TRIGGER-ULUI SETARILE LUI KEY-TRIGGER



   ___________________________________________________________________
   |                                                                 |
   |  ---------------------Trigger Definition----------------------- |
   |   ------------------------------------------------------------  |
   |   | Trigger: KEY-MENU        | ----For Key Triggers Only---- |  |
   |   | Block:                   | [ X ] Show Keys               |  |
   |   | Field:                   | Descrip:  Purge Directory     |  |
   |   | Trigger Style:  V3       |                               |  |
   |   |----------------------------------------------------------|  |
   |   | ---------------------Trigger Text----------------------- |  |
   |   | HOST< 'pu/keep=1'>;                                       |  |
   |   |                                                          |  |
   |   |                                                          |  |
   |   |----------------------------------------------------------|  |
   |   | ------------------------Comment------------------------- |  |
   |   |                                                          |  |
   |   |__________________________________________________________|  |
   |                                                                 |
   |  Enter the name of the block the trigger is attached to.        |
   |  Frm: UNIT17   Blk: ord   Fld:   Trg:         List Rep          |
   |                                                                 |
   |_________________________________________________________________|


Folositi forma de definire a trigger-ului ca sa creati Key trigger si Event trigger.Doua caracteristici ale trigger-elor regasite numai la key trigger sunt:



TRIGGER-UL NU AU EFECT IN ANUMITE SITUATII


Situatiile speciale sunt:


Limitarea tastelor disponibile in situatiile anterioare

Urmatoarele proceduri suspenda actiunra unui trigger:



UN EXEMPLU DE SUSPENDARE A ACTIUNII UNUI TRIGGER





UTILIZAREA KEY TRIGGER-ELOR PENTRU CHESTIONARI


In pagina anterioara a trigger-ului,proiectantul a redefinit tastele [Enter Query] pentru a realiza functii multiple.

Trigger-ul apartine blocului ORD.Aceasta inseamna ca atunci cand cursorul este intr-un bloc ORD si operatorul apasa [ENTER QUERY] trigger-ul devine activ, facand prioritare functiile asociate cu [Enter Query].

Actiunile trigger-ului sunt urmatoarele:

  1. Cursorul se muta in blocul de item-uri;blocul item-urilor este sters; cursorul se intoarce in blocul ORD;blocul ORD este sters.
  2. Procedura packaged Enter_Qyery se executa transferand form-ul in modul Enter Query.
  3. Utilizatorul poate introduce una sau mai multe conditii de cautare, apoi apasa [Execute Query]
  4. Tastele [Execute Query] realizeaza functiile standard din Execute Query
  5. Inregistrarile reprezentand criteriile de interogare se executa si se afiseaza.
  6. Comanda THEN se intoace in codul trigger-ului acolo unde s-a intrerupt adica in corpul lui IF.


Observati ca nu exista corpul procedurii packaged Execute_Query in cadrul trigger-ului.Functia Enter_Query (pasul 2) suspenda actiunea trigger-ului pana cand utilizatorul alege o actiune (adica apasarea lui [Execute Query].Pasii 3, 4 si 5 se executa in afara prelucrarii trigger-ului.Trigger-ul reincepe imediat ce chestionarul este complet.

MAI MULTE DESPRE MODUL ENTER QUERY





PROCEDURILE RESTRICTED PACKAGED

   Aceste proceduri pot fi apelate doar din key trigger-e si din trigger-ele
On-New-Field-Instance.

   3  BLOCK MENU                *  EXIT_FORM(+)
   *  CLEAR BLOCK               3  FIRST_RECORD
   3  CLEAR_EOL                    GO_BLOCK+
      CLEAR_FIELD                  GO_FIELD+
   *  CLEAR_FORM(+)             3  GO_RECORD+
      CLEAR_RECORD                 HELP
      COMMIT_FORM               3  LAST_RECORD
      COUNT_QUERY               *  LIST_VALUES(+)
      CREATE_RECORD             *  NEW_FORM+
      DELETE_RECORD                NEXT_BLOCK
   3  DO_KEY+                      NEXT_FIELD
      DOWN                         NEXT_KEY
      DUPLICATE_FIELD              NEXT_RECORD
      DUPLICATE_RECORD             NEXT_SET
   3  EDIT_FIELD(+)             3  POST
      ENTER                        PREVIOUS_BLOCK
      ENTER_QUERY(+)               PREVIOUS FIELD
      EXECUTE_QUERY(+)             PREVIOUS_RECORD
      EXECUTE_TRIGGER+             SCROLL_DOWN
                                   SCROLL_UP
                                   SHOW_KEYS
                                   UP

        Key:
        +    necesita argument(e)
        *    echivalent cu V2 dar cu functii suplimentare
        (+)  argumet(e) optional(e)
        3    nou in V3


SINTAXA SI O DESCRIERE PE SCURT A PROCEDURILOR RESTRICTED PACKAGED


BLOCK_MENU
sintaxa:BLOCK_MENU;
afiseaza blocurile meniului si accepta cererile operatorului.Daca intrarea operatorului este o selectie valida,cursorul se duce pe blocul cu propietatea respectiva.
CLEAR_BLOCK
sintaxa:CLEAR_BLOCK[(ASK_COMMIT | DO_COMMIT | NO_COMMIT | NO_VALIDATE)];
goleste blocul curent.Daca exista schimbari in blocul curent care nu au fost plasate sau executate,actiunea lui CLEAR_BLOCK depinde de parametri care au fost furnizati.
CLEAR_EOL
sintaxa:CLEAR_EOL;
sterge valoarea campului curent de la pozitia curenta a cursorului pana la sfarsitul liniei sau campului.
CLEAR_FIELD
sintaxa:CLEAR_FIELD;
sterge intrage valoare a campului curent-indiferent de pozitia cursorului-shimba valoarea campului la NULL.
CLEAR_FORM
sintaxa:CLEAR_FORM[(ASK_COMMIT | DO_COMMIT | NO_COMMIT | NO_VALIDATE,TO_SAVEPOINT | FULL_ROLLBACK)];
goleste form-ul curent.Daca exista schimbari in form-ul curent care nu au fost plasate sau executate,actiunea lui CLEAR_FORM depinde de parametri care au fost furnizati.
CLEAR_RECORD
sintaxa:CLEAR_RECORD;
goleste inregistrarea curenta din bloc.Daca un query este deschis in bloc,SQL*Forms scoate o inregistrare pentru a umple blocul.
COMMIT_FORM
Nota:Commit_Form va fi discutat pe larg in unit-ul referitor la tranzactiile cu trigger-e.
COUNT_QUERY
sintaxa:COUNT_QUERY;
identifica numarul de randuri pe care query il va atribui blocului curent.Daca sunt modificari de facut in bloc,SQL*Forms permite operatorului sa le faca inaintea procesului COUNT_QUERY.
CREATE_RECORD
sintaxa:CREATE_RECORD;
creaza o noua inregistrare in blocul curent dupa inregistrarea curenta.SQL*Forms trece la noua inregistrare.
DELETE_RECORD
sintaxa:DELETE_RECORD;
sterge inregistrarea curenta din block.Daca un query este deschis in bloc,SQL*Forms scoate o inregistrare pentru a umple blocul daca este necesar.
DO_KEY sintaxa:DO_KEY('restricted packaget procedure name')
executa key trigger-ul pentru tasta corespunzatoare procedurii packaged specificate.Daca trigger-ul nu exista insasi procedura packaged este apelata.
DOWN
sintaxa:DOWN
se muta pe instanta,din campul curent,in urmatoarea inregistrare cu numarul de secventa mai mare.
DUPLICATE_FIELD
sintaxa:DUPLICATE_FIELD;
atribuie campului curent aceeasi valoare pe care o are instanta acestui camp in inregistrarea anterioara.
DUPLICATE_RECORD
sintaxa:DUPLICATE_RECORD;
copiaza valoarea fiecarui camp din inregisrarea curenta in campurile corespunzatoare din urmatoarea inregistrare cu numarul de secventa mai mic.
EDIT_FILE
sintaxa:EDIT_FIELD [(x_coordinate,y_coordinate,width, height)];
EDIT_FIELD activeaza SQL*Forms(Run Form) editorul de camp pentru campul curent si pune form-ul in modul Edit.
ENTER
sintaxa:ENTER;
valideaza datele din unitatea curenta
Nota:Acesta este utilizat in special in cadrul blocului.
ENTER_QUERY
sintaxa:ENTER_QUERY [(ALL_RECORDS [,FOR_UPDATE [,NOWAIT];
goleste blocul curent si pune form-ul in modul Enter Query.Daca sunt modificari de facut,SQL*Forms permite operatorului sa le realizeze in timpul evenimentului ENTER_QUERY.
Nota:Puteti specifica anumiti parametri pentru ENTER_QUERY;pentru detalii vezi SQL*Forms Designers Reference.
EXECUTE_QUERY
sintaxa:EXECUTE_QUERY [(ALL_RECORDS [,FOR_UPDATE [,NOWAIT])];
goleste blocul curent,deschide un chestionar, intoarce numarul de inregistrari selectate.Daca sunt modificari de facut,SQL*Forms permite operatorului sa le realizeze in timpul procesului EXECUTE QUERY.
Nota:Puteti specifica anumiti parametri pentru EXECUTE QUERY;pentru detalii vezi SQL*Forms Designers Reference.
EXIT_FORM
sintaxa:EXIT_FORM[(ASK_COMMIT | DO_COMMIT | NO_COMMIT | NO_VALIDATE, TO_SAVEPOINT | FULL_ROLLBACK | NO_ROLLBACK)]
te scoate din form.Daca in form-ul curent sunt modificari care nu au fost realizate,modul cum actioneaza EXIT_FORM depinde de parametri pe care i-ati furnizat.
FIRST_RECORD
sintaxa:FIRST_RECORD
se muta pe prima inregistrare din lista de inregistrari a blocului.
GO_BLOCK
sintaxa:GO_BLOCK(nume_bloc);
se muta pe blocul indicat.Daca blocul respectiv nu poate fi accesat se intoarce eroare.
GO_FIELD
sintaxa:GO_FIELD(nume_camp);
se muta pe campul indicat.
GO_RECORD
sintaxa:GO_RECORD(numar inregistrare);
foloseste o secventa numerica pentru a se muta pe inregistrarea respectiva.
HELP
sintaxa:HELP;
HELP afiseaza mesaje corespunzatoare campului curent in in linia de mesaje.Daca mesajul este deja afisat,HELP afiseaza fereastra detaliata de help pentru campul respectiv.
LAST_RECORD
sintaxa:LAST_RECORD;
se muta pe ultima inregistrare din lista de inregistrari a blocului.Daca un chestionar este deschis in bloc, SQL*Forms aduce inregistrarile ramase selectate in lista de inregistrari a blocului.
LIST_VALUES
sintaxa:LIST_VALUES(NO_RESTRICT | RESTRICT);
afiseaza lista valorilor campului curent.Lista valorilor ramane afisata pana cand operatorul apasa [Exit/Cancel] sau selecteaza o valoare in camp.
Implicit LIST_VALUES utilizeaza parametrul NO_RESTRICT. Daca utilizati parametrul RESTRICT,SQL*Forms foloseste cautarea automata si descrierea completa(ca mai jos).
Automatic Search and Complete
Cu cautare automata si descriere completa,o lista de de valori evalueaza valorile campului curent cu o valoare de cautare.Aceasta se intampla daca un operator apasa [List] intr-un camp care are o lista de valori, SQL*Forms verifica daca campul contine o valoare.Daca campul contine o valoare,SQL*Forms utilizeaza automat aceasta valoare la fel ca in cazul in care operatorul introduce valoarea in lista valorilor campurilor cautate si apasa [List] pentru a limita lista.
Daca valoarea campului va limita lista la o singura valoare,SQL*Forms nu afiseaza lista de valori,dar automat citeste valoarea corecta in camp.
NEW_FORM
sintaxa:NEW_FORM(nume_form);
iese din form-ul curent si intra in cel indicat.S-a terminat form-ul curent.SQL*Forms elibereaza memoria daca form-ul de iesirea fost folosit.
NEXT_BLOCK
sintaxa:NEXT_BLOCK;
se muta pe blocul de validare cu urmatorul numar de secventa mai mare decat blocul curent.Daca nu exista un astfel de bloc,NEXT_BLOCK se muta pe blocul de validare cu cel mai mic numar de secventa.
NEXT_FIELD
sintaxa:NEXT_FIELD;
se muta pe blocul de validare cu urmatorul numar de secventa mai mare decat campul curent.Daca nu exista un astfel de bloc,NEXT_FIELD se muta pe blocul de validare cu cel mai mic numar de secventa.
NEXT_KEY
sintaxa:NEXT_KEY;
trece la validarea principalei taste camp cu urmatorul numar de secvecta mai mare decat campul curent.Daca nu exista o astfel de tasta in campul curent se intoarce eroare.
NEXT_RECORD
sintaxa:NEXT_RECORD;
se muta pe inregistrarea cu urmatorul numar de secventa mai mare decat inregistrarea curenta.Daca o astfel de inregistrare nu exista,SQL*Forms trebuie sa aduca sau sa creeze o inregistrare.Daca inregistrarea curenta este o noua inregistrare,NEXT_RECORD esueaza.
NEXT_SET
sintaxa:NEXT_SET;
aduce alt set de inregistrari din baza de date si se muta pe prima inregistrare din set.NEXT_SET reuseste doar daca un chestionar este deschis in blocul curent.
POST
sintaxa:POST;
POST scrie date in form pentru baza de date, dar nu le salveaza in baza.
Nota:POST este prezentat pe larg in unit-ul Transaction Trigger.
PREVIOUS_BLOCK
sintaxa:PREVIOUS_BLOCK;
se muta pe blocul de validare cu urmatorul numar de secventa mai mic decat blocul curent.Daca nu exista un astfel de bloc,PREVIOUS_BLOCK se muta pe blocul de validare cu cel mai mare numar de secventa.
PREVIOUS_FIELD
sintaxa:PREVIOUS_FIELD;
se muta pe campul de validare cu urmatorul numar de secventa mai mic decat campul curent.Daca nu exista un astfel de camp,PREVIOUS_FIELD se muta pe campul de validare cu cel mai mare numar de secventa.
PREVIOUS_RECORD
sintaxa:PREVIOUS_RECORD;
se muta pe inregistrarea cu urmatorul numar de secventa mai mic decat inregistrarea curenta.
SCROLL_DOWN
sintaxa:SCROLL_DOWN;
scrolleaza lista de inregistrari a blocului curent in sus pe aproximativ 80% din blocurile afisate.Aeasta afiseaza inregistrarile de mai jos din blocul afisate.Daca sunt inregistrari disponibile si un chestionar este deschis in bloc,SQL*Forms aduce inregistrari in timpul procesului SCROLL DOWN.
Dupa scrollare,SCROLL_DOWN se muta pe campul din pozitia cursorului din inregistrarea cu cel mai mic numar de secventa dintre cele afisate.
SCROLL_UP
sintaxa:SCROLL_UP;
scrolleaza lista de inregistrari a blocului curent in jos pe aproximativ 80% din blocurile afisate.Aceasta afiseaza inregistrarile de mai sus din blocul afisat. Dupa scollare,SCROLL UP se muta pe campul din pozitia cursorului din inregistrarea cu cel mai mic numar de secventa dintre cele afisate.
SHOW_KEYS
sintaxa:SHOW_KEYS;
SHOW_KEYS afiseaza fereastra Show Keys.Cand operatorul apasa o tasta functionala,SQL*Forms reafiseaza form-ul cum era inainte de utilizarea lui SHOW_KEYS.
UP
sintaxa:UP;
se muta pe campul din pozitia cursorului din inregistrarea cel mai mic numar de secventa.


PROCEDURI PACKAGED - EXEMPLE

                
   ON-NEW-FIELD-INSTANCE ON CUS COMMENTS
           EDIT_FIELD (10,4,40,10);

   KEY-STARTUP on Form
           DO_KEY ('execute_query');

   KEY-EXIT on Form
           EXIT_FORM (DO_COMMIT);

   KEY-PRVFLD on ITEM.ITEMID
           UP;

   KEY-LISTVAL on CUS.CUSTID
         LIST_VALUES (RESTRICT);


CATEVA SFATURI LA TRIGGER-E





CAND UTILIZATI PROCEDURI NU UITATI:




UNIT 12 EXERCITII


Redefinirea functiilor tastelor

Nu uitati sa generati si sa testati cum trebuie.

  1. Scrieti trigger-ul KEY-LISTVAL in ORD.CUSTID pentru folosirea cautarii automate si specificarii complete a procedurii packaged List_Values.

  2. Redefiniti tasta [Clear Form] pentru a actualiza user id-ul si datele in blocul de control dupa ce este sters form-ul.

  3. Redefiniti tasta [Next Field] in ITEM.QTY pentru a merge pe primul camp al inregistrarii urmatoare.

  4. Redefiniti tasta [Previous Field] in ITEM.QTY pentru a merge pe ultimul camp activ al urmatoarei inregistrari.

  5. Srieti un trigger care plaseaza valoarea lui SCR_STDPRICE in campul ACTUAL PRICE daca pretul actual este nul.

       Daca aveti timp:

  6. Scrieti trigger-ul On-NewField-Instance in CUS.COMMENTS pentru a afisa versiunea pop-up a campului COMMENTS.Trigger-ul trebuie sa faca urmatoarele:


UNIT 12:SOLUTII

   1.
       KEY-LISTVAL on ORD.CUSTID
       ------------------------------------
       LIST_VALUES(RESTRICT);
       ------------------------------------

   2.
       KEY-CLRFRM
       ----------------------------------------------------
       CLEAR_FORM;
       :CTL.TODAY1 := :GLOBAL.TODAY;
       :CTL.TODAY2 := :GLOBAL.TODAY;
       :CTL.USER1  := :GLOBAL.CURR_USER;
       :CTL.USER2  := :GLOBAL.CURR_USER;
       ----------------------------------------------------

        Atentie ca atribuirile globale de sarcini pot fi inlaturate si adaugate
        din PRE-FORM TRIGGER.

   3.
       KEY-NXTFLD on ITEM.QTY
       -----------------------------------------
       NEXT_RECORD;
       -----------------------------------------

   4.
       KEY-PRVFLD on ITEM.ITEMID
       -----------------------------------------
       PREVIOUS_FIELD; UP;
       -----------------------------------------

   5.
       KEY-NXTFLD on ITEM.ACTUALPRICE
       -----------------------------------------------------
       IF     : ITEM.ACTUALPRICE IS NULL THEN
              :ITEM.ACTUALPRICE: = :ITEM.SCR_STDPRICE;
       END IF;
       NEXT_FIELD;
       -----------------------------------------------------

   6.Daca aveti timp:

       ON-NEW-FIELD-INSTANCE on CUS.COMMENTS field
       ------------------------------------------------------------------
       MESSAGE('You are in the pop-up editor for the < comments> field');
       EDIT_FIELD(1,1,80,22);
       ------------------------------------------------------------------