Sunteți pe pagina 1din 22

Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

ORACLE FORMS DEVELOPER

Oracle Forms Developer este o componenta a lui Oracle Developer Suite 10g şi
oferă un set de instrumente ce permit dezvoltatorilor să construiască aplicaţii rapid şi
uşor. Oferă un mediu de dezvoltare integrat ce utilizeaza limbajul SQL şi PL/SQL şi
Java.
Include urmatoarele componente: Form Builder, Form Compiler (citeşte definiţia
modulului şi creează un fişier executabil), Forms, fişierul executabil).
Oracle Forms Developer are 3 componente executabile:
 Form Builder - componenta care permite construirea de aplicaţii, proiectarea şi
stocarea definiţiilor formelor, meniurilor şi bibliotecilor.
 Form Compiler – componenta care permite compilarea aplicaţiilor create de
Form Builder.
 Form Runtime – componenta care permite lansează în execuţie, pe Web a
aplicatiei realizate si compilate cu Form Builder, respectiv Form Compiler.

FORMS BUILDER

Setările (Edit->Preferences) sesiunii de lucru curente:


 General: Build Before Running (determină dacă Form Builder compilează
automat modulul curent când se lansează în execuţie)
 Wizards (pentru a elimina caseta de dialog Welcome)
 Runtime (Array processing, determină dacă Form Builder procesează grupuri de
înregistrări la un moment dat, reducând traficul în reţea)

Componente principale
 Object Navigator
 Property Palette – propietăţile obiectelor pot fi vizualizate şi modificate
 Layout Editor - pentru crearea şi aranjarea elementelor videorfomatului
 PL/SQL Editor - trigeri, proceduri, funcţii, pachete, biblioteci PL/SQL
 Property Palette
 Object Library
 Menu Editor

Object Navigator - asigura o vizualizare ierarhica a obiectelor din toate modulele


deschise. La cel mai inalt nod Object Navigator include cele 4 tipuri de module Form,
Menus, Libraries, Object Libraries si Built-in Packages, Database Objects. Permite:
 Selectarea obiectelor
 Crearea si stergerea de obiecte
 Copierea si mutarea obiectelor in si intre module
 Localizarea rapida a obiectelor folosind Fast Search
In Object Navigator pot fi mai multe module din diferite aplicatii

Layout Editor - este un instrument grafic de proiectare si aranjare a interfetei utilizator.


In titlul ferestrei Layout Editor se pot citi informatii privind numele formei curente,
numele canvasului pe care-l editam si numele blocului. Cand se realizeaza un item in
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Layout Editor, Form Builder ataseaza item-ul automat blocului curent. Se poate schimba
blocul curent din lista cu blocuri disponibila in partea dreapta-sus.
Rigla orizontala si verticala poate fi afisata sau ascunsa folosind optiunile din meniu
View-Rules. Unitatea de masura poate fi schimbata cu ajutorul optiunilor din meniu
Format-Layout Options-Ruler.
In partea de jos se gaseste linia de stare care afiseaza informatii despre:
 Pozitia cursorului mouse-ului
 Lupa
 Dimensiunile obiectelor la crearea/mutarea lor cu mouse-ul
In Layout Editor se poate lucra cu un singur canvas in acelasi timp.

PL/SQL Editor - este un editor care permite introducerea si compilarea rutinelor


PL/SQL. Rutinele PL/SQL includ triggere, proceduri, functii, comezi asociate optiunilor
din meniu etc.
In partea de sus a editorului PL/SQL se definesc optiunile privind tipul si obiectul, iar
mai jos se numele procedurii, functiei sau pachetului.
In lista privind tipul se gasesc 3 optiuni:
 Program Unit
 Trigger
 Menu Item Code

Property Palette - este fereastra unde se seteaza proprietatile obiectelor create in


modulul Form si Menu. La selectarea unui obiect din Object Navigator fereastra Property
Palette se actualizeaza automat cu proprietatile obiectului selectat. Property Palette este
formata din 2 coloane, in coloana din stanga se gasesc numele/tipul proprietatilor grupate
pe categorii si in dreapta valorile proprietatilor. In coloana de valori pot aparea
urmatoarele optiuni:
 Camp text – in care se pot introduce text sau valori numerice.
 Lista – din care se pot alege optiunile afisate.
 Butonul MORE… - prin apasarea butonului se deschide o noua fereastra unde
trebuiesc introduse date suplimentare.

Object Library - este o fereastra asemanatoare cu Property Palette care poate fi utilizata
pentru crearea, stocarea, intretinerea si distribuirea obiectelor reutilizabile.
Avantajele principale in utilizarea bibliotecilor de obiecte:
 Bibliotecile de obiecte se deschid automat la pornirea programului Form Builder,
facand astfel obiectele imediat utilizabile.
 Se pot asocia mai multe biblioteci de obiecte unei aplicatii, astfel incat aplicatia sa
se inscrie in anumite standarde.
 Crearea rapida a aplicatiilor folosind obiecte predefinite prin tehnica drag-and
drop, sporind astfel productivitatea in dezvoltarea de aplicatii
Afisarea ferestrei Object Library se realizeaza folosind optiunile din meniu Tools-Object
Library.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Menu Editor - este un instrument grafic de proiectare, creare si aranjare a modulelor de


meniu. Intre Menu Editor, Object Navigator si Property Palette exista o sincronizare,
astfel orice modificare in Menu Editor se regaseste si in celelalte 2 ferestre.
Pentru crearea unei aplicatii nu este necesara definirea unui meniu. La rulare
se activeaza un meniu implicit (DEFAULT&SMARTBAR) care contine toate
comenzile de baza.
Dupa crearea unui meniu cu ajutorul instrumentului Menu Editor, meniul trebuie
atasat modulului Form, setand urmatorii parametrii din fereastra Property Palette pentru
modulul form unde se doreste atasarea:
 Menu Source
 Menu Module
 Initial Menu
 Menu Style
 Menu Role

Module in Forms Builder


Tipuri de module: O aplicaţie realizată cu Form Builder este împărţită în module. Un
modul este o colecţie de obiecte care asigură funcţionalitatea aplicaţiei.
Sunt 4 tipuri de module în Form Builder:
 Form – este o colecţie de obiecte si de rutine de cod care definesc interfaţa
