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
- Meniuri integrate
- Integrarea aplicatiilor
- Imbunatatirea meniurilor implicite ale SQL Forms
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:
- intreaga putere a procedurilor impachetate in SQL Forms se poate
pune la dispozitia meniului.
- o aplicatie construita in acest fel poate folosi un Trigger 'Key-Startup'
pentru a initializa mediul, in vederea rularii SQL Menu si SQL Forms.
- proiectantul SQL Forms poate utiliza meniuri (in locul tastelor
functionale) pentru a apela forme, pentru a genera rapoarte si pentru a
efectua alte operatii externe, toate protejate de sistemul de securitate al
SQL Menu.
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:
- comanda runmenu M_MENU executa meniul front-end;
- o comanda de tip 4 apeleaza forma EMPS din meniul front-end;
- din EMPS, prin meniul propriu (E_MENU), sunt apelate alte forme utilizand
apeluri CALL, CALL_QUERY, NEW_FORM, sau folosind comenzi de tipul 2 si 3;
folosirea comenzilor de tip 4 se soldeaza cu eroarea:
"MNU-10242: Cannot call linked in SQL Forms from SQL Forms"
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:
- din E_MENU se foloseste la apel argumentul do_replace. Acesta
inlocuieste E_MENU doar in timpul executiei lui DEPT:
call_query ('DEPT', no_hide, do_replace);
- avand forma DEPT activa, se foloseste REPLACE_MENU. Aceasta are ca
efect ramanerea activa a meniului D_MENU si dupa ce se paraseste
forma DEPT.
replace_menu ('DMENU');
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
- Copiind defaultmenuapp si redenumindu-l acolo unde este necesar, puteti
modifica structura acestui meniu, pentru a utiliza stilul uneia dintre
aplicatiile APP1 sau APP2.
- Introduceti urmatoarele optiuni din propria Dvs. aplicatie, construind
structura meniului dupa cum urmeaza:
- toate rapoartele
- toate celelalte forme
- toate utilitarele
O sugestie ar fi utilizarea functiei 'Copy Object' pentru a accelera
lucrurile. Sunt aplicate aceleasi restrictii de acces ca mai sus.
- 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'.
- 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.
- Parasiti SQL Menu si intrati in SQL Forms. Incarcati forma ce contine
comenzile si in fereastra de definire a formei.
- Schimbati meniul implicit la noul Dvs. meniu. Generati si rulati forma.
- 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:
- 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:
- Folositi o procedura la nivel de forma pentru intrebarea precedenta.
Apelati aceasta procedura din meniul corespunzator, transmitand numele
formei ca parametru.