Sei sulla pagina 1di 51

20.05.

08

Corso Interno Oracle Developer: guida per lo sviluppo di form


Daniele Lustri
Consultant

20.05.08

Oracle Forms Overview

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,)

Oracle Forms Builder


Oracle Forms E un ambiente per lo sviluppo rapido di applicazioni (Rapid Application Development) che utilizzano il Database Oracle. Lo strumento permette di creare o modificare Forms, utilizzando un tool grafico semplice ed intuitivo ed attraverso il linguaggio PL/SQL. Oracle Forms Builder produce un file sorgente binario (.fmb) che pu essere compilato localmente o su server producendo un eseguibile (.fmx) che potr essere eseguito dal Forms Runtime Engine.

PL/SQL library module

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

Gli oggetti di una Form


Layout: Window: Una window una cornice vuota. Loggetto Windows contiene informazioni sulla barra del titolo e sulle dimensioni di visualizzazione della finestra. Canvas: Un Canvas rappresenta lo sfondo su cui verranno messi gli elementi grafici e di interfaccia. Block: Un blocco un contenitore di elementi grafici (item). Item: Litem lelemento dellinterfaccia che permette di visualizzare informazioni o permette allutente di interagire con la form (es: bottoni e caselle di testo) Interazione: Trigger: Un trigger un evento che richiama codice PL/SQL. I trigger sono lanello di congiunzione tra gli elementi grafici e il codice PL/SQL.

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

Built-in Subprograms - Object Property


ITEM: GET_ITEM_PROPERY SET_ITEM_PROPERTY SET_ITEM_ISTANCE_PROPERTY GET_ITEM_INSTANCE_PROPERTY BLOCK: GET_BLOCK_PROPERTY SET_BLOCK_PROPERTY CANVAS: GET_CANVAS_PROPERTY SET_CANVAS_PROPERTY WINDOW: GET_WINDOW_PROPERTY SET_WINDOW_PROPERTY

GET_ITEM_PROPERTY(blocco.item,X_POS) SET_ITEM_PROPERTY(blocco.item,ENABLED, PROPERTY_FALSE)

SET_BLOCK_PROPERTY(blocco, UPDATE_ALLOWED, PROPERTY_TRUE)

SET_CANVAS_PROPERTY(canvas, HEIGHT,650)

SET_WINDOW_PROPERTY(window, TITLE, My Application)

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

La prima Form: Step by Step

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

Fase iniziale - Sviluppo lato client

Scaricare il TEMPLATE.fmb da cui partire a sviluppare

Il TEMPLATE.fmb si trova sotto $AU_TOP/forms/US

Scaricare APPSTAND.fmb e le librerie .pll necessarie per il TEMPLATE.fmb

Le librerie .pll si trovano sotto $AU_TOP/resource

Settare il Form60_path nel registo di sistema

HKEY_LOCAL_MACHINE Software Oracle HOME

20

Fase iniziale: mandatory library


Librerie standard che devono essere scaricate per usare il TEMPLATE.fmb:
APPCORE.pll APPFLDR.pll FV.pll GMS.pll IGILUTIL2.pll JL.pll PSA.pll VERT.pll VERT3.pll IGI_DOS IGI_SIA IGI_CBC APPCORE2.pll CUSTOM.pll GHR.pll HRKPI.pll JA.pll OPM.pll PSAC.pll VERT1.pll VERT4.pll IGI_IAC IGI_STP IGI_CC APPDAYPK.pll FNDSQF.pll GLOBE.pll IGILUTIL.pll JE.pll PQH_GEN.pll PSB.pll VERT2.pll VERT5.pll IGI_MHC IGI_EXP IGI_CIS

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

Create a new form - Sviluppo lato client

STEP 1

Rinominare il Template.fmb e sviluppare la form con Form Developer

STEP 2

Caricare il sorgente sul server via FTP

STEP 3

Compilare il sorgente sul server ottenendo il file eseguibile fmx

STEP 4

Registrare la form in OAPPS e definire la funzione associata