aplicaţiei. Citeva dintre obiectele care se pot defini intr-un modul Form sunt:
ferestre, text item-uri, check box-uri, butoane, mesaje de avertizare, liste de
valori, triggere.
 Menu – este o colecţie de obiecte care ajută utilizatorul să opereze cu interfaţa
aplicaţiei; reprezinta o colectie de elemente de meniu (un meniu principal si un
numar de submeniuri)
 PL/SQL Libraries – este o colecţie de proceduri, functii si pachete (cod
PL/SQL) care pot fi apelate de alte module ale aplicaţiei.
 Object Libraries – este o colectie de obiecte care pot fi utilizate in dezvoltarea
aplicatiilor.

Definirea modulelor
Forms Builder suportă mai multe tipuri de formate pentru salvarea şi stocarea
modulelor. Există 2 opţiuni pentru salvarea modulelor:
1. In fişiere sistem: fişierele au extensia FMB. Ele pot fi deschise pentru modificări
ulterioare.
2. În baza de date: modulele sunt salvate în tabele speciale din baza de date.
Este responsabilitatea administratorului bazei de date de a identifica metoda de stocare
optimă pentru modulele aplicaţiei.
Modulele pot exista în 3 tipuri de formate:
 Binar - formatul binar poate fi utilizat pe mai multe platforme. Din acest format
se poate genera fişiere executabile pentru diferite sisteme de operare.
 Text - Formatul text este un format citibil. Acest format poate fi generat din
formatul binar folosind Form Builder; formatul text descrie obiectele şi codul
fiind utilizat pentru întocmirea documentaţiei aplicaţiei.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

 Executabil - Formatul executabil este folosit de utilizatori pentru a rula aplicaţia;


fişierele în format executabil sunt specifice platformei şi sunt generate din format
binar folosind componenta COMPILER.

În Form Builder, modulele sunt create şi salvate în format binar.


MODUL BINAR – extensie
Form FMB
Menu MMB
Library PLL

Formatul binar poate fi deschis pentru modificări ulterioare.

Module Binary (Design) Text Executable Runfile


Form .FMB .FMT .FMX
Menu .MMB .MMT .MMX
PL/SQL Library .PLL .PLD .PLX, .PLL
Object Library .OLB .OLT NA

Extensiile fisierelor salvate pe disc:


.FMB Form Module Binary
.FMT Form Module Text
.FMX Form Module Executable

.MMB Menu Module Binary


.MMT Menu Module Text
.MMX Menu Module Executable

.PLL PL/SQL Library Module Binary


.PLD PL/SQL Library Module Text
.PLX PL/SQL Library Module Executable

.OLB Object Library Module Binary


.OLT Object Library Module Text

 Developer generează fişiere text cu extensia ERR. Aceste fişiere conţin mesajele de
eroare care apar la compilare, fiind astfel utile la depanarea aplicaţiei.
 Aplicaţiile pot avea mai multe module, iar un modul poate avea mai multe obiecte.
 Numele unui modul poate sa contina maxim 30 caractere si trebuie sa inceapa cu o
litera. Poate contine orice combinatie de litere si caractere speciale ($,”,etc),
exceptand cuvinte rezervate Oracle si duplicate.

Operatii asupra modulelor

Crearea unui modul


1. In meniu cu optiunile File-New se alege tipul de modul dorit.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

2. In Object Navigator se selecteaza tipul de modul dorit si se apasa butonul CREATE


(+) sau NEW.

Deschiderea unui modul


1. In meniu cu optiunile File-Open... si din fereastra de dialog se alege fisierul dorit.
2. In Object Navigator se apasa butonul OPEN si apare fereastra de la punctul 1.

Inchiderea unui modul


1. In meniu cu optiunile File-Close.
2. In Object Navigator se apasa butonul DELETE. Inainte de a inchide un modul este
posibil sa apara fereastra de dialog Save

Salvarea unui modul


1. In meniu cu optiunile File-Save sau File-Save as...
2. In Object Navigator se apasa butonul SAVE.

Stergerea unui modul


A. Daca este stocat in baza de date, din meniu se folosesc optiunile File-Administration-
Delete.
B. Daca este salvat ca fisier sistem, se folosesc comenzile specifice sistemului de
operare

Redenumirea unui modul


A. Daca este stocat in baza de date, din meniu se folosesc optiunile File-Administration-
Rename.
B. Daca este salvat ca fisier sistem , se folosesc comenzile specifice sistemului de
operare.Exista atat un nume de fisier, cat si un nume intern care se vede in Object
Navigator.

Revenirea la ultima versiune salvata a modulului


Din meniu se folosesc optiunile File-Revert

Convertirea modulelor din formar binar in format text


Exista posibilitatatea de a converti modulele din formatele binare si text.
Din meniu se aleg optiunile File-Administration-Convert

Compilarea modulelor
Din meniu se folosesc optiunile File-Administration-CompileFile sau folosind optiunile
Program-Compile.
Exista posibilitatea de a compila automat inainte de a rula un program Tools-Preferences-
Build Before Running

Rularea unui modul din Form Builder


Din meniu se folosesc optiunile Program-RunForm.
Din Object Navigator se apasa butonul RUNFORM
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Se pot rula doar modulul Form, restul modulelor meniu si biblioteci nu pot fi rulate
separat ci numai legate de modulul Form. Form Builder incarca automat modulele meniu
si bibliotecile de care are forma nevoie atunci cand rulezi o forma.

Etape de realizare:
 Crearea unui modul “gol” –Object Navigator
 Creare blocurilor de date şi a elementelor componente –Data Block Wizard
 Modificarea modulului (Layout wizard sau Layout Editor)
 Setarea propietăţilor (Property palette)
 Ataşarea codului (PL/SQL editor)
 Testarea modulului (Forms Runtime)

Componentele unui modul de videoformat


 Blocul (un modul de videoformat conţine unul sau mai multe blocuri). Un bloc
este propietarul “logic” al elementelor componente ale modulului de videoformat.
Fiecare element (de exemplu un buton) aparţine unui bloc. Elementele dintr-un
bloc sunt corelate logic (de exemplu pot corespunde coloanelor unei tabele din
baza de date). Blocul oferă un mecanism pentru gruparea elementelor corelate
într-o unitate funcţională. Blocurile sunt de două feluri: bloc de date (asociat unei
tabele, unei proceduri stocate, etc), bloc de control (contine obiecte de interfata).
Intre blocuri se pot stabili relaţii de tip 1:m (master-detail).
 Elemente (item) ce sunt grupate logic în blocuri şi aranjate vizual în canvas-uri.
