Sunteți pe pagina 1din 6

Aplicatii profesionale in bazele de date orientate pe obiecte - Anul 1

Master
Laborator 5 (Oracle 9i Forms & Reports Developer)

I. Rapoarte

1. Să se creeze un raport tabelar, ce va conţine următoarele date:


- din tabelul EMPLOYEES_PNU : first_name, last_name, job_id, salary,
commission_pct
- din tabelul DEPARTMENTS_PNU: department_name
Se va utiliza Query Builder pentru construirea interogării corespunzătoare.
2. Utilizând Report Wizard în modul reentrant să se realizeze următoarele modificări:
- cererea va sorta datele în ordine descrescătoare după salariu
- adăugaţi un sumar care să indice valoarea totală a salariilor
- reduceţi dimensiunea câmpurilor SALARY şi TOTAL la 6
- modificaţi eticheta COMMISSION_PCT în Comm şi reduceţi dimensiunea la 4.
- Salvaţi raportul dându-i numele l3p2.rdf.
Obs: Testaţi raportul cât mai frecvent posibil !
3. Utilizând Report Wizard în modul reentrant, modificaţi raportul pentru a crea un raport
grupat (break).
- setaţi stilul raportului Group above
- titlul raportului va fi Angajati grupati pe departamente
- grupaţi raportul după numele departamentului
- Salvaţi noul raport cu numele l3p3.rdf.
4. Creaţi un nou raport urmând paşii de mai jos :
- utilizaţi Report Wizard
- selectaţi stilul Mailing Labels
- utilizând Query Builder, creaţi o cerere care să conţină următoarele date:
prenumele, numele, adresa, oraşul şi ţara în care lucrează fiecare salariat, titlul
job-ului acestuia şi data angajării.
- în zona de text, includeţi prenumele, numele, adresa, oraşul şi ţara, fiecare câmp
fiind plasat pe o linie nouă.
- daţi click pe Finish
- salvaţi raportul cu numele l3p4.rdf
5. - Utilizând wizard-ul în modul reentrant, să se modifice stilul raportului în Form Letter.
- în zona de text, formaţi propoziţiile: Dle/dna <first_name> <last_name>, ati fost
angajat la data <hire_date> in functia <job_title>. Va multumim pentru colaborare
si va oferim o marire de salariu de 30%
- adăugaţi şi textul: La Multi Ani !
- Selectaţi un template diferit şi daţi click pe Finish.
- Salvaţi raportul cu numele l3p5.rdf
6. - Creaţi un raport matricial, care va conţine numele departamentelor în stânga paginii,
codurile job-urilor în partea de sus a paginii, iar în fiecare celula se va găsi suma salariilor
angajaţilor corespunzători departamentului şi job-ului respectiv.
- afişaţi totalurile valorilor din cellule, pe linii şi pe coloane
- creaţi un sumar care afişează totalul salariilor din firmă.
- setaţi dimensiunea coloanei job_id la 6, iar cea a celor 4 totaluri la 7.
- modificaţi eticheta lui JOB_ID în Job.
- salvaţi raportul cu numele l3p6.rdf.
7. Modificaţi raportul matricial anterior astfel încât să se creeze un raport matricial cu
grupuri. Pentru aceasta, modificaţi cererea astfel încât să selecteze şi ţările
corespunzătoare, iar raportul va fi grupat pe ţări (la matrix group fields selectaţi câmpul
country). Salvaţi raportul ca l3p7.rdf.
8. Deschideţi raportul l3p2.rdf. Realizaţi modificările următoare în Live Previewer :
- coloanele SALARY şi Comm să fie aliniate la dreapta; de asemenea, header-ul
coloanei va fi aliniat corespunzător
- adăugaţi virgule şi un symbol monetary pentru SALARY; adăugaţi şi două
zecimale
- adăugaţi o zecimală şi un semn procentual lui Comm
- modificaţi header-ul coloanei Comm, în Comm Pct.
- Totalul de la sfârşitul raportului va fi aliniat la dreapta şi i se vor adăuga virgule, un
simbol monetar şi două zecimale
- Inseraţi data curentă în partea de sus a paginii, la mijloc
- Eticheta corespunzătoare totalului va avea font-ul bold
- Salvaţi raportul cu numele l3p8.rdf şi închideţi-l
- Invocaţi raportul într-un browser web
9. Deschideţi raportul l3p3.rdf. Realizaţi următoarele modificări în Live Previewer :
- eliminaţi chenarul din jurul totalului corespunzător fiecărui departament
- adăugaţi virgule şi două zecimale câmpului SALARY şi totalului şi aliniaţi aceste
valori la dreapta; aliniaţi corespunzător şi header-ul coloanei
- aceleaşi modificări vor fi realizate la sfârşitul raportului; mutaţi totalul general astfel
încât să fie aliniat cu câmpul SALARY
- modificaţi în roşu culoarea heading-ului corespunzător datelor angajatului
(culoarea de fundal a întreg capului de tabel)
- salvaţi raportul cu numele l3p9.rdf
10. Deschideţi raportul l3p6.rdf şi realizaţi următoarele modificări:
- aliniaţi la dreapta câmpul job_id
- eliminaţi chenarul din jurul celulelor de valori şi frame-ul părinte
- adăugaţi o linie de culoare gri frame-urilor părinte ale lui department_name şi
job_id
- salvaţi raportul cu numele l3p10.rdf
11. Deschideţi raportul l3p9.rdf şi puneţi în evidenţă câmpul SALARY în mod condiţional :
- dacă salariul este mi mic decât 3000, câmpul va fi tipărit cu caractere italice.
- Dacă salariul este mai mare decât 5000, câmpul va fi tiparit cu caractere bold italic,
iar culoarea textului va fi roşie.
- Salvaţi raportul cu numele l3p11.rdf
12. Pentru fiecare departament (department_name) şi, în cadrul acestuia, pentru fiecare
job (job_title), să se afişeze numele, prenumele, data angajării şi salariul angajaţilor
(raport master-detail).
- raportul va fi de tip Group Left
- Realizaţi grupările în două moduri : pe acelaşi nivel şi pe niveluri diferite. Care este
diferenţa ? Analizaţi modelul de date în fiecare dintre cele două cazuri.
- Salvaţi raportul cu numele l3p12.jsp.
13. Modificaţi raportul anterior astfel încât să se afişeze doar angajaţii având salariul mai
mare de 3500.
Obs: În Property Inspector avem posibilitatea introducerii unui filtru la nivel de grup, prin
selectarea proprietăţii Filter Type. Setând proprietatea acesteia la valoarea PL/SQL, vom
putea specifica o funcţie booleană pentru stabilirea filtrului.
Corpul acestei funcţii, în cazul nostru, va fi de forma următoare :
If :salary < 3500
Then return (false);
End if;
Return (true);
14. Să se modifice raportul anterior adăugând manual o nouă coloană care va reprezenta
vechimea în ani a angajatului respectiv.
Obs: În Data Model se dă click pe butonul Formula Column, iar apoi în gruparea căreia îi
va aparţine noua coloană (ultima grupare din model).
Acţionând butonul corespunzător proprietăţii PL/SQL Formula vom putea insera
codul PL/SQL ce se va executa la fiecare instanta a grupului caruia ii apartine campul
curent. Functia care va calcula valoarea dorită are corpul:
Return round((sysdate – hire_date)/365, 2);
Atenţie! Modificarea manuală a machetei raportului este o operaţie deosebit de dificila,
care trebuie efectuata cu multa atentie. Deplasarea elementului grafic ce desemneaza un
câmp în afara grupului caruia ii apartine respectivul câmp (în Object Navigator) duce la o
eroare fatala şi la imposibilitatea rularii raportului.

