FORMATELE DE STOCARE ALE FORMELOR SI REUNIREA OBIECTELOR FORMELOR


Cuprinsul acestui capitol:

Acest capitol trareaza trei formate de stocare ale SQL*Forms si trateaza caracteristicile fiecaruia. Subiectele tratate includ:

Cele trei formate de stocare a formelor

Cele trei formate de stocare a formei

Exista trei formate de stocare permanenta acceptate de SQL*Forms: baza de date, .FRM si .INP. Cum deja sunteti familiarizati cu .FRM si .INP, acest capitol se concentreaza pe formatul baza de date.

Formatul baza de date

SQL*Forms (Design) foloseste 12 tabele pentru a pastra date despre formele create si modificate de dumneavoastra. Aceste tabele apartin in mod normal SYSTEM-ului. Tabelele sunt accesibile urmarind:
        Nume Tabel              Continut
        ----------              ----------------------------

        FORM_APP                idntificare forma

        FORM_AUTHUSER           informatie despre formele pe care userul curent
                                le poate referi/copia

        FORM_BLK                identificare bloc si caracteristici
        
        FORM_COMMENT            text comentariu

        FORM_FLD                identificare camp si caracteristici

        FORM_MAP                text fix si grafice

        FORM_PAGE               atribute de pagina

        FORM_PROCEDURE          informatii despre proceduri si pointer la text

        FORM_REFERENCE          inregistrare a tuturor referintelor de obiecte
                                SQL*Forms

        FORM_SQLTXT             text al tututror declaratiilor SQL continute in
                                forme

        FORM_TRG                locatia si caracteristicile pasilor de trigger

        FORM_TRIGGER            locatia si caracteristicile triggere-lor

        FORM_USER               informatii despre drepturile user-ului acordate
                                de user-ul curent

De fapt, aceste "tabele" va permit sa cititi si manipulati doar propriile dumneavoastra definitii de forme.

Avantajele formatului Baza de Date

Dupa cum ati vazut, nu este nevoie sa stocati forma in baza de date in ordinea modificarii, generarii sau executarii sale. Deci, care sunt motivele pentru salvarea formelor in baza de date?


De exemplu, puteti scrie 'analize de impact' SQL pentru a determina care forme folosesc o coloana anume sau care campuri au fost afisate.

Submeniul Action si formatele de stocare a formei

         ______________________________________________________________
        | Action foRm Block Field Trigger Procedure Image Help Options |
        | ________________________SQL*Forms___________________________ |
        | | New         |                                              |
        | | Open        |                                              |
        | | ----------- |                                              |
        | | Copy        |                                              |
        | | Rename      |                                              |
        | | Delete      |                                              |
        | | Load        |                                              |
        | | Print Doc  >|                                              |
        | | ----------- |                                              |
        | | Generate    |                                              |
        | | Execute     |                                              |
        | | ----------- |                                              |
        | | Save        |                                              |
        | | FormSecurity|                                              |
        | | Quit        |                                              |
        | |_____________|                                              |
        |                                                              |
        |                                                              |
        |______________________________________________________________|

        Optiunile meniului care relateaza crearea si stocarea formei:

        New             creeaza o noua forma in zona de lucru. Pana sa o
                        generati sau sa o salvati, forma este temporara si nu
                        va exista in sesiunea SQL*Forms.

        Open            copiaza o forma din baza de date in zona de lucru
                        SQL*Forms.

        Copy            copiaza o forma in baza de date. Daca forma numita se
                        afla atat in zona de lucru SQL*Forms cat si in baza de
                        date, va fi folosita versiunea din zona de lucru.

        Rename          redenumeste o forma din zona de lucru sau, daca nu
                        exista nici o forma in zona de lucru, din baza de date.
                        Tastati in ambele vechiul si noul nume.

        Delete          sterge o forma din baza de date; zona de lucru nu este
                        afectata.

        Load            incarca o forma dintr-un fisier.INP.Incarcarea reuseste
                        chiar daca o versiune a formei exista in baza de date.

        Generate        genereaza forma in zona de lucru pentru a produce doua
                        fisiere ale sistemului de operare: nume_form.INP si
                        nume_form.FRM.

        Execute         ruleaza versiunea .FRM a unei forme; executia nu
                        afecteaza continutul zonei de lucru.

        Save            salveaza continutul zonei de lucru in baza de date.
                        Daca forma din zona de lucru    a fost incarcata
                        dintr-un fisier.INP si o forma cu acelasi nume exista
                        in baza de date, vi se va cere sa stergeti forma din
                        baza de date inainte ca SAVE sa poata reusi.