Fiecare item are o poziţie în bloc, fiecare bloc are o anumită poziţie în
videoformat. Când utilizatorul se mută la următorul element din bloc, care este
situat în alt canvas, Oracle Forms afişează automat acel canvas.
 Canvas-ul este suprafaţa unde obiectele sunt aranjate. Un modul de videoformat
poate avea mai multe canvas-uri. Un canvas poate afişa elementele din mai multe
blocuri logice. Canvas-ul se afişeaza într-o fereastră. Implicit toate canvas-urile se
afişează în aceeaşi fereastră. Forms Developer permite crearea a patru tipuri de
canvas care pot fi afişate în aceeaşi fereastră la momentul execuţiei: Content,
Stacked, Tab, Toolbar. Când se creează un canvas se specifică tipul lui prin
setarea propietăţii Canvas Type.
Canvas de tip content (tipul implicit) ocupă toată zona de afişare a ferestrei la
care este ataşat. Se defineşte cel puţin un canvas de tip content pentru fiecare
fereastră creată (se defineşte implicit un astfel de canvas dacă se utilizează
DataBlock Wizard)
Canvas de tip stacked este afişat în faţa unui canvas de tip content. Canvasul de
tip stacked acoperă o parte din canvasul de tip content şi adesea este afişat sau
ascuns în mod programat. Se pot afişa mai multe canvas-uri de tip stacked într-o
fereastră la un moment dat (de exemplu, se utilizează pentru a afişa informaţii
suplimentare de tip Help).
Un canvas de tip tab este format din mai multe tab-uri (tab pages) şi permite
gruparea şi afişarea unui volum mare de informaţii corelate într-un singur canvas ,
în mod dinamic. Acest tip de canvas se afişează în faţa unui canvas de tip content.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Canvas de tip Toolbar este utilizat pentru a crea un toolbar ataşat unei ferestre.
Poate fi de tip vertical sau orizontal. Toolbar-ul de tip orizontal se afişează la
începutul ferestrei, sub bara de meniu.
 Frame (un obiect grafic ce apare într-un canvas)
 Trigeri de aplicaţie (de exemplu triggerul WHEN_BUTTON_PRESSED)
 Proceduri, funcţii şi pachete
 Alte obiecte (alerte, parametri)

Elementele de tip item ale unui videoformat:


 Eticheta (prompt)
 Element de tip text (text item)
 Buton (push button)
 Element de tip imagine (image item)
 Element de afişare (display item)
 Element derivat (calculated field)
 Buton radio (radio group)
 Caseta de validare (check box)
 Element de tip listă (list item)
 Element de tip arbore ierarhic (hierarchical Tree)
 BeanArea etc

Exemplu: Realizarea unui videoformat cu ajutorul wizard-ului

Moduri de operare ale videoformatului la executie:


Enter Query Mode ( numai pentru a vizualiza datele)
 Permite cereri
o nerestrictive – returneaza toate inregistrarile in ordinea in care apar in data
block
o restrictive – returneaza inregistrarile care satisfac conditiile precizate prin
valori introduse in text items sau cu ajutorul instrumentului Query/Where
Utilizarea criteriilor
Item Exemplu
Like 20% sau P%
Between #between 200 and 206
apelul Query/where :nume_variabila sau :
de exemplu:
:s=120 or :c like ‘P%’
order by :f

Variabilele nu trebuie
declarate, se utilizeaza doar
la nivelul runtime

 Nu permite operaţii de actualizare, ieşire din sesiunea curentă, navigarea în afara


blocului de date curent
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Normal Mode permite:


 Operaţii de actualizare: insert/update/delete
 Cereri nerestrictive
 Operaţii de salvare (commit), rollback, navigarea în afara blocului curent, ieşirea
din sesiunea de lucru
 Nu permite cereri restrictive (apelarea casetei de dialog Query/Where)

Afişarea erorilor in cadrul formularului: Help->Display Error


Va afisa acele erori specifice Oracle server (ORA-cod eroare).

Blocurile
Blocul reprezinta un container care grupeaza obiecte, cum ar fi butoane, liste etc.
Blocurile nu au o reprezentare fizica, ele fiind regasite mai mult la nivelul logic al unei
aplicatii. Doar elementele grupate intr-un bloc sunt vizibile la nivelul interfetei utilizator.
Blocurile pot fi grupate in 2 tipuri:
 Data Block – blocuri care sunt asociate cu o tabela dintr-o baza de date. Blocurile
pot fi single-record adica afiseaza un singur tuplu la un moment dat sau multi-
record care permit vizualizarea mai multor tupluri deodata.
 Control Block – blocuri care nu sunt asociate cu date, ele fiind concepute ca
elemente de control.
Un frame este o cale predefinita de aranjare a cimpurilor unui bloc care stabileste
marginile blocului, distanta dintre item-uri si textul asociat fiecaruia.
Sursele de date pentru Data Block:
Tabelele si view-urile sunt cele mai folosite ca sursa de date pentru blocurile de date.
Daca nu exista cerinte speciale, tabela ramane cea mai buna alegere ca sursa de date.
Cand se creaza un bloc bazat pe tabela Forms Builder genereaza automat la nivel de
forma:
 Rutine SQL care permit inserari, modificari, stergeri si interogari.
 Rutine care preiau constrangerile tabelei.
 Creaza elemente de interfatacare corespund cu coloanele tabelei.
Un block poate fi asociat doar unei singure tabele.
Procedurile stocate returneaza date pentru blocurile de date prin utilizarea uneia din cele
2 tipuri:
 reference cursor – se creaza un cursor care se deschide si este populat cu date
in urma unei instructiuni SELECT. Acesta varianta permite doar interogari si
nu permite folosirea de intructiuni DML.
 table of records – este o structura PL/SQL care se aseamana cu o matrice de
inregistrari. Este o metoda extrem de eficienta pentru a salva traficul de retea

 Cand se doreste afisarea mai multor inregistrari pe ecran se seteaza proprietatea