STEP 5

Associare una voce di menu in OAPPS per richiamare la funzione

22

Create a new form - Step 1


1) Aprire form Builder e cliccare sul radio button Build a form based on

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

Create a new form - Step 2


Collegarsi via FTP al server I file sorgenti vanno posizionati sotto la cartella $AU_TOP/forms/<lang> I sorgenti sono distinti per lingua e quindi bisogna creare una form per ogni traduzione

FTP

24

Create a new form - Step 3


Collegarsi via putty / telnet al server utilizzando lutente APPS (appl<SID>) Posizionarsi nella cartella dove si trova il sorgente $AU_TOP/forms/<lang>

Compilare la form usando la seguente sintassi:


f60gen module=FORMNAME.fmb userid=apps/apps output_file=FORMNAME.fmx (OAPPS Release 11.5) frmcmp_batch module=FORMNAME.fmb userid=apps/apps output_file=FORMNAME.fmx (OAPPS Release 12)

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

Create a new form - Step 4


Collegarsi alle Oracle Applications con la responsibility APPLICATION DEVELOPER. Registrare la form (Application Form)

26

Create a new form - Step 4


Definire la funzione da associare alla Form (Application Function)

27

Create a new form - Step 5


Collegarsi alla responsibility SYSTEM ADMINISTRATOR. Capire sotto quale men deve essere posizionata la chiamata alla form (Security Responsibility Define) Ad ogni responsibility associato un men. Inserire la funzione associata alla form nel menu corretto (Application Men)

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

Modificare una Form Standard

Modify a form - Sviluppo lato client

STEP 1

Trovare il sorgente che deve essere modificato

STEP 2

Scaricare dal server il sorgente e le librerie necessarie per modificarlo

STEP 3

Effettuare le modifiche alla form

STEP 4

Compilare il sorgente sul server ottenendo il file eseguibile .fmx

STEP 5

Registrare la form in OAPPS e creare una funzione e una voce di menu

CBE

32

Modify a form Step 1


Dalle Application ricavare il nome del sorgente che deve essere modificato Cliccare su ? nel men in alto. Quindi su Informazioni Su Oracle Applications..

33

Modify a form Step 2

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

Modify a form Step 3


Apportare le modifiche alla form, cercando di rispettare le seguenti linee guida: Se possibile, creare nuovi oggetti piuttosto che modificare quelli standard gi esistenti Tutto il codice introdotto deve essere racchiuso tra commenti che permettano di capire velocemente cosa stato aggiunto Separare il pi possibile i nuovi oggetti custom da quelli standard della form Prima di apportare qualsiasi modifica al sorgente di una form standard accertarsi che la personalizzazione non possa essere fatta attraverso la CUSTOM.pll o usando i custom code delle OAPPS.

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

Custom.pll Come funziona


Ogni form di Oracle Applications invia gli eventi di Oracle Forms alla CUSTOM library Il codice custom contenuto in CUSTOM library viene eseguito in corrispondenza di tali eventi

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

Custom code - Form Personalize in OAPPS


Disponibile dalla release 11.5.10 Le personalizzazioni possono essere fatte direttamente dalle OAPPS attraverso una opportuna form ? Diagnostics Custom Code Personalize Come la Custom.pll, questo sistema di personalizzazione permette di aggiungere funzionalit e/o cambiare le propriet della form senza modificarne il sorgente. Non necessario mettere mano al codice

40

Custom code in OAPPS

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

Utilizzo del calendario per la date

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

Gestione pulsante Query Find - Torcia


Bisogna creare un trigger QUERY-FIND a livello di blocco sul quale si vuole attivare la ricerca, con il seguente codice: APP_FIND.QUERY_FIND(LOV_SECTION_QF); Dove LOV_SECTION_QF il nome della LOV che filtrer i dati.

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

Oracle Applications Developers Guide

Oracle Forms Reference Manual

49

50

Q & A

QUESTIONS ANSWERS

Contatti
www.reply.eu d.lustri@reply.it

51