Utilizarea Tabelelor SQL*Forms ca Tabele de Baza


        * Pagina 1

         _______________________________________________________________
        |  Action  Edit  Block  Field  Record  Query  Help              |
        | ----------Demo FORM_APP, FORM_PROCEDURE, FORM_SQLTXT--------- |
        |                                                               |
        |        _______________________________________________        |
        |       |       General Application Information         |       |
        |       |_______________________________________________|       |
        |       |Owner: ITOWER      Application Name: COMMON    |       |
        |       |Title: Procedure Library                       |       |
        |       |Validation Unit:     Mouse Navigation Limit:   |       |
        |       |Menu Information - Menu App. Name: DEFAULT     |       |
        |       |                   Starting Menu:              |       |
        |       |                   Security Group:             |       |
        |       |_______________________________________________|       |
        |                                                               |
        |                                                               |
        |                                                               |
        |_______________________________________________________________|


        * Pagina 2


         _______________________________________________________________
        |                                                               |
        |  ___________________________________________________________  |
        | |                     Procedures                            | |
        | |___________________________________________________________| |
        | |Name: cpl_call_pop-up    Appl: COMMON     Owner: ITOWER    | |
        | |___________________________________________________________| |
        | |  *** REF ONLY *** procedure!!! Used to call a pop-up page | |
        | |PROCEDURE cpl_call_pop_up ( pop_up_name IN CHAR            | |
        | |                            ,x_coord    IN NUMBER          | |
        | |                            ,y_coord    IN NUMBER          | |
        | |                            ,called_from IN CHAR           | |
        | |                            ,hide_caller IN CHAR ) IS      | |
        | |/*****                                                     | |
        | |* Parameters                                               | |
        | |*    pop_up_name - name of the FRM Pop-Up to be return     | |
        | |*    x_coord     - reqd xcoord of top left corner of Pop-Up| |
        | |*    y_coord     - reqd ycoord of top left corner of Pop-Up| |
        | |*    called_from - calling environment, 'FORM' or 'MENU'   | |
        | |*    hide_caller - whether to hide calling Form            | |
        | |*****/                                                     | |
        | |l_nested             CHAR := 'N';                          | |
        | |l_hide_caller        CHAR(?);                              | |
        | |___________________________________________________________| |
        |                                                               |
        |                                                               |
        |_______________________________________________________________|


Manipularea tabelelor de baza SQL*Forms


Pe pagina opusa se afla pagina 2, o forma trei-blocuri bazata pe tabelele FORM_APP, FORM_PROCEDURE si FORM_SQLTXT. Blocurile FORM_PROCEDURE si FORM_SQLTXT au fost create ca blocuri implicite master/detail pentru a asigura ca textul procedurii afisat in partea de jos a blocului se refera mereu la procedura descrisa in partea de sus a blocului.

Utilizand forme similar exemplului de pe pagina opusa, puteti cere definitii de forme care va apartin.

Portabilitatea


Formatul baza de date si formatul fisier .INP sunt independente de hardware; astfel, sunt la fel pe orice tip de computer care accepta SQL*Forms; formatul fisier .FRM nu este. De aceea, nu transportati o forma de pe in tip de computer pe altul transportand fisierul .FRM. In schimb, copiati fisierul .INP si generati un nou fisier .FRM.