Number of Records Displayed=numarul de inregistrari
 Scrollbar este separata de elementele din bloc si poate fi plasata oriunde pe ecran.
Poate fi mutata, redimensionata si setate diferite culori.
 Pentru a sterge un scrollbar i se seteaza proprietatea Set Scroll Bar pe No.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Crearea unui bloc


1. Data Block
A. Din meniu cu optiunile Tools-DataBlockWizard.
B. Apasand pe butonul CREATE (+). Se poate alege optiunea DataBlockWizard sau
Build a New Data Block Manually. In cazul al doilea se seteaza proprietatile
Query Data Source Type si DML Data Target Type
2. Control Block
Apasand pe butonul CREATE (+).
Se alege optiunea Build a New Data Block Manually.

Reentrant wizards – Se poate re-apela wizard-ul pt modificarea obiectelor de tip data


block, frame, layout.

WINDOWS SI CANVAS
La construirea unei forme se utilizeaza ferestrele (windows) si suprafetele (canvases)
pentru a prezenta elementele vizuale ale formei. O singura forma poate avea mai multe
ferestre si canvases-uri.
Relatia dintre windows si canvases
Pentru fiecare fereastra creata trebuie creata una sau mai multe suprafate, deci fiecare
suprafata trebuie sa aibe o fereastra. Definirea unei relatii dintre elemente, suprafete si
ferestre se reduce la setarea unor proprietati.
Window – este asemanatoare cu rama unui tablou. Ea poate fi mutata sau modificata.
Cand se creaza o noua forma automat Form Builder creeaza o fereastra implicita numita
WINDOW1. Se pot adauga noi ferestre, iar fereastra implicita se poate sterge sau
redenumi.
O singura forma poate avea mai multe ferestre.
In Form Builder se pot crea urmatoarele tipuri de ferestre:
 modal window – este o fereastra la care utilizatorul trebuie sa raspunda pentru a trece
la alta fereastra. Forteaza utilizatorul sa lucreze in interiorul unei singure ferestre cind
fie accepta sau nu modificarile care au fost facute. Bara de instrumente si meniul nu
sunt accesibile. O fereastra modala este folosita cind utilizatorul trebuie sa termine un
proces anume inainte de a continua.
 modless window – este o fereastra nerestrictiva, din care utilizatorul poate iesi
oricand. Permite utilizatorului sa interactioneze cu orice alta fereastra precum si cu
bara de instrumente si cu meniul principal. Ferestrele modeless sunt folosite in
principal in interfetele grafice unde utilizatorul este liber sa aleaga unul dintre
procesele existente
 Container (MDI) –contine toate celelalte ferestre. De obicei, dar nu intotdeauna
contine bara de instrumente si meniul principal.
O fereastra contine urmatoarele elemente:
 Titlul ferestrei
 Bara de meniu si submeniuri
 Butoane si alte controale care nu corespund datelor
 Item-urile corespunzatoare datelor din baza de date
 Linia de mesaje si linia de stare
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Cand se creeaza o fereastra trebuie specificata stilul ei. In Form Builder exista 2 stiluri
pentru ferestre:
 Document windows – afiseaza in mod obisnuit principalele suprafete si arii de lucru
ale aplicatiilor.
 Dialog windows – sunt ferestra de dialog, cer interventia utilizatorului.
Pasi pentru crearea unei ferestre noi:
1. Se selecteaza nodul Window din Object Navigator.
2. Se apasa butonul CREATE (+).
3. Se seteaza proprietatile din Property Palette.
Canvas – este asemanatoare cu suprafata pe care se picteaza. Pe aceasta suprafata se
aseaza obiectele cand se realizeaza interfata aplicatiei. Implicit canvas-urile pe care le
creezi sunt asignate ferestrei cu numele WINDOW1. Pentru a schimba fereastra se
seteaza proprietatea WINDOW din Property Palette.
Canvas-view – este suprafata pe care se pot aseza obiectele.
In Form Builder se pot defini mai multe tipuri de canvas-uri. Exista 4 tipuri:
 content –ocupa intreaga suprafata a ferestrei in care este afisat. Fiecare fereastra
contine cel putin un content canvas.
 Stacked-este afisat deasupra sau in cadrul canvas-ului content corespunzator ferestrei
curente.
 tab –un set de tab-uri care permit gruparea si afisarea unui numar mare de informatii
inrudite pe un singur canvas dinamic
 toolbar-este folosit pentru a crea bare de instrumente pentru ferestre individuale.
Fiecare fereastra poate afisa unul sau mmai multe canvas-uri. De asemenea se poate afisa
conditionat un canvas intr-o fereastra, in functie de anumite conditii care sunt indeplinite.

Crearea unui modul de videoformat master-detail


 Crearea cu ajutorul Wizard-ului->Data block wizard
 Crearea unei relaţii între blocuri manual -> click pe master block->Relation-
>Create
Propietăţile unei relaţii:
 Master deletes (non-isolated-previne ştergerea înregistrării master dacă există
înregistrare detail; cascading-sterge si inregistrarile din Detail, isolated-şterge
numai înregistrarea master)
 Join condition
 Coordination property (se poate controla cum sunt afişate înregistrările detail
când blocul master este interogat): default-forţează coordonarea blocurilor dacă
înregistrarea master este modificată; deferred with auto query; deferred without
auto query-permite să introduci criterii de interogare suplimentare în blocul detail
inaintea interogării; prevent masterless operations-blocul detail nu poate fi
interogat sau utilizat pentru a insera înregistrări daca înregistrarea master nu este
afişată.

Obiecte (ITEMS) de interfata


Form Builder permite utilizarea mai multor tipuri de item-uri pentru realizarea interfetei
aplicatiei.
 button
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

 chart item
 check box
 display item
 image item
 list item
 radio group
 sound item
 text item
 OLE container
 ActiveX control
Item-urile pot fi grupate in 2 categorii:
1. Input item - accepta introducerea datelor
 text item
 check box
 list item
 radio group
 OLE container
 ActiveX control
2. Non-input item – nu accepta introducerea datelor
 button
 display item
 image item
 sound item
 chart item

TEXT ITEM
Text Item este un obiect vizual cu ajutorul caruia utilizatorul poate interoga, insera, sterge
date. In mod normal, text item corespunde unei coloane unui tabel din baza de date.
Fiecare item din forma trebuie sa se afle in cadrul unui bloc.
Sunt 2 cai principale pentru a crea un text item:
 folosind Layout Editor
