SQL Menu


Scopul acestui capitol


Acest capitol a fost creat pentru a da utilizatorului o imagine despre integrarea in aplicatii a SQL Menu si SQL Forms. El va cuprinde:


Meniuri Front-End


Un meniu Front-End este simplu de inteles, simplu de utilizat si usor de construit, nu necesita cunoasterea SQL Forms.

Toate tipurile de comenzi sunt valide in acest tip de meniuri.
Se pot apela forme cu comenzi de tipul 4, 2 sau 3. Daca sunt folosite comenzi de tipul 2 sau 3, este nevoie sa se specifice numele utilizatorului si parola ce urmeaza sa fie folosite, sau se pot utiliza &UN/&PW.
Toate procedurile si macrocomenzile impachetate in meniuri sunt disponibile. Daca se utilizeaza comenzi de tipul 4 pentru a apela o forma, se pot utiliza variabile globale pentru a comunica intre respectiva forma si meniul Front-End.

Cu toate acestea, un meniu Front-End nu este total compatibil cu SQL Forms.
De asemeni, procedurile impachetate SQL Forms nu sunt disponibile in acest tip de meniuri.


Fig. 27.1: Meniuri Front-End

OS> Runmenu aplicatie_cu_meniuri        ---------------------------------
                                        |Action Edit Block Field Record |
-------------------------------------   |--------------------------------
|  Main Menu                        |   |                               |
|                                   |   |  ---------------------------  |
|  1. Run a form (Runform...)       |   |  |  Departamental Datas    |  |
|  2. Run a report (sqlplus@report) |   |  | Dept. No:               |  |
|  3. Other commands                |   |  | Name: ACCOUNTING        |  |
-------------------------------------   |  | Location: New York      |  |
                                        |  ---------------------------  |
                                        ---------------------------------
                  ----------------------------------------------
                  | SQL> @report                               |
                  | SQL> col deptno format 99 heading 'DeptNo' |
                  | SQL> col dname format a10 heading 'Name'   |
                  | SQL> col loc format a10 heading 'Location' |
                  | SQL> select * from dept                    |
                  |                                            |
                  | DeptNo    Name             Location        |
                  | 10        Accounting       New York        |
                  | 20        Research         Dallas          |
                  | 2 records selected                         |
                  ----------------------------------------------

Introducere in integrare


SQL Menu a fost intotdeauna capabil sa ruleze aplicatii SQL Forms dintr-un meniu. Este deci posibil sa se execute o comanda, sa se transmita informatii formei prin variabile globale iar apoi sa se primeasca raspunsul de la aceasta si sa se reactioneza in consecinta.

Prin legarea SQL Menu si SQL Forms la instalare se permite proiectantului sa construiasca aplicatii integrate utilizand intreaga putere a celor doua produse.
Fig. 27.2: O aplicatie integrata Menu-Forms

---------------------------------------------------------------------------
|  Reports  Utilities  Help  Security  Exit                               |
| -------------- Summit Supporting Goods Order Application -------------- |
|  Orders   >                                                             |
|  Products >   All customers ---- Order Form --------------------------- |
|  Customers    One customer                                              |
|                                                                         |
|  Order No:  701       Order Date: 05/01/86       Ship Date: 30/05/86    |
|  Comm Plan: A      Customer: 100     JOCKSPORTS   Rapid: 7900           |
|                                                  Order Total: 4.8       |
|  ---------------------------------------------------------------------- |
|                                                                         |
|  Item   Prod     Produce              Standard  Actual   Qty     Item   |
|  No.    Code     Description          Price     Price            Total  |
|  1      200376   SB ENERGY BAR 6 Pack 2.40      2.40     2       4.80   |
|                                                                         |
|  ---------------------------------------------------------------------- |
|  Report on products ordered by all customers                            |
|  Count: 1                                OSC  DBG             REPLACE   |
---------------------------------------------------------------------------


In figura de mai sus se prezinta un exemplu de aplcatie cu meniuri intgrate intr-o forma. SQL Forms are meniul sau implicit care se poate inlocui cu altul. Cand utilizatorul ruleaza forma, el are acces la meniul aplicatiei care a fost legata acelei forme. In interiorul acestui meniu, accesul este controlat ca in oricare alt meniu. Acesta are insa avantajul de a utiliza toate procedurile si variabilele de sistem ale SQL Forms.