Tabelele de baza SQL*Forms (Design) pot fi transportate folosind facilitatile Oracle Import/Export. Oracle Corporation recomanda sa nu incercati sa importati tabele daca sistemul tinta are deja forme in baza de date. In schimb, stocati formele prin fisiere .INP si apoi convertiti fisierul .INP la formatul baza de date.
,br> Conversia formelor dintr-un format in altul este descrisa in urmatoarele doua pagini.
,br>

Rutine de Conversie SQL*Forms


                - exemplu:

        GENERATE  animal_form  george/orwell  -b



Rutine de conversie SQL*Forms


Cand doriti sa generati un fisier .FRM sau sa salvati o forma in baza de date, este adesea mai usor sa executati comenzi la promptul sistemului de operare, decat sa apelati SQL*Forms (Design). GENERATE si CONVFORM sunt rutine SQL*Forms de conversie de formate; numele lor mai vechi sunt IAG si respectiv IAC.
             Comanda GENERATE (IAG)

Comanda GENERATE va permite sa creati un fisier .FRM fara sa intrati in SQL*Forms (Design).
                GENERATE [optiuni]  [userid/parola]

                GENERATE animal_form george/orwell -b

Optiunea -b suprima mesajele. Fara ea, veti primi mesaje despre starea compilarii la fiecare trigger care este procesat.

Nota: Datorita cantitatii mici de memorie a unui PC, este posibil sa nu puteti face generarea din SQL*Forms (Design). In acest caz, selectand Generate din meniul Action veti produce doar un fisier INP pentru a fi creat. Apoi SQL*Forms va va directiona spre iesirea din interfata si folositi comanda GENERATE pentru a crea versiunea FRM.


Comanda CONVFORM (IAC)


Comanda CONVFORM indeplineste diferite functii depinzand de optiunea pe care o specificati (daca exista).

Nota: Este recomandat ca formele create inainte de Versiunea 2.3 sa fie convertite la 2.3 si apoi convertite la Versiunea 3. Daca convertiti direct din 2.0 in 3, aveti in vedere urmatoarele:


Nota: Cand este folosita optiunea -d, toate celelalte optiuni sunt ignorate. Aceasta comanda nu afecteaza fisierele .INP sau .FRM.

Refolosirea Obiectelor - Ierarhia de Obiecte

In SQL*Forms exista o ierarhie bine definita de obiecte. O intelegere clara a ierarhiei este importanta pentru navigarea eficienta prin interfata proiectata.


                                        FORM
                                          |
                                          |
                        __________________|___________________
                       |          |              |            |
                       |          |              |            |
                     BLOCK     TRIGGER        PROCEDURE      PAGE
                       |
                       |
                   ____|____
                  |         |
                  |         |
                FIELD     TRIGGER
                  |
                  |
               TRIGGER


Forma este obiectul principal, sau component, al unei aplicatii SQL*Forms si de aceea rezida in topul ierarhiei. Apartinand formei avem blocuri, pagini, proceduri de la nivelul formei si triggere. Blocuri individuale pot detine campuri si triggere, si campurile individuale pot contine triggere. Obiectele trigger sunt unice si pot exista mai mult decat pe un nivel al ierarhiei. SQL*Forms utilizeaza ierarhia pentru a determina Contextul curent.

Refolosirea Obiectelor


Refolosirea Obiectelor - Facilitatea Copy Object


SQL*Forms (Design) va permite sa refolositi orice obiect care exista in forma curenta sau in orice forma la care aveti drepturi de acces.

Puteti refolosi obiecte de toate tipurile, inclusiv proceduri, pagini, triggere, definitii de bloc si definitii de camp.