1. Se selecteaza butonul TEXT ITEM.
2. Se pozitioneaza cursorul mouse-ului in locul unde se doreste item-ul.
3. Cu un singur click text item-ul apare pe canvas .
4. Se apeleaza fereastra de proprietati.
 folosind Object Navigator
1. Se selecteaza un item din cadrul blocului unde dorim sa creem butonul.
2. Se apasa tasta CREATE (+).

CHECK BOX
Check box este un obiect grafic care permite alegerea unei stari din 2 posibile (ex.
ON/OFF sau A/F). Check Box poate stoca valori de tip char, number si date. Cand se
defineste un check box se poate specifica valorile pentru fiecare stare, setand proprietatile
din Property Palette (Value when Checked, Value when Unchecked).
Sunt 2 cai principale pentru a crea un Check Box:
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

 folosind Layout Editor


1. Se selecteaza butonul CHECK BOX.
2. Se pozitioneaza cursorul mouse-ului in locul unde se doreste sa apara.
3. Cu un singur click check box apare pe canvas .
4. Se apeleaza fereastra de proprietati.

 folosind Object Navigator


1. Se selecteaza un item din cadrul blocului unde dorim sa creem item-ul.
2. Se apasa tasta CREATE (+).
3. Din Property Palette se modifica Item Type in Check box.

RADIO GROUPS
Radio Group este un set de butoane radio. Fiecare buton reprezinta o alta valoare. Intr-un
grup pot exista 2 sau mai multe valori statice. Este o alternativa la List Item cu 2 – 3
optiuni.
Sunt 2 posibilitati pentru a crea un Radio Group:
 folosind Layout Editor
1. Se selecteaza butonul RADIO GROUP.
2. Se pozitioneaza cursorul mouse-ului in locul unde se doreste sa apara.
3. Cu un singur click butonul radio apare pe canvas .
4. Daca este primul buton radio pe canvas se creaza automat grupul.
5. La crearea urmatoarelor butoane va apare suplimentar intrebarea daca butonul
respectiv intra sau nu intr-un grup existent de butoane radio.
6. Se apeleaza fereastra de proprietati.

 folosind Object Navigator


1. Se selecteaza un item din cadrul blocului unde dorim sa creem butonul.
2. Se apasa tasta CREATE (+).
3. Din Property Palette se modifica Item Type in Radio Group.
4. Odata creat grupul trebuie create in continuare si butoanele radio prin
pozitionarea pe Radio Buttons si apasarea butonului CREATE (+) sau dublu click
pe Radio Buttons.

LIST ITEM
List Item este un obiect grafic care afiseaza un set de optiuni, iar la fiecare optiune ii se
poate atasa o valoarea specifica. Se utilizeaza un List item cand se doreste selectarea unei
singure optiuni din mai multe posibile. Fiecare optiune din List Item poate contine pana
la 30 de caractere. Este o alternativa la folosirea butoanelor radio, permitand
economisirea spatiului pe canvas. Exista 3 stiluri:
 Pop List – afiseaza optiunea cu un buton in partea dreapta; prin selectarea butonului
apare o lista derulanta; nu accepta adaugare de noi elemente la rulare
 T-List – afiseaza optiunile avand atasat in partea dreapta un scroll bar
 Combo Box – afiseaza optiunile avand in partea dreapta un buton, dar care nu este
atasat de optiuni (ca la Pop List); accepta adaugarea de noi optiuni la rulare
Sunt 2 alternative pentru a crea un List Item:
 folosind Layout Editor
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

1. Se selecteaza butonul LIST ITEM.


2. Se pozitioneaza cursorul mouse-ului in locul unde se doreste sa apara.
3. Cu un singur click list item-ul apare pe canvas.
4. Se apeleaza fereastra de proprietati.

 folosind Object Navigator


1. Se selecteaza un item din cadrul blocului unde dorim sa creem item-ul.
2. Se apasa tasta CREATE (+).
3. Din Property Palette se modifica Item Type in List Item.
4. Din Property Palette (List Style) se selecteaza optiunea dorita (Pop List, T-list,
Combo Box).
Din Property Palette (Elements in list) se introduc elementele si valorile asociate lor.

BUTTON
Form Builder permite existenta a 2 tipuri de butoane:
 buton text – are afisat pe buton o eticheta text.
 buton iconic – are afisat o imagine pe buton.
Butonul icon poate fi afisat numai in mod grafic.
Butonul text poate fi afisat atat in mod grafic cat si in mod text. In mod grafic apare ca
un dreptunghi cu textul in mijloc, iar in mod caracter apare textul intre paranteze.
Sunt 2 cai principale pentru a crea un buton:
folosind Layout Editor
 Se selecteaza butonul BUTTON.
 Se pozitioneaza cursorul mouse-ului in locul unde se doreste butonul.
 Cu un singur click butonul apare pe canvas.
 Se apeleaza fereastra de proprietati.
folosind Object Navigator
 Se selecteaza un item din cadrul blocului unde dorim sa creem butonul.
 Se apasa tasta CREATE (+).
 Din Property Palette se modifica Item Type in Push Button.

DISPLAY ITEM
Display Item este asemanator cu text item, exceptand faptul ca este read-only, avand
numai rolul de afisare. El nu poate fi editat, interogat, fiind folosit doar la afisarea unor
valori, atat referitoare la baza de date cat si valori calculate.
Sunt 2 cai principale pentru a crea un Display Item:
folosind Layout Editor
 Se selecteaza butonul DISPLAY ITEM.
 Se pozitioneaza cursorul mouse-ului in locul unde se doreste sa apara.
 Cu un singur click display item-ul apare pe canvas .
 Se apeleaza fereastra de proprietati.

folosind Object Navigator


 Se selecteaza un item din cadrul blocului unde dorim sa creem item-ul.
 Se apasa tasta CREATE (+).
 Din Property Palette se modifica Item Type in Display Item.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

IMAGE ITEM
Image item este un obiect vizual care permite afisarea imaginilor scanate sau vectoriale.
Ca si text item poate stoca si afisa varchar2, number sau date ca valori si in plus imagini.
Afisarea imaginilor se poate face atat din baza de date, cat si din fisiere externe bazei.
Cand salvezi imagini in baza de date Oracle foloseste un mecanism propriu de compresie.