Meniuri integrate


Meniul poate fi considerat acum ca o interfata a unei forme. Din cadrul meniului pot fi accesate si alte forme, folosind apelurile CALL, CALL_QUERY si NEW_FORM. Orice PL/SQL din cadrul meniului este transmisa spre executie formei. Avantajele acelui mod de operare sunt:


Definirea meniului implicit


Relatia dintre o forma si un meniu este definita in 'Form Definition' din SQL Forms. Pot fi specificate:

Aplicatia asociata meniului implicit
se specifica aplicatia care trebuie rulata la utilizarea formei
Numele meniului initial
se specifica care trebuie afisat atunci cand forma curenta este executata. Main Menu este cel implicit
Grupul de securitate al meniului
se specifica privilegiile pe care SQL Menu trebuie sa le utilizeze pentru aplicatia respectiva. Prin aceasta se stabilesc optiunile pe care operatorul le poate vedea. Implicit se vor utiliza numele si parola utilizatorului.

Procedurile impachetate SQL Forms


Cand o forma apeleaza un meniu, ea are acces la tot pachetul de proceduri. SQL Forms permite utilizatorului sa controleze aplicatia meniu specificata din interior. Cele patru proceduri utilizate pentru controlul meniurilor sunt:
Procedura               Descrierea
---------               ----------
REPLACE_MENU            Inlocuieste meniul curent cu un meniu specificat.
                        Permite de asemeni utilizatorului sa schimbe modul
                        in care un meniu este afisat.

                        Sintaxa:

                          REPLACE_MENU ('aplicatia_asociata_meniului')
                          [ {BAR | FULL_SCREEN | PULL_DOWN},
                          { 'numele meniului', 'numele grupului'}]

SHOW_MENU               Afiseaza meniul curent daca nu este deja afisat. Nu
                        activeaza meniul. SQL Forms nu va permite meniului
                        sa obtureze o parte a paginii active decat daca
                        operatorul utilizeaza tasta [Menu].

                        Sintaxa:

                          SHOW_MENU;

HIDE_MENU               Sterge de pe ecran meniul curent.

                        Sintaxa:

                          HIDE_MENU;

SET_INPUT_FOCUS (MENU)  Meniul se va activa imediat ce SQL Forms este gata
                        sa preia date de la utilizator. Este echivalenta cu
                        apasarea tastei [MENU].

                        Sintaxa:

                          SET_INPUT_FOCUS (MENU);

Integrarea aplicatiilor


De cele mai multe ori, intr-o aplicatie integrata SQL Forms/SQL Menu, un meniu front-end ruleaza o forma; aceasta are propriul sau meniu care ruleaza o forma, care are la randul sau un meniu etc.

Exemplu:


Inlocuirea unui meniu intr-o forma apelata


Consideram cazul in care forma EMPS are un meniu, E_MENU. In mod implicit, cand o a doua forma (de ex. DEPT) este apelata din EMPS folosind CALL sau CALL_QUERY, meniul E_MENU ramane meniul curent. Sunt doua modalitati de a determina forma DEPT sa-si ruleze meniul:

Ce variabile/proceduri poate accesa un meniu


In figura de mai jos se prezinta ce variabile si proceduri se pot utiliza pentru cele doua utilizari ale aplicatiilor cu meniuri
Fig. 27.7: Meniurile pot accesa....

                                        Tipuri de meniuri
                                Front-End               Meniuri integrate
Variabile
        Globale                 da                      da
        Sistem                  da - toate NULL         da

Proceduri
        Forms                   nu                      da
        Menu                    da                      majoritatea

Proceduri PL/SQL
        Forms                   nu se aplica            doar printr-un
                                                        trigger denumit de
                                                        utilizator
        Menu                    da                      da


De exemplu, un meniu care se doreste utilizat sau ca front-end sau ca meniu integrat. Meniul trebuie sa poata verifica modul in care a fost folosit pentru a executa comanda corecta.
        if :system.form_ststus is null then
          os_command ('(type=4) runform EMPS');
        else call ('EMPS', no_hide, do_replace);
        end if;