Este posibil sa creati o biblioteca de forme care sa contina triggere, pagini de text ajutator, proceduri, etc. folosite in mod comun si utilizati facilitatea Copy Object pentru a copia sau referi un obiect existent in biblioteca atunci cand definiti o alta forma.

Pentru a accesa obiectele intr-o forma, trebuie sa aveti drepturi in acea forma. Utilizand optiunea Form Security din meniul Action, proprietarul poate atat acorda cat si revoca drepturi altor useri asupra fiecarei forme sau PUBLIC tuturor utilizatorilor.
    _______________________________________________________________
        |                                                               |
        |        ______________________          ____________________   |
        |       |   Form Security      |        |                    |  |
        |       |                      |        |____________________|  |
        |       | Form: PERSONNEL      |        |  | Grant           |  |
        |       | User: PUBLIC         |        |__| Revoke          |  |
        |       | Privilege: Grant     |        |__|                 |  |
        |       |______________________|        |__|_________________|  |
        |                                                               |
        |                                                               |
        |                                                               |
        |_______________________________________________________________|


Daca un obiect este copiat sau referit, obiectele care ii apartin sunt de asemenea afectate. De exemplu, daca un bloc este copiat dintr-un bloc in altul, campurile sale componente si trigger-ele asociate sunt si ele copiate.

La copierea sau referirea unui obiect este important sa va aduceti aminte ca fiecare obiect apartine ierarhiei de obiecte care va fi de asemenea copiat/referit. De exemplu, daca un bloc este copiat, toate trigger-ele de la nivelul sau, campurile si trigger-ele de la nivelul campurilor sunt copiate. Trigger-ele pot referi proceduri care nu vor fi automat copiate.

Obiecte Referite


Ce puteti modifica?

Copierea si Referirea Obiectelor


Diferenta dintre Copy si Reference

Unde este Sursa?



Salvarea formei in baza de date

Pentru a salva o copie a formei in baza de date, alegeti optiunea Save din submeniul Action.

Copierea si Referirea Obiectelor



Utilizarea unei Biblioteci de Forme


                BAZA DE DATE
             _________________________________________________________
            |                                                         |
            |     BIBLIOTECA DE FORME              FORMA TEMPLATE     |
            |     ____________________          __________________    |
            |    |  Blocuri de Control|------->|  Referinta       |   |
            |    |                    |        |                  |   |
    --------|----|  Triggere ---------|------->|  Copie/Referinta |   |
   |        |    |                    |        |                  |   |
   |   -----|----|  Proceduri --------|------->|  Referinta       |   |
   |  |     |    |____________________|        |__________________|   |
   |  |     |                                                   |     |
   |  |     |                                                   |     |
   |  |     |___________________________________________________|_____|
   |  |                                                         |
   |  |                                                         |
   |  |                                                         | Copy
   |  |                                                         | Object
   |  |                                                         |
   |  |                          ______________________         |
   |  |                         |   FORMA "BRUTA"      |        |
   |  |                         |   _________________  |        |
   |  |                         |  |                 | |        |
   |   -------------------------|--|-->              | |        |
   |  copie sau referinta       |  |              < --|-|--------
    ----------------------------|--|-->                    | |
                                |  |_________________| |
                                |______________________|

                                Zona de Lucru SQL*Forms
                                        Action/New



Biblioteca de Forme


O "biblioteca de forme" este pur si simplu o forma care a fost salvata in baza de date in ordinea crearii obiectelor sale (blocuri, campuri, triggere, pagini si proceduri) disponibile altor forme pentru scopuri de Copy/Reference. In general, accesul la forma este acordat PUBLIC prin optiunea form security din meniul Action.

Obiectele comune mai multor forme intr-o aplicatie trebuie sa fie pastrate intr-o "biblioteca" si apoi partajate. De exemplu:



O implementare sugestiva a bibliotecii de forme este ilustrata pe pagina opusa. Aici a doua forma ("template") a fost si ea salvata in baza de date. Ea contine referinte la blocul de control si cateva proceduri si triggere care vor fi folosite in fiecare forma.