Image Item
Format
BMP Read/Write
JFIF Read/Write
PCX Read Only
PICT 1&2 Read/Write
GIF Read/Write
CALS Read/Write
PCD Read Only
RAS Read/Write
TIFF 4,5&6 Read/Write
Sunt 2 cai principale pentru a crea un Image Item:
 folosind Layout Editor
1. Se selecteaza butonul IMAGE ITEM.
2. Se pozitioneaza cursorul mouse-ului in locul unde se doreste sa apara item-ul.
3. Cu un singur click image item-ul apare pe canvas.
4. Se apeleaza fereastra de proprietati.
 folosind Object Navigator
1. Se selecteaza un item din cadrul blocului unde dorim sa creem item-ul.
2. Se apasa tasta CREATE (+).
3. Din Property Palette se modifica Item Type in Image Item.

LOV(List Of Value)
LOV-urile sunt obiecte ale modulului Form. Ele sunt definite la nivelul formei, aceasta
insemnand ca pot fi folosite de orice text item din orice bloc. LOV este un obiect vizual
care permite utilizatorilor de a vedea, selecta si de a se deplasa printre inregistrarile
stocate curent intr-un record group.
LOV asigura urmatoarele functionalitati:
 Poate fi afisata la cererea utilizatorului, cand acesta se deplaseaza la un text item care
are asociat un LOV.
 Contine facilitati de cautare in functie de valori specifice.
 Poate fi atasata la unul sau mai multe text item.
 Valorile unui LOV sunt derivate dintr-un grup de inregistrari.
La nivelul runtime FormBuilder afiseaza eticheta <LIST> in linia de stare, cand este
disponibila o lista de valori. Utilizatorul nu poate lucra intr-o alta fereastra cand lista de
valori este afisata. Lista de valori poate fi mutata sau redimensionata.
Listele de valori preiau datele dintr-o structura de date interna numita record group.
Primul pas in crearea unui LOV este de a defini un record group.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

RECORD GROUP poate avea un numar nelimitat de coloane de tipul char, long, number
sau date daca se incadreaza in 64K.
Un record group este o structura de linii si coloane stocata in memoria Forms si este
asemanatoare cu structura unei tabele. Record group-ul tine in memorie inregistrarile care
pot fi refolosite si de alte aplicati, reducand astfel accesul repetat la datele externe.
Record group poate asigura date pentru:
 Liste de valori (LOV)
 List item
 crearea rapoartelor si graficelor
 alte aplicatii
Cand se creaza o lista de valori trebuie specificate coloanele care se gasesc in record
group si se doresc afisate in LOV. Coloanele din record group sunt intotdeauna afisate in
fereastra LOV in ordinea in care se gasesc in record group.
Valorile din record group pot fi statice sau dinamice, in functie de sursa de date:
valorile statice nu se modifica in timpul rularii aplicatiei , valorile dinamice care sunt
bazate pe o declaratie SELECT si se pot modifica in timpul rularii aplicatiei.

Etapele definiiri unui LOV:


1. Se creeaza un record group sau se alege unul deja existent.
2. Se creeaza si se seteaza proprietatile LOV-ului.
3. Se ataseaza LOV-ul cu un text item.

Triggeri de aplicatie
Un trigger de aplicatie este un program care se executa atunci cand apare un eveniment.
Fiecare trigger la definirea lui are asociat un eveniment specific. Form Builder defineste o
mare varietate de evenimente carora se pot atasa triggere, ca de exemplu:
 Evenimente raportate la interogari
 Evenimente legate de introducerea datelor si/sau validarea lor
 Navigarea mouse-ului
 Evenimente legate de interactiuni cu obiectele din forma
 Evenimente interne ale functionalitatii aplicatiei
 Evenimente legate de aparitia erorilor si mesajelor de eroare si tratarea lor
Triggerele in Form Builder sunt scrise in PL/SQL.
Trebuie avute in vedere urmatoarele aspecte atunci cand se proiecteaza un trigger:
 Tipul trigger-ului – defineste evenimentul specific care cauzeaza aparitia trigger-ului
 Codul trigger-ului – blocurile PL/SQL care definesc operatiile pe care le executa
trigger-ul
 Scopul trigger-ului – nivelul la care se defineste trigger-ul
Tipul de trigger este determinat de evenimente. Form Builder pune la dispozitie peste
100 de triggere, fiecare fiind identificate prin nume specifice. Astfel in functie de numele
trigger-ului se poate deduce tipul de trigger. Numele unui trigger poate contine mai multe
cuvinte separate prin semnul ‘-‘.
Trigger Prefix Descriere
PRE- Triggerul se executa inainte de producerea unui anumit eveniment
POST- Triggerul se executa dupa producerea unui anumit eveniment
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

WHEN- Triggerul se executa cand se produce un anumit eveniment


ON- In loc de tratarea standard
KEY- Triggerul se executa la apasarea unei taste

Codul trigger-ului – este reprezentat de rutinele PL/SQL care definesc actiunea.


Scopul triggerului
Scopul trigger-ului este determinata de pozitia obiectelor in ierarhia modulului. Sunt 3
nivele posibile:
 Nivelul Form
 Nivelul Block
 Nivelul Item

Functii si triggeri de aplicatie utilizati in Forms Builder

 Funcţia MESSAGE() afişează textul specificat pe linia de mesaje.


Exemplu:
message ('Angajatul exista');

 Funcţia SET_WINDOW_PROPERTY () setează propietăţile unei ferestre.

SET_WINDOW_PROPERTY
(window_name VARCHAR2,
property NUMBER,
value VARCHAR2);

 Funcţia SET_ITEM_PROPERTY() modifică toate instanţele unui element dintr-un


bloc prin modificarea unei propietăţi a elementului respectiv.

SET_ITEM_PROPERTY
(item_name VARCHAR2,
property NUMBER,
value VARCHAR2);

Propietatea LABEL specifică un şir de caractere (varchar2) care se va afişa ca etichetă a


elementului. Această propietate este valabilă numai pentru elemente care au etichete
ataşate (de exemplu butoanele).
 FORM_FAILURE returnează o valoare ce indică rezultatul celei mai recente acţiuni
