Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
08
20.05.08
Form
Cos una Form Il termine Form viene solitamente usato per indicare linterfaccia di unapplicazione che consenta allutente di interagire con dati e informazioni. In Oracle, le form permettono di inserire ed estrarre informazioni contenute nella base dati. Una form contiene diversi elementi grafici (bottoni, menu, scrollbar,)
Orcale Form Builder permette di manipolare i seguenti oggetti: Form module (.fmb) PL/SQL library module (.pll) Le librerie PL/SQL contengono codice che pu essere condiviso tra le diverse Forms. Questo codice organizzato in procedure e package come sul DB ma diversamente dal codice che si trova sul DB potrebbe richiamare funzioni native del Forms Server. In maniera analoga alle form, anche le librerie devono essere compilate per poter essere richiamate ed eseguite dal Forms Runtime Engine. Il file compilato ha estensione .plx
Layout
Block
Due tipi di blocchi: Data Block: Un Data Block associato ad un oggetto del Data Base come una tabella o una vista. Ogni Item del blocco sar quindi in relazione con un colonna di una tabella del DB (o di una vista). Control Block: Un Control Block non associato ad alcun elemento del Data Base, ma contiene elementi che servono allutente unicamente per interagire con la form.
La property pallete
Ogni oggetto della Form ha diverse propriet che ne determinano laspetto grafico e funzionale. La property Pallete uno strumento che permette di visualizzare e modificare le propriet degli oggetti.
Trigger
Un Trigger una porzione di codice che viene eseguita allo scattare di un determinato evento. Gli eventi riguardano linterazione con la form (es: Pressione di un bottone, Compilazione di un campo, salvataggio di un record, chiusura/apertura della form ecc). ESEMPI DI TRIGGER: WHEN-NEW-FORM-INSTANCE KEY-COMMIT PRE-INSERT/ON-INSERT/POST-INSERT PRE-QUERY/POST-QUERY WHEN-BUTTON-PRESSED
10
PL/SQL
Nel codice PL/SQL della form possibile richiamare: Oggetti di Database (tabelle, procedure, package, visteecc) Built-in Subprograms (un insieme di procedure messe a disposizione per lo sviluppo di Oracle Forms) Procedure e funzioni contenute nelle librerie .pll Procedure e funzioni specifiche della Form (Program Units)
Built-in
.pll
Program Units
PL/SQL code .. .
Form
11
Built-in Subprograms
Built-in Subprograms, per: Ottenere informazioni sulle propriet degli oggetti della form. Modificare a runtime le propriet degli oggetti. Interagire con gli oggetti (es: rieseguire la query su un blocco, selezionare un recordecc) Visualizzare messaggi/alert a video. ESEMPI DI PROCEDURE BUILT-IN: MESSAGE / SHOW_ALERT DELETE_RECORD / CLEAR_RECORD / NEXT_RECORD / PREVIOUS_RECORD EXECUTE_QUERY
12
SET_CANVAS_PROPERTY(canvas, HEIGHT,650)
13
LOV
List of Value: Creare il Record Group con la query. Creare una nuova LOV, attraverso il Wizard, selezionando il Record Group appena creato. Definirne laspetto grafico Impostare quali campi devono essere restituiti e a quali item sono associati. Specificare su quale item debba essere richiamata la LOV.
14
Tipi di personalizzazione
Customization By Extension (CBE): sviluppo di nuovi componenti per le applicazioni esistenti e/o sviluppo di nuove applicazioni. La CBE pu anche partire da un oggetto standard che viene opprtunamente rinominato prima di essere modificato secondo le esigenze in questo caso loggetto di partenza non viene alterato.
Customization by Modification (CBM): si intende la modifica di un modulo software standard di Oracle eBusiness Suite NB: La CBM dovrebbe essere utilizzata solo se strettamente necessario e in ogni caso occorre mantenere copia del sorgente originale
15
Ambiente di sviluppo
Sviluppo lato Client Richiede linstallazione in locale del tool di sviluppo Occorre avere in locale copia delle librerie e delle form referenziate
Sviluppo lato Server Richiede lutilizzo di un Xclient (Win: Putty + Xming) Non necessario installare tool per lo sviluppo in locale ne scaricare le librerie e le form dal server. E necessario valorizzare la variabile DISPLAY con il proprio IP oppure abilitare ForwardX11 nel file /etc/ssh/ssh_config
16
Ambiente di sviluppo
Form Builder Tool:
OAPPS Release 11.5 Oracle Forms Developer 6i Release 2 Fortemente consigliata linstallazione della patch 16, scaricabile da metalink (Number patch 3596539) in questo modo si porta Form Builder alla versione 6.0.8.25.2 OAPPS Release 12 Oracle Developer Suite 10g (10.1.2.0.2) E necessario installare lintera Suite che contiene anche Form Builder versione 10.1.2.0.2
17
20.05.08
Template Form
Il Template.fmb il punto di partenza per tutti gli sviluppi di form custom Contiene numerosi triggers pre-confezionati per la gestione della form secondo gli standard di sviluppo di Oracle Forms Si richiama il menu File New Form Using Template, si seleziona il file Template.fmb e lo si salva rinominandolo. Nello sviluppo lato Client necessario avere in locale le librerie richiamate dal Template.
19
20
La form APPSTAND.fmb e le librerie vanno messe tutte nella stessa cartella che dovr essere puntata da Form60_path nel registro di sistema.
21
STEP 1
STEP 2
STEP 3
STEP 4
STEP 5
22
2) 3) 4) 5) 6)
a template Selezionare il TEMPLATE.fmb dalla directory locale Salvare il file con il nome da dare alla nuova form Costruire la form creando blocchi, item, triggerecc Nella property pallete del modulo settare la propriet First Navigation Data Block con il nome del primo data block. Nella program unit APP_CUSTOM.CLOSE_WINDOW modificare la seguente linea di codice: if (wnd = <first window>') then app_window.close_first_window;. Sostituendo <first window> con il nome della finestra in cui contenuto il primo data block.
23
FTP
24
Spostare leseguibile nella cartella del modulo a cui fa riferimento. Es: $ONT_TOP/forms/I cartella delle form in lingua italiana di Order Managment Es: $XXOE_TOP/forms/US cartella delle form in lingua inglese di un modulo Custom
25
26
27
28
Different Approach
Data Block: basati su viste o tabelle? TABELLE PRO: Non bisogna gestire linserimento delle informazioni su DB CONTRO: In generale le form sono basate su viste e bisogna quindi creare dei campi fittizi riempiti nel trigger POST-QUERY NB: La ricerca non funziona correttamente su questi campi Lo sviluppatore non ha controllo sui meccanismi di inserimento e aggiornamento dei record in tabella NB: Questa tecnica non va quindi MAI usata su tabelle standard
29
Different Approach
VISTE PRO: Si riduce il traffico di rete: le dipendenze vengono denormalizzate sul server Si evita di codificare il trigger POST-QUERY Controllo totale sullinserimento delle informazioni in tabella CONTRO: Utilizzando le viste non si pu usare il meccanismo nativo di Forms per gli aggiornamenti e occorre codificare gli script di aggiornamento manuale modificando i trigger ON-INSERT, ON-UPDATE, ON-DELETE. NB: E conveniente concentrare le routine di aggiornamento in un package di handling della tabella piuttosto che scrivere codice direttamente nei trigger
30
20.05.08
STEP 1
STEP 2
STEP 3
STEP 4
STEP 5
CBE
32
33
Per poter modificare in locale una form standard necessario scaricare le librerie e i sorgenti richiamati dalla form stessa 1) Tentare di aprire la form: alcuni messaggi di errore indicheranno quali moduli e quali librerie sono necessarie. 2) Scaricare le librerie e i moduli indicati e copiarli in una cartella locale 3) Settare Form60_path nel registro di sistema in modo che punti a questa cartella NB: Mantenere separate librerie di diversi ambienti
34
35
Custom.pll
Consente di estendere le Oracle Applications senza modificare il codice standard E un repository di tutto il codice custom relativo alle personalizzazioni delle forms Nessuna patch rilascer mai una nuova versione della CUSTOM library E possibile intercettare alcuni eventi:
WHEN-FORM-NAVIGATE WHEN-NEW-FORM-INSTANCE WHEN-NEW-BLOCK-INSTANCE WHEN-NEW-RECORD-INSTANCE WHEN-NEW-ITEM-INSTANCE WHEN-VALIDATE-RECORD SPECIAL (n) dove n e compreso tra 1 e 45 Key-fn dove n e compreso tra 1 e 8
36
Events *.fmx
WHEN-NEW-FORM-INSTANCE WHEN-VALIDATE-RECORD etc
CUSTOM library
37
Custom.pll
Cambiare le propriet degli items: nascondere, cambiare colore Aggiungere criteri di validazione ulteriori Popolare in automatico determinati campi Richiamare forms custom che interagiscono con le forms standard Richiamare procedure PL/SQL residenti sul data base COMPILAZIONE:
La CUSTOM.pll deve essere compilata sul server per produrre la CUSTOM.plx: f60gen module=CUSTOM.pll userid=apps/apps module_type=library
38
Custom.pll
Prestare attenzione al codice introdotto poich c una sola CUSTOM.pll comune a tutte le form
A fronte di upgrade o patching posso cambiare i nomi di blocchi e items delle forms personalizzate via CUSTOM library
A fronte di un malfunzionamento, occorre disattivare il codice custom per verificare se esso e stato introdotto dalle personalizzazioni Il codice custom pu essere disattivato mediante il men di diagnostica: Help > Diagnostic > Custom Code > OFF Inserire la maggior parte delle personalizzazioni nella CUSTOM library minimizza le variazioni del codice standard che bisogna apportare a fronte di una patch o di unupgrade
39
40
41
Custom.pll Example
Viene richiesto che i fornitori siano inseriti in maiuscolo: Si setta lopportuna propriet delloggetto
PROCEDURE event(event_name VARCHAR2) IS form_name VARCHAR2(30) := NAME_IN(system.current_form); BEGIN . IF (form_name = APXVENDR) THEN IF (event_name = WHEN-NEW-FORM-INSTANCE) THEN set_item_property(VENDOR.NAME, CASE_RESTRICTION, UPPERCASE); END IF; END IF; . END event;
42
Custom.pll Example
oppure, i caratteri vengono resi maiuscoli dopo la validazione del record.
. IF (form_name = APXVENDR) THEN IF (event_name = WHEN-VALIDATE-RECORD) THEN if (block_name = 'VENDOR') then copy(upper(name_in('VENDOR.NAME')), 'VENDOR.NAME'); END IF; END IF; END IF; .
NB: Nella Custom.pll usare le procedure copy e name_in per scrivere e leggere il valore dellitem selezionato.
43
Custom.pll Example
Aggiunta di un message box con lelenco dei campi obbligatori
IF (event_name = WHEN-VALIDATE-RECORD) THEN IF name_in('person.last_name') IS NULL OR name_in('person.national_identifier') IS NULL OR name_in('person.date_of_birth') IS NULL THEN fnd_message.set_string(Non sono stati inseriti tutti i campi obbligatori'); fnd_message.show; END IF; RAISE form_trigger_failure; END IF;
44
Custom.pll Example
Aggiungere una voce di mene richiamarla
if (form_name = XXSCMOEORD') then if (event_name = 'WHEN-NEW-FORM-INSTANCE') then APP_SPECIAL2.INSTANTIATE('SPECIAL43', Form Imballi', null, true, null); app_special2.enable('SPECIAL43',PROPERTY_ON); end if; if event_name = 'SPECIAL43' then FND_FUNCTION.EXECUTE( FUNCTION_NAME=> 'XXSCMIMBALLI', -- Nome funzione OPEN_FLAG=>'Y, SESSION_FLAG=>'Y', OTHER_PARAMS= 'P_CONSEGNA='||:XXOE_SCM_CONSEGNE_TEMP.SCM_DELIVERY_ID||' ' -- lista parametri ); end if;
45
20.05.08
How to
Creare un Text Item di tipo Date Assegnare a questo campo la lov ENABLE_LIST_LAMP Attivare il trigger KEY-LISTVAL sullitem e scrivere il seguente codice: CALENDAR.SHOW(SYSDATE); Impostare a No la propriet VALIDATION FROM LOV
47
Bisogna creare un parametro per la chiave primaria del blocco sul quale si vuole attivare la query-find (per esempio SECTION_QF) e bisogna poi creare una LOV che restituisca il valore nel parametro appena creato. Infine bisogna aggiungere al trigger di PRE-QUERY a livello del blocco la seguente sintassi: IF :paramter.G_query_find = TRUE THEN :XXES_BLOCK_V.key := :parameter.section_qf; :parameter.G_query_find := FALSE; END IF;
48
Documentazione
Oracle Applications Concepts Guide
49
50
Q & A
QUESTIONS ANSWERS
Contatti
www.reply.eu d.lustri@reply.it
51