II. Meniuri. Legături între meniuri, forme şi rapoarte


• Meniurile sunt module care se creează în Forms Builder (sub nodul Menus din Object
Navigator).

Legături cu formele
• Pentru deschiderea unei forme, se utilizează built-in-ul CALL_FORM. De exemplu:
call_form('e:\work_dev\f_dep');
• Pentru activarea unei fome deschise deja, se utilizează built-in-ul GO_FORM.
• Pentru închiderea formei se utilizează built-in-ul deja cunoscut, EXIT_FORM.

Legături cu rapoartele
Pentru afişarea unui raport, se procedează în modul următor:
• La nodul Reports al formei, se adaugă rapoartele care vor fi utilizate în formă
(inclusive într-un meniu asociat acesteia). În cazul nostru, acestea sunt l3p12 şi l3p7.
Proprietăţile unui element adăugat în nodul Reports sunt următoarele:

• Codul PL/SQL asociat opţiunii din meniu sau trigger-ului WHEN-BUTTON-PRESSED


al unui buton care va determina afişarea raportului este de forma următoare:
DECLARE
repid REPORT_OBJECT;
v_rep VARCHAR2(100);
-- rep_status VARCHAR2(20);
BEGIN
repid := FIND_REPORT_OBJECT('l3p7'); -- se mentioneaza numele
--prin care raportul este
--referit in nodul Reports al formei
v_rep := RUN_REPORT_OBJECT(repid);
HOST('"C:\Program Files\Internet Explorer\iexplore"
d:\work_dev\l3p7.html'); --modificati calea corespunzator
END;

• Am pornit server-ul de rapoarte, dând la prompt-ul MS-DOS comanda:


rwserver server=rep_computer
De remarcat că acest server este referit şi în fereastra anterioară de proprietăţi.
Acesta este server-ul default, al cărui nume este alcătuit astfel: rep_<nume_calculator>.
Va apărea o fereastră care indică faptul că server-ul de rapoarte este pornit:

Exemplu: Dacă numele calculatorului, aşa cum apare el la My Computer ->click dreapta
-> Properties-> Computer name, este computer. atunci numele server-ului implicit de
rapoarte este rep_computer.
• Se compilează meniul (dacă există), apoi forma. Se execută forma si raportul se
deschide din meniu sau cu ajutorul unui buton din formă.

15. Să se creeze un meniu de forma următoare (atenţie şi la cerinţa exerciţiului 16!):


Forme Raportare Help
Angajati Departamente, job-uri Index
Departamente Tari, departamente About
Iesire
Acţiunile asociate opţiunilor acestui submenu sunt următoarele:
- Angajaţi: deschiderea formei F_EMP creată în laboratorul 1
- Departamente: deschiderea formei F_DEP creată în laboratorul 1
- Ieşire: închiderea formei
- Submeniurile meniului Raportare corespund afişării rapoartelor l3p12 şi l3p7.

16. Salvaţi modulul anterior cu numele menu_principal.mmb. Compilaţi (în urma compilării
se va obţine fişierul menu_principal.mmx).
Obs: Compilarea nu are loc cu succes până când toate nodurile terminale din meniu nu
au o acţiune asociată (cod PL/SQL). De aceea, vom introduce opţiunile meniului treptat,
pe măsură ce este posibilă scrierea codului PL/SQL corespunzător.
17. Să se creeze un nou modul de formă căruia i se va asocia meniul
menu_principal.mmx creat anterior.
Obs: Asocierea se face în fereastra de proprietăţi a formei, la nodul Functional.

S-ar putea să vă placă și