Imbunatatirea meniului implicit SQL Forms


DEFAULTMENUAPP este de obicei folosita ca punct de plecare pentru o aplicatie cu meniuri integrate.

Pentru modificarea ei exista doua variante: fie se adauga noi optiuni peste meniul original, modificandu- structura, fie se pastreaza structura originala si se adauga noi meniuri. Avantajul celei de-a doua variante consta in faptul ca operatorii care s-au familiarizat cu forma initiala a meniului trebuie doar sa se familiarizeze cu noile adaugiri.

Exista totusi posibilitatea ca, datorita numarului mare de elemente adaugate, acestea sa nu poate fi afisate pe toata latimea ecranului, situatie care nu este de dorit.

Ambele metode prezinta avantaje. Utilizarea primeia duce la un ecran mai curat, fara a-l obliga pe operator sa caute printre optiuni pe mai multe ecrane. Dezavantajul este ca apar prea multe optiuni in interiorul fiecarui meniu.

A doua metoda, desi optiunile sunt afisate pe mai multe ecrane, este mai putin complexa si poate fi aprofundata mai usor de utilizatorii incepatori. Ca urmare, alegerea va apartine.

In exercitiile ce urmeza veti putea experimenta crearea de meniuri integrate si utilizarea lor cu forme. Folosirea Defaultmenuapp va va da posibilitatea sa construiti cu rapiditate meniul cerut.

Capitolul 27 - Exercitii


Meniuri integrate


  1. Copiind defaultmenuapp si redenumindu-l acolo unde este necesar, puteti modifica structura acestui meniu, pentru a utiliza stilul uneia dintre aplicatiile APP1 sau APP2.

  2. Introduceti urmatoarele optiuni din propria Dvs. aplicatie, construind structura meniului dupa cum urmeaza:


    O sugestie ar fi utilizarea functiei 'Copy Object' pentru a accelera lucrurile. Sunt aplicate aceleasi restrictii de acces ca mai sus.

  3. Gasiti toate optiunile meniului folosind procedurile SQL Menu care nu pot fi folosite in SQL Forms si inlocuiti-le cu procedurile corespunzatoare SQL Forms. De exemplu, inlocuiti procedura 'Exit_Menu' cu 'Exit_Form'.

  4. Salvati, generati si testati aplicatia Dvs. In timpul rularii unor parti ale aplicatiei, veti primi mesajul de eroare:

    MNU-10246: Error executing packaged procedure - inactive form.

    NU intrati in panica! Va merge in forma.

  5. Parasiti SQL Menu si intrati in SQL Forms. Incarcati forma ce contine comenzile si in fereastra de definire a formei.

  6. Schimbati meniul implicit la noul Dvs. meniu. Generati si rulati forma.

  7. Testati-va aplicatia meniu.

    Daca primiti eroarea

    'MNU-10241: Illegal operation when SQL Forms is active'

    inseamna ca mai este o procedura SQL Menu ramasa in meniu. Trebuie sa iesiti din editorul de forme si sa intrati din nou in editorul SQL Menu, sa schimbati aplicatia meniu, sa generati, apoi sa rulati inca o data forma pentru a testa meniul.

    Eroarea

    'MNU-10242: Cannot call linked in SQL Forms from SQL Forms'

    este generata de comenzi de tipul 4. Fie le schimbati si folositi proceduri ale formei (CALL, CALL QUERY, NEW FORM), fie folositi comenzi de tipul 2 cu comanda Runform.

    Daca aveti timp:

  8. Redefiniti aplicatia meniu initiala, schimband toate optiunile care executa o forma, pentru ca acesta sa poata fi utilizat dintr-o forma sau din sistemul de operare. (Indiciu: trebuie sa testati in ce stare se afla meniul, apoi sa executati comanda potrivita).

    Daca inca mai aveti timp:

  9. Folositi o procedura la nivel de forma pentru intrebarea precedenta. Apelati aceasta procedura din meniul corespunzator, transmitand numele formei ca parametru.