Cand este creata o noua forma, forma template este copiata in zona de lucru SQL*Forms folosind facilitatea Copy Object. Toate obiectele comune sunt deja in forma "bruta". Constructorul poate apoi copia sau referi biblioteca de obiecte asa cum doreste.


De ce folosim o biblioteca de forme


Utilizarea bibliotecii de forme inseamna:



Cand o biblioteca de forme refere mai mult decat copiaza, exista un avantaj in plus asupra controlului centralizat al codului. Aceasta inseamna ca:

Capitolul 6 Exercitii



Exercitiul A: Utilizarea facilitatii Copy Object



In acest exercitiu, veti copia blocul si textul din forma CUSTOMER in forma ORDER. Acest lucru trebuie facut in doua etape: mai intai copiati pagina - aceasta copiaza tot textul dar nu si campurile; apoi copiati blocul in pagina.

  1. Incarcati forma CUSTOMER.
  2. Selectati optiunea SAVE din submeniul Action. Apasati [Accept]. O copie a formei Customer va rezida acum in tabelele de baza SQL*Forms.
  3. Incarcati forma ORDER.
  4. Apasati [Copy Object]. Completati forma indicand ca doriti sa copiati pagina 1 din forma CUSTOMER in pagina 2 di forma curenta (ORDER). Pentru ca dvs. detineti ambele forme, nu este necesar sa specificati proprietarul.
  5. Repetati pasul 4, de aceasta data copiind blocul CUS sub acelasi nume in pagina 2 a formei curente (ORDER). Mergeti in Screen Painter. Folositi [Next Page] si [Previous Page] pentru a naviga intre cele doua pagini.
  6. Generati si ruleti forma. Apasati [Previous Block] din blocul ORD pentru a naviga catre noua pagina si bloc. Iesiti din Runform.
  7. Alegeti optiunea Form Security din meniul Action.
    Acordati PUBLIC drepturi de copiere/referire a formei CUSTOMER.

    Acum altii pot copia/referi obiecte in forma dvs.

Capitolul 6: Solutii


        Exercitiul A


        Solutii neformale pentru pasii 1,2,3,6 si 7.

        4. Copiati pagina:

         _______________________________________________________________
        |                                                               |
        |                _______________________________                |
        |               |       Source Object           |               |
        |               |                               |               |
        |               | Copy or Reference Object: Copy|               |
        |               | Owner:                        |               |
        |               | Form:  customer               |               |
        |               | Block:                        |               |
        |               | Field:                        |               |
        |               | Trigger:                      |               |
        |               | Procedure:                    |               |
        |               | Text Page:  1                 |               |
        |               |       Target Object           |               |
        |               |                               |               |
        |               | Block:                        |               |
        |               | Field:                        |               |
        |               | Trigger:                      |               |
        |               | Position:  X:  Y:   Page: 2   |               |
        |               |_______________________________|               |
        |                                                               |
        |                                                               |
        |_______________________________________________________________|


        5. Copiati blocul


         _______________________________________________________________
        |                                                               |
        |                _______________________________                |
        |               |       Source Object           |               |
        |               |                               |               |
        |               | Copy or Reference Object: Copy|               |
        |               | Owner:                        |               |
        |               | Form:  customer               |               |
        |               | Block: cus                    |               |
        |               | Field:                        |               |
        |               | Trigger:                      |               |
        |               | Procedure:                    |               |
        |               | Text Page:                    |               |
        |               |       Target Object           |               |
        |               |                               |               |
        |               | Block:  cus                   |               |
        |               | Field:                        |               |
        |               | Trigger:                      |               |
        |               | Position:  X:  Y:  Page:      |               |
        |               |_______________________________|               |
        |                                                               |
        |                                                               |
        |_______________________________________________________________|