executate în timpul sesiunii curente Runform. Rezultatul poate fi: success (valoarea
returnată False), failure (valoarea returnată True), fatal error (valoarea returnată False).
Dacă nici o acţiune nu este executată în sesiunea curentă Runform, FORM_FAILURE
returnează FALSE.

 Triggerul On-error se declanşează atunci când Form Developer afişează un mesaj de


eroare (înlocuieşte scrierea mesajului de eroare) şi înlocuieşte mesajul de eroare standard
cu un alt mesaj. Se poate defini la nivel de: modul de videoformat, bloc, item.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

 Trigger-ul PRE-INSERT se declanşează în timpul procesului de terminare completă


a unei tranzacţii (commit), înainte ca un rând să fie adăugat în baza de date. Se
declanşează
pentru fiecare tuplu marcat pentru inserare (înainte ca rândul să fie inserat în baza de
date). Se defineşte la nivel de modul de videoformat sau bloc. Se utilizează adesea cu
secvenţe (pentru a nu pierde valorile dintr-o secvenţă)

 Triggerul PRE-QUERY se declanşează în timpul lui EXECUTE QUERY, dar înainte


ca Forms Developer să construiască comanda SELECT utilizată pentru cerere. Se
defineşte la nivel de bloc sau modul de form.

Exemplu:
SET_ITEM_PROPERTY('EMPLOYEE_ID', VISIBLE, PROPERTY_TRUE);
SET_ITEM_PROPERTY('EMPLOYEE_ID', ENABLED, PROPERTY_TRUE);
:employees.employee_id:=:global.employee_id;

Triggerul WHEN-CREATE-RECORD se declanşează când Forms Developer


creează o nouă înregistrare (de exemplu când utilizatorul apasă tasta Insert sau la
CREATE_RECORD). Se defineşte la nivel de bloc şi de modul de form. Se utilizează
pentru a executa o acţiune ori de câte ori Forms Developer încearcă sa creeze o nouă
înregistrare. Este folosit pentru a calcula valori complexe la runtime

Exemplu:
SET_ITEM_PROPERTY('EMPLOYEE_ID', VISIBLE, PROPERTY_FALSE);

Triggerul WHEN-VALIDATE-ITEM se declanşează în procesul de validare a unui


item cu starea New sau Changed. Se defineşte la nivel de modul de form, bloc sau item.
Se utilizează pentru a realiza o validare suplimentară. Se declanşează ca parte a validării
iniţiale de navigare, navigarea eşuează şi focusul rămâne pe item-ul original.

Procedura READ_IMAGE_FILE citeşte o imagine dintr-un fişier şi o afişează într-un


item de tip imagine

PROCEDURE READ_IMAGE_FILE
(file_name VARCHAR2,
file_type VARCHAR2,
item_name varchar2);

Tipuri de fişiere: BMP, CALS, GIF, JFIF, JPG, PICT, RAS, TIFF, or TPIC.

Exemplu:
read_image_file('c:\poze\poza.jpg', ‘jpg', 'imagine');
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

Triggerul WHEN-IMAGE-PRESSED se declanşează când utilizatorul utilizează


mouse-ul (un click sau un dublu click pe item-ul imagine). Se defineşte la nivel de modul
de form, bloc şi item. Când eşuează, nu are nici un efect.
Exemplu:
DECLARE
tiff_image_dir VARCHAR2(80) := 'e:\imagini\';
fotografie VARCHAR2(80);
BEGIN
fotografie := tiff_image_dir||to_char(:persoane.codp)||'.tiff';
message (fotografie);
READ_IMAGE_FILE(fotografie, 'TIFF', 'imagine');
IF NOT FORM_SUCCESS THEN
MESSAGE('nu avem imagine');
END IF;
end;

 Triggerul WHEN-NEW-FORM-INSTANCE se declanşează la lansarea în execuţie


a modului de videoformat. La lansarea în execuţie, Form Developer navighează pe primul
element din primul bloc de date al modulului de videoformat. Acest trigger se
declanşează după executarea cu succes a trigerilor de navigaţie ce se declanşează în
timpul secvenţei iniţiale de navigare. Intr-o aplicaţie cu mai multe module de
videoformat, acest trigger nu se declanşează atunci când focusul de schimbă de la un
modul la altul. Nivelul de definire: modulul de videoformat. La eşuare nu are nici un
efect. Coordonate unei forme nu se pot schimba în acest trigger (se declanşează mai
târziu) ci în triggerul PRE-FORM

Exemplu:
execute_query;

Exemplu:
SET_WINDOW_PROPERTY
(FORMS_MDI_WINDOW,
TITLE, 'Fereastra principala');

 Triggerul WHEN-BUTTON-PRESSED se declanşează când operatorul selectează


un buton cu mouse-ul sau utilizează tastatura. Nivelul de definire: modul de videoformat,
bloc şi element din bloc.
Exemplu: butonul Cerere
IF :SYSTEM.MODE='NORMAL' THEN
set_item_property('control.cerere' ,LABEL, 'Lanseaza cererea');
ENTER_QUERY;
ELSE
set_item_property('control.cerere',label, 'Executa cererea');
EXECUTE_QUERY;
END IF;
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

 Procedura NEXT_RECORD permite navigarea la primul element (dacă se permite)


din următoarea înregistrare (permite navigarea de la o înregistrare la alta). Nu se
utilizează în modul Enter Query

 Variabila de sistem SYSTEM.LAST_RECORD indică dacă înregistrarea curentă


este ultima înregistrare din bloc. Valoarea TRUE indică că înregistrarea curentă este
ultima înregistrare din bloc.

Butonul Inainte:
IF :SYSTEM.LAST_RECORD='TRUE' THEN
MESSAGE('ULTIMA INREGISTRARE');
ELSE
NEXT_RECORD;
END IF;

Procedura PREVIOUS_RECORD permite navigarea la primul element din


înregistrarea anterioară . Nu se utilizează în modul Enter Query.

 Variabila de sistem SYSTEM.CURSOR_RECORD indică numărul (ordinea fizică


în bloc) înregistrării curente. Valoarea este întotdeauna un şir de caractere.

Butonul Inapoi
IF :SYSTEM.CURSOR_RECORD='1' THEN
MESSAGE('PRIMA INREGISTRARE');
ELSE
PREVIOUS_RECORD;
END IF;

 Procedura FIRST_RECORD permite navigarea la prima înregistrare din bloc. Nu se


utilizează în modul Enter Query.

Butonul Prima
if :system.CURSOR_RECORD='1'THEN
message('PRIMA INREGISTRARE');
ELSE
first_record;
END IF;

 Procedura LAST_RECORD permite navigarea la ultima înregistrare din blocul


curent. Nu se utilizează în modul Enter Query.

Butonul Ultima
if :system.LAST_RECORD='TRUE' THEN
message('ULTIMA INREGISTRARE');
ELSE
LAST_record;
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

END IF;

 Procedura DELETE_RECORD. Când se utilizează în afara unui trigger On-Delete,


şterge înregistrarea curentă din bloc şi marchează înregistrarea ca fiind ştearsă. Dacă
înregistrarea corespunde unui tuplu din baza de date, Forms Developer blochează
înregistrarea inainte de ştergere şi o marchează pentru ştergere. Inregistrarea este
adăugată la lista de înregistrări care vor fi şterse efectiv din baza de date în timpul
următorului proces de commit. Nu se utilizează în modul Enter Query.
Intr-un trigger ON-DELETE procedura DELETE_RECORD iniţiaza ştergerea unei
înregistrări în timpul procesului de terminare completă a tranzacţiei (Commit) .

 Procedura CREATE_RECORD creează o nouă înregistrare în blocul curent după


înregistrarea curentă. Forms Developer navighează la noua inregistrare.

 Procedura INSERT_RECORD, se utilizează numai într-un trigger ON-INSERT şi


insereaza un tuplu în baza de date în timpul procesului de terminare completă a
tranzactiei (commit).

 Procedura EXIT_FORM confirmă acţiunea de commit sau de rollback. In cele mai


multe contexte, EXIT_FORM navighează în “afara” formei. Dacă sunt modificări în
forma curentă ce nu au fost salvate în baza de date (commit), Forms Developer
atenţionează operatorul. Daca operatorul este în modul Enter Query, EXIT_FORM
navighează în afara modului ENTER QUERY şi nu în afara formei.

Butonul Iesire
SET_ALERT_PROPERTY('ALERTMESAJ', ALERT_MESSAGE_TEXT, 'DORITI SA
PARASITI FORMA?' );
IF SHOW_ALERT('ALERTMESAJ')=ALERT_BUTTON1 THEN
EXIT_FORM;
END IF;
Sau
SET_ALERT_PROPERTY('ALERTMESAJ', ALERT_MESSAGE_TEXT, 'DORITI SA
PARASITI FORMA?' );
IF SHOW_ALERT('ALERTMESAJ')=ALERT_BUTTON1 THEN
EXIT_FORM (no_commit);
END IF;

 Procedura COMMIT_FORM determină ca FORMS Developer să actualizeze datele


în baza de date, validează modulul de form, apoi fiecare bloc din modul, şterge, inserează
sau modifica în baza de date şi execută commit. Se şterg şi blocările la nivel de tuplu şi
tabelă. Dacă se utilizează o comandă COMMIT într-un bloc anonim sau într-o procedură
la nivel de modul de videoformat, Forms Developer interpretează această comandă ca un
apel al procedurii COMMIT_FORM.

 Funcţia SHOW_ALERT() afişează alerta şi returnează o valoare numerica, atunci


când operatorul selectează unul din butoanele alertei.
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

SHOW_ALERT(alert_id Alert);
SHOW_ALERT(alert_name VARCHAR2);

Dacă operatorul selectează :


 Button1, Form Developer returnează ALERT_BUTTON1,
 Button2, Form Developer returnează ALERT_BUTTON2,
 Button3, Form Developer returnează ALERT_BUTTON3,

Butonul Salvare
SET_ALERT_PROPERTY('ALERTMESAJ', ALERT_MESSAGE_TEXT, 'DORITI SA
SALVATI?' );
IF SHOW_ALERT('ALERTMESAJ')=ALERT_BUTTON1 THEN
COMMIT_FORM;
END IF;

 Trigger-ul POST-QUERY se declanşează atunci când operatorul sau aplicaţia


execută o cerere. Se declanşează pentru fiecare rând încărcat (fetch)
De exemplu, se utilizează pentru a popula cu date dintr-o tabela un element de tip display
item.

exemplu: trigger POST-QUERY la nivel de bloc de date EMPLOYEES


select last_name into :employees.lnume from employees where
:employees.employee_id=employee_id;

select den_pub into :pers_pub.titlu


from publicatii where :pers_pub.codpub=codpub;
exception
when no_data_found then
message('Nu exista carti cu acest cod');
raise form_trigger_failure;
when too_many_rows then
message ('Mai multe carti cu acest cod');
raise form_trigger_failure;
when others then
message (sqlerrm);
raise form_trigger_failure;

 Variabila de sistem System.record_status specifică starea înregistrării curente (unde


este cursorul localizat). Poate avea următoarele valori:
 CHANGED -înregistrarea este modificată (starea ei este “Changed”)
 INSERT -starea înregistrării este “Changed”, dar nu există în baza de date
 NEW- starea înregistrării este “New”.
 QUERY - starea înregistrării este “Valid” şi este încărcată din BD
Codul triggerului WHEN-BUTTON-PRESSED al butonului Salvare:
declare
Facultatea de Științe Economice - SIG - Oracle – Laboratorul 12

v_cod facultati.codfac%type;
v_cod1 catedre.codcat%type;
alerta number;
found boolean;
found1 boolean;
cursor cp is select codfac from facultati where codfac=:facultati.codfac;
cursor cp1 is select codcat from catedre where codcat=:catedre.codcat;
begin
open cp;
open cp1;
fetch cp into v_cod;
fetch cp1 into v_cod1;
found :=cp%found;
found1:=cp1%found;
SET_ALERT_PROPERTY('ALERTMESAJ', ALERT_MESSAGE_TEXT, 'DORITI SA
SALVATI?' );
IF SHOW_ALERT('ALERTMESAJ')=ALERT_BUTTON1 THEN
if (found or found1) and :system.record_status='INSERT' then
alerta:=show_alert('alertduplicat');
raise form_trigger_failure;
END IF;
commit_form;
end if;
close cp;
close cp1;
end;

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