Oracle Forms 10g release 2 : Demos, Tips and Techniques
Home page
 
 
 
1. Introduction
 
Here is a collection of Oracle Forms 10g sample dialogs extracted from a complete Oracle 
Forms tutorial.
This tutorial has been written in French and it would be too time consuming to translate it all in 
English.
This is the reason why I hae only extracted and translated these sample dialogs.
 
The purpose of this article is not to teach how to build a new form from scratch. It intends to 
show some of the main adanced features of the product.
 
To clearly understand in details how these dialogs wor!" you will hae to open them in the 
Forms #uilder and examine them thoroughly.
Howeer" in this article" I am going to explain the best I can the most important mechanisms 
of each sample.
 
These sample hae been tested with an Oracle Forms 10g release 10.1.$.0.$ on an Oracle 
%atabase 10g Express Edition &elease 10.$.0.1.0.
 
 
2. Description of the sample dialogs
 
 
2.1 Main screen
 
T'TO(FO&)*.F)#
 
This dialog is the entry point of the samples. +lic! on a button to start the corresponding 
dialog.
 
 
2.2 an!ases
 
TE*T(+,-.,*.F)#
 
This sample shows three types of canas /
 
         The content canas 0light green1
         The stac!ed canas 0white1
         The tab canas 0dar! green1
 
 
*tac!ed canas
A stacked canvas is displayed atopor stacked onthe content canvas assigned to the 
current window. Stacked canvases obscure some part of the underlying content canvas, and 
often are shown and hidden programmatically. You can display more than one stacked 
canvas in a window at the same time
, stac!ed canas allows to scroll a big canas in a delimited window.
In this sample" the stac!ed canas 0+.(E)2(11 is twice bigger than its iewport.
 
The "Do#n$ button allows to moe the stac!ed canas programatically/
 
Set_View_Property('CV_EMP_1', VIEWPORT_Y_POS_ON_CANVAS, 140) 
 
 
Here are the properties of this stac!ed canas/
 
%ie#port
.iewport 3 position        44
.iewport 5 position       11
.iewport 6idth             $1$
.iewport Height             178
 
&h'sical
.iewport 3 position on canas    0
.iewport 5 position on canas    0
6idth                                       $1$
Height                                      (2)
 
 
The second *tac!ed canas 0+.(E)2(71 demonstrates how to integrate in a Tab canas/
 
 
 
 
2.( *loc+s
 
2.(.1 *loc+ ,ased on a comple- !ie#
 
TE*T(#9O+(.'E.F)#
 
This sample show how you can base a bloc! on a iew that aggregate the columns of seeral 
tables 0in this case" %E2T and E)21 and when you can insert" update and delete from the 
target tables from this iew.
 
The code that handles the target table is located in a program unit" called from the three 
bloc!:leel triggers/
 
         O-:I-*E&T
         O-:'2%,TE
         O-:9O+;
 
This is the code of the ins_upd_emp_dept procedure/
 
PROCE!"RE i#$_%p&_e'p_&ept IS
  (N)!%''y P(S_INTE*ER +, 0 
-E*IN
  .. T/01e !EPT ..
  -e2i#
  Se1e3t 1
  I#to (N)!%''y
  4ro' !"A(
  W5ere e6i$t$( $e1e3t &ept#o 7ro' &ept w5ere &ept#o , +EMP_!EPT8!EPTNO ) 
    .. 4o%#& .9 %p&/te ..
       Me$$/2e('"p&/te !EPT t/01e')
       "P!ATE !EPT
       SET    !NAME , +EMP_!EPT8!NAME
       W:ERE  !EPTNO , +EMP_!EPT8!EPTNO 
  E63eptio#
       W5e# #o_&/t/_7o%#& T5e#
    .. Not 7o%#& .9 i#$ert ..
       Me$$/2e('I#$ert i#to !EPT t/01e')
       INSERT INTO !EPT ( !EPTNO, !NAME )
       VA("ES ( +EMP_!EPT8!EPTNO, +EMP_!EPT8!NAME ) 
  E#& 
 
  .. T/01e EMP ..
  -e2i#
  Se1e3t 1
  I#to (N)!%''y
  4ro' !"A(
  W5ere e6i$t$( $e1e3t e'p#o 7ro' e'p w5ere e'p#o , +EMP_!EPT8EMPNO ) 
    .. 4o%#& .9 %p&/te ..
       Me$$/2e('"p&/te EMP t/01e')
       "P!ATE EMP
       SET    ENAME , +EMP_!EPT8ENAME
       W:ERE  EMPNO , +EMP_!EPT8EMPNO 
  E63eptio#
       W5e# #o_&/t/_7o%#& T5e#
    .. Not 7o%#& .9 i#$ert ..
       Me$$/2e('I#$ert i#to EMP t/01e')
       INSERT INTO EMP ( EMPNO, ENAME )
       VA("ES ( +EMP_!EPT8EMPNO, +EMP_!EPT8ENAME ) 
  E#& 
 
EN!
 
2.(.2 *loc+ ,ased on stored procedures
 
TE*T(#9O+(2&O+.F)#
 
This sample demonstrates how a bloc! can be based on stored procedures.
This feature can be implemented in two ways/
 
         , &EF +'&*O&
         , 29<*=9 table
 
In addition to that" there are also two different locations where to implement this functionality/
 
         The O-:xxx triggers
         The transactionnal triggers
 
In this sample" the top bloc! uses a &EF +'&*O& with the O-:xxx triggers
The bottom bloc! uses a collection with the standard transactionnal triggers.
 
The stored procedures are located in the PKG_EMP pac!age shipped with the scripts.
 
#loc!1 0E)21" &EF +'&*O& and O-:xxx triggers
 
 
 
The .uer' Data /ource T'pe is set to &rocedure and the .uer' Data /ource 
0ame indicates the name of the >uery procedure.
 
The insert" update" delete and loc! orders are managed in the corresponding On:xxx triggers/
 
Example of O-:I-*E&T trigger/
 
!EC(ARE
    (R)E'p e'p_p;28e'p_re3
-E*IN
   
    (R)E'p8e'p#o +, +e'p8e'p#o
    (R)E'p8e#/'e +, +e'p8e#/'e
    (R)E'p8<o0   +, +e'p8<o0
    (R)E'p8$/1   +, +e'p8$/1
    (R)E'p83o''  +, +e'p83o''
 
    emp_pkg.emp_insert( LR$Emp );
EN!
 
The ariable used as parameter is of type of e'p_p;28e'p_re3
 
  TYPE e'p_re3 IS RECOR!(
    e'p#o    e'p8e'p#o=TYPE,
    e#/'e    e'p8e#/'e=TYPE,
    <o0      e'p8<o0=TYPE,
    $/1      e'p8$/1=TYPE,
    3o''     e'p83o''=TYPE)
 
Then the emp_pkg.emp_insert( stored procedure/
 
  ............
  .. I#$ert ..
  ............
  PROCE!"RE e'p_i#$ert(r IN e'p_re3) IS
  -E*IN
    INSERT INTO e'p (e'p#o, e#/'e, <o0, $/1, 3o'')
       VA("ES(r8e'p#o, r8e#/'e, r8<o0, r8$/1, r83o'')
  EN! e'p_i#$ert
 
 
 
#loc!$ 0E)2(T&?1" +ollection and transactionnal triggers
 
 
This bloc! uses a collection of records with the emp.pkg.emp_!uery procedure.
 
  TYPE e'pt/0 IS TA-(E O4 e'p_re3 IN!E> -Y -INARY_INTE*ER
 
  PROCE!"RE e'p_?%ery(e'p_&/t/ IN O"T e'pt/0) IS
    ii N"M-ER
    C"RSOR e'p$e1e3t IS
      SE(ECT e'p#o, e#/'e, <o0, $/1, 3o'' 4ROM e'p
         OR!ER -Y e#/'e 
  -E*IN
    OPEN e'p$e1e3t
    ii +, 1
    (OOP
      4ETC: e'p$e1e3t INTO
        e'p_&/t/( ii )8e'p#o,
        e'p_&/t/( ii )8e#/'e,
        e'p_&/t/( ii )8<o0,
        e'p_&/t/( ii )8$/1,
        e'p_&/t/( ii )83o''
      E>IT W:EN e'p$e1e3t=NOT4O"N!
      ii +, ii @ 1
    EN! (OOP
  EN! e'p_?%ery
 
The collection of records is an I- O'T parameter" read from the database and returned to 
Forms.
 
The insert" update"delete and loc! orders are also managed by stored procedures.
0see them in detail in the E)2(2;? pac!age1
 
 
Hae also a loo! at the .uer' Data /ource olumn property that manages the relation 
between the columns of the collection and the items of the bloc!.
 
 
 
2.(.( *loc+ ,ased on a relational ta,le that contains a collection
 
TE*T(+O99E+TIO-.F)#
 
In this dialog" we can see how to handle a table that contains a nested table 0collection1.
There is no standard buit:in to base a bloc! on a collection" but we will see how easy it is to 
wor! with this sort of ob@ect ia the O-:xxx triggers.
 
Here is the description of the table 0,&TI+9E*1
 
 CREATE TA-(E ARTIC(ES
   (   CO!E     VARC:ARA(A0 -YTE),
       (I-E((E  VARC:ARA(100 -YTE),
       PRI>     N"M-ER(B,A),
       CTETOT   N"M-ER(B,0),
       CASES    TA-_TYP_CASE
   )
 NESTE! TA-(E CASES STORE AS CASES_NT
 RET"RN AS VA("E
 
T,#(T52(+,*E is a table of ob@ects of type /  T52(+,*E
 
3re/te or rep1/3e TYPE TYP_CASE AS O-DECT
 (
   EMP   VARC:ARA(10),
   CTE    N"M-ER
 )
 
In this sample" the first bloc! 0,&TI+9E*1 displays the standard columns of the ,&TI+9E 
table and the second bloc! 0detail1 displays the columns of its nested table.
 
&opulate the detail ,loc+ 1nested ta,le2
 
The detail bloc! 0+,*E*1 is dynamically populated each time a master record change in a 
6hen:-ew:&ecord:Instance of the master bloc!/
 
!e31/re
   (C)Re?  V/r35/rA(AEF) 
-e2i#
  I7 +ARTIC(ES8CO!E I$ #ot #%11 T5e#
     .. !y#/'i3 ?%ery o7 $e3o#&/ry 01o3; ..
     (C)Re? +, '(SE(ECT 3/$e$8EMP, 3/$e$8CTE 4ROM TA-(E ( SE(ECT 3/$e$ 4ROM 
/rti31e$ W:ERE 3o&e , ''' GG +ARTIC(ES8CO!E GG ''') 3/$e$)' 
     *o_-1o3;('CASES' )
     C1e/r_-1o3; 
     Set_Block_Property( 'CASES', !ER"_#A$A_S%!RCE_&A'E, LC$Re( ) ;
     .. pop%1/te t5e 01o3; ..
     E6e3%te_C%ery 
     *o_-1o3;('ARTIC(ES') 
  E1$e
     *o_-1o3;('CASES' )
     C1e/r_-1o3; 
     *o_-1o3;('ARTIC(ES') 
  E#& i7 
E#&  
 
 
#ecause it is not possible to create a new article with a -'99 collection" we hae to handle 
the insertion into the ,&TI+9E table in a O-:I-*E&T trigger/
 
..............................................................
..  we /re &oi#2 /# e6p1i3it i#$ert 0e3/%$e t5e #ew re3or&  ..
..  3/##ot 3o#t/i# / N"(( 3o11e3tio#                        ..
..............................................................
INSERT INTO ARTIC(ES
  (
    CO!E,
    (I-E((E,
    PRI>,
    CTETOT,
    CASES
  )
  VA("ES
  (
    +ARTIC(ES8CO!E,
    +ARTIC(ES8(I-E((E,
    +ARTIC(ES8PRI>,
    +ARTIC(ES8CTETOT,
    $AB_$"P_CASE()  )) insert *n empty collection
  )
  
 
Indeed" if we insert a -'99 collection" it will be no longer possible to insert anything in the 
nested table.
 
Then after" it is easy to manage the detail records with the O-:xxx triggers of the +,*E* 
bloc!/
 
O-:I-*E&T/
 
.. I#$ert t5e row i# t5e 3o11e3tio# ..
INSERT INTO TA-(E
 ( 
   SE(ECT
      3/$e$
   4ROM
      /rti31e$
   W:ERE
      3o&e , +ARTIC(ES8CO!E
 )
 V/1%e$
 (
   TYP_CASE( +CASES8EMP, +CASES8CTE )
 )
 
 
O-:%E9ETE/
 
.. !e1ete row i# t5e 3o11e3tio# ..
!E(ETE 4ROM TA-(E
 ( 
   SE(ECT
      3/$e$
   4ROM
      /rti31e$
   W:ERE
      3o&e , +ARTIC(ES8CO!E
 ) 3/$e$
 W:ERE
   3/$e$8e'p , +CASES8EMP
 
 
etc.
 
 
2.(.) *loc+ ,ased on multiple data sources
 
TE*T(%,T,(*O'&+E*.F)#
 
I this sample dialog" we can see how to base a bloc! on seeral tables that share an identical 
structure.
0see the A,-.IE&" FE.&IE& and ),&* tables created by the install.sql script1
 
The list item is populated with the name of three tables that share the same structure/
 
 
Then" the source table of the bloc! is changed dynamically in the 6hen:9ist:+hanged trigger/
 
I7 +CTR(8C:OI> i$ #ot #%11 T5e#
   +21o0/1835oi6 +, +3tr1835oi6 
   31e/r_7or' 
   +3tr1835oi6 +, +21o0/1835oi6 
   .. 35/#2e t5e C%ery !/t/ So%r3e ..
   Set_Block_Property('$ES$+', !ER"_#A$A_S%!RCE_&A'E, ,glo-*l.C.%/0 );
   2o_01o3;('TESTA')
   e6e3%te_?%ery
E#& i7     
 
 
2.(.3 *loc+ ,ased on an o,4ect ta,le that contains a collection of references
 
TE*T(O#AET*.F)#
 
9etBs see how to manage an ob@ect table that contains a collection of references.
 
This sample is based on the ob@ect table 0,&TI+9E(O#A1 that contains a collection of 
references/
 
3re/te or rep1/3e TYPE RE4_TYP_EMP AS O-DECT
(
  re7_e'p RE4 TYP_EMP
)
 
3re/te or rep1/3e TYPE TA-_RE4_TYP_EMP AS TA-(E O4 RE4_TYP_EMP
 
3re/te or rep1/3e TYPE TYP_ARTIC(ES AS O-DECT
(
  CO!E     VARC:ARA (A0),
  (I-E((E  VARC:ARA (100),
  PRI>     N"M-ER (B,A),
  CTETOT   N"M-ER (B),
  REMP     TA-_RE4_TYP_EMP  .. 3o11e3tio#
)
 
 CREATE TA-(E ARTIC(ES_O-D O4 TYP_ARTIC(ES
 NESTE! TA-(E REMP STORE AS REMP_NT
 RET"RN AS VA("E
 
 
 
The tip is the same that the one used to manage the relational table with nested table/
 
: , when:-ew:&ecord:Instance  trigger on the master bloc! to populate the detail bloc! 0the 
collection of references1/
 
!e31/re
  (C)Re?  V/r35/rA(AEF) 
-e2i#
  I7 +ARTIC(ES8CO!E I$ #ot #%11 T5e#
     .. !y#/'i3 ?%ery o7 $e3o#&/ry 01o3; ..
     (C)Re? +, '(SE(ECT e'p8re7_e'p8e'p EMP, e'p8re7_e'p8?te CTE
       4ROM TA-(E( SE(ECT REMP 4ROM /rti31e$_o0< W:ERE CO!E , ''' GG 
+ARTIC(ES8CO!E GG ''') e'p
       W:ERE e'p8re7_e'p8/rt , ''' GG +ARTIC(ES8CO!E GG ''')' 
     *o_-1o3;('CASES' )
     C1e/r_-1o3; 
     .. 35/#2e t5e C%ery !/t/ So%r3e N/'e ..
     Set_Block_Property( 'CASES', !ER"_#A$A_S%!RCE_&A'E, LC$Re( ) ;
     .. pop%1/te t5e 01o3; ..
     E6e3%te_C%ery 
     *o_-1o3;('ARTIC(ES') 
  E1$e
     *o_-1o3;('CASES' )
     C1e/r_-1o3; 
     *o_-1o3;('ARTIC(ES') 
  E#& i7 
E#&  
 
: ,n O-:I-*E&T trigger to insert a new record with an empty collection/
 
.......................................................
..  We /re &oi#2 /# i'p1i3it i#$ert 0e3/%$e t5e #ew  ..
..  re3or& 3/##ot 3o#t/i# / N"(( 3o11e3tio#          ..
.......................................................
INSERT INTO ARTIC(ES_O-D
VA("ES
(
  TYP_ARTIC(ES
  (
     +ARTIC(ES8CO!E,
     +ARTIC(ES8(I-E((E,
     +ARTIC(ES8PRI>,
     +ARTIC(ES8CTETOT,
     $AB_RE1_$"P_E'P()
   )
) 
 
 
The collection of references is managed with the corresponding O-:xxx trigger of the detail 
bloc!/
 
O-:I-*E&T/
 
.. I#$ert / row (RE4) i# t5e 3o11e3tio# ..
!e31/re
       (C)Re? V/r35/rA(AEF) 
-e2i# 
       (C)Re? +, 'INSERT INTO TA-(E
       ( SE(ECT re'p 4ROM ARTIC(ES_O-D W:ERE 3o&e , ''' GG +ARTIC(ES8CO!E  GG 
''')
       VA("ES
       ( RE4_TYP_EMP ( (SE(ECT RE4(/) 4ROM EMP_O-D / W:ERE /8ART , '''
         GG +ARTIC(ES8CO!E GG ''' AN! /8EMP , ''' GG +CASES8EMP GG 
''') ) )' 
      
       4or'$_!&1( (C)Re? ) 
 
E#& 
 
O-:%E9ETE/
 
.. !e1ete t5e row (RE4) o7 t5e 3o11e3tio# ..
!E(ETE 4ROM TA-(E
  ( SE(ECT re'p 4ROM ARTIC(ES_O-D W:ERE 3o&e , +ARTIC(ES8CO!E ) e'p
W:ERE
   e'p8re7_e'p8/rt , +ARTIC(ES8CO!E
A#&
   e'p8re7_e'p8e'p , +CASES8EMP
 
 
2.) Items
 
 
2.).1 &rincipal items
 
TE*T(ITE)*.F)#
 
Here is a description of the main items.
+lic! eerywhere on each item to see some information messages and some particular 
behaiours.
 
 
2.).2 5ist items
 
TE*T(9I*TE*.F)#
 
9etBs study and handle the three sorts of list item and also the different ways to populate 
them.
In this sample" the three list items are synchroniCed. +hange the alue of the first list and it 
will adapt the content of the second then the content of the third.
 
For each new list alue" the corresponding alue and label are displayed.
 
a1 The first list item is populated with the &?()OI* record group/
 
  .. (i$t 1 ..
  err3o&e +, Pop%1/te_*ro%p( 'R*_MOIS' )
 
  C(EAR_(IST('-(OCA8(ISTE1')
  P%P!LA$E_L/S$('BL%C+.L/S$E2', 'R3_'%/S' );
  .. Se1e3t t5e 7ir$t H/1%e ..
  +-(OCA8(ISTE1 +, *et_(i$t_E1e'e#t_V/1%e('-(OCA8(ISTE1', 1 ) 
 
b1 Then init the second list item
 
  .. "p&/te t5e wee;$ 1i$t ..
  err3o&e +, Pop%1/te_*ro%p( 'R*_SEMAINES' )
 
  C(EAR_(IST('-(OCA8(ISTEA')
  P%P!LA$E_L/S$('BL%C+.L/S$E+', 'R3_SE'A/&ES' );
 
  .. Se1e3t t5e 7ir$t H/1%e ..
  +-(OCA8(ISTEA +, *et_(i$t_E1e'e#t_V/1%e('-(OCA8(ISTEA', 1 ) 
 
c1 That finally init the third list item/
 
PROCE!"RE I#it_(i$teI IS
   (C)!    V/r35/rA(1A) 
   (C)!/y V/r35/rA(A0) 
-E*IN
   .. "p&/te t5e &/y$ 1i$t ..
   (C)! +, '01J01JA00E' 
   C1e/r_(i$t( '-(OCA8(ISTEI' )
  
   4or i IN 088F (oop
      SE(ECT
        to_35/r( To_&/te((C)!, '!!JMMJYYYY' ) @ (i @ 
((To_#%'0er(+-(OCA8(ISTEA).1) K L)), '4M!/y !! Mo#t5' )
      I#to
        (C)!/y
      4ROM &%/1 
     
      A44_List_Element('BL%C+.L/S$E5', i 6 2, LC$#*y, LC$#*y ) ;
              
   E#& 1oop 
  
   .. Se1e3t t5e 7ir$t H/1%e ..
   +-(OCA8(ISTEI +, *et_(i$t_E1e'e#t_V/1%e('-(OCA8(ISTEI', 1 ) 
  
E63eptio#
   W5e# Ot5er$ t5e#
      N%11        
EN!
 
 
2.).( Image items
 
,9#')(2HOTO.F)#
 
This dialog is the main part of the ensemble that allows to search" attach and display images.
 
5ou can build a photo album based on a one imageBs column table.
 
  CREATE TA-(E P:OTOS
   (   (E*EN!E      VARC:ARA(100 -YTE),
       P.%$%        BL%B &%$ &!LL E&ABLE,
       4ORMAT       VARC:ARA(E0 -YTE) NOT N"(( ENA-(E,
       CRE!IT       VARC:ARA(E0 -YTE) NOT N"(( ENA-(E,
       (IEN         VARC:ARA(100 -YTE),
       I!ENTI4IANT  N"M-ER(E,0) NOT N"(( ENA-(E,
       NOM          VARC:ARA(E0 -YTE),
        CONSTRAINT P:OTO_PM PRIMARY MEY (I!ENTI4IANT) ENA-(E
   ) 
 
It shows two ways to search a filename on the local machine with and without 6ebutil.
 
 
#y clic!ing on a picture" you can naigate on another canas to display the detail of the 
picture/
 
 
 
+H,&?E(2HOTO.F)#
 
The get6file6name sample dialog is only a Dpure exercice of styleE " because it is so easy to 
pic!:up a file with the "ile_#pen_$ialog( 6ebutil function.
This sample is interesting to see how to use the %#S&( and &'(&_)#( functions to get the 
list of the local machine dries and their content.
 
+H,&?E(2HOTO(6E#'TI9.F)#
 
,nother dialog to store the picture and its properties.
 
 
2.).) 7a!a *ean component
 
TE*T(?&,2H.F)#
 
Here is a sample to demonstrate how to handle a bean area.
This dialog use the Oracle Forms?raph Aaa #ean that is part of the Oracle Forms demos.
 
5ou can download the Forms?raph.@ar file on the OT- page
http/<<www.oracle.com<technology<sample(code<products<forms<files<formsgraph(patch$00F.C
ip
 
 
2.).3 alculated items
 
TE*T*(+,9+'9.F)#
 
9etBs see how to use the calculated items.
 
The first calculated item use the /ummar' calculation mode/
 
 
 
The third one use a Formula calculation mode
 
 
 
2.3 8lerts
 
TE*T(,9E&TE*()E**,?E*.F)#
 
This dialog shows how to use the ,lert boxes to build the messaging engine of your Forms 
application.
 
The message texts are read from the database then displayed ia ,lert boxes.
To reduce the number of messages needed in the application" some of  them can ta!e from 1 
up to 7 parmeters 0G1" G$ and G71. , pipe 0H1 character allows to split the message on 
seeral lines.
 
The main bloc! is based on the M9//8:9/ table.
 
   CREATE TA-(E  MESSA*ES
   (   CO!E    N"M-ER(E,0) NOT N"(( ENA-(E,             .. %#i?%e i&e#ti7i/#t
       TE>TE   VARC:ARA(AEF) NOT N"(( ENA-(E,           .. te6t o7 t5e 
'e$$/2e
       TITRE   VARC:ARA(100),                           .. tit1e o7 t5e /1ert
       STOP    VARC:ARA(1) !E4A"(T 'N' NOT N"(( ENA-(E, .. S5/11 we $top t5e 
pro3e$$ N (r/i$e 7or'_tri22er_7/i1%re)
       A(ERTE  VARC:ARA(1E),                            .. #/'e o7 t5e /1ert 
0o6
        CONSTRAINT MS*_PM PRIMARY MEY (CO!E) ENA-(E
   )
 
 
This sample use the Affiche_*essage( procedure of the T;TO6FO<M/ pl<s>l library to 
display the messages.
These messages can be displayed through the 7 alert boxes aailable in eery dialog of this 
demo.
 
         ,9(E&&E'& wich is the simple DO;E alert box.
         ,9()*?(O'I(-O- wich is a yes<no alert box 0default yes1
         ,9()*?(-O-(O'I wich is a yes<no alert box 0default no1
 
 
2.= &ropert' classes and !isual attri,utes
 
TE*T(+9,**E*(2&O2.F)#
 
9etBs see some ways to use the property classes and the isual attributes to coloriCe and 
highlight dynamically different ob@ects of the form 0alert" item" current record" etc.1.
2roperty classes and isual attributes are located in the O*76T;TO6FO<M/.ol, ob@ect 
library.
 
2.> Forms internal triggering e!ents
 
TE*T(+5+9E*.F)#
 
This dialog allows you to understand what trigger fire and in what order when you use the 
application.
 
#efore each particular action" you can clear the list of triggers window.
This window show you what trigger is firing in what order and from what bloc! and what item.
 
 
 
(. Installation steps
 
This sample dialog need database ob@ects to run.
,ll the necessary ob@ects are proided in the tutoforms10g.Cip file shipped with the article.
 
 
This Cip file contains $ sub directories/
 
?config that contains the configuration files.
?scripts that contains the *>l script files to create the database ob@ects.
 
 
         %ownload the tutoforms10g.Cip file
 
         'nCip the tutoforms10g.Cip file under your "D9%/;IT96@OM9$?forms? directory.
 
         +reate a new user in your database
 
         6ith *>lIplus or *>l%eeloper" run the ?scripts?install.sql script
note / because this demo use the 6ebutil functions" the Oracle user where you hae 
created these ob@ects must hae the WE-"TI(_!- pac!age compiled or a grant 
E3E+'TE to this pac!age if it is present in another schema.
 
         'nder the ?tutoforms? directory compile all the source modules
5ou can use the compile6all.,at file located in the same directory to compile all 
ob@ects at once.
      e.g.     3o'pi1e_/11 %$erJp/$$wor&Oi#$t/#3e
 
         Edit the ?tutoforms?config?tutforms10g.en! file to indicate your own settings 0in 
blue in this example1
 
Joracle home  adapt this alue to your own setting
O&,+9E(HO)EKD:ADe!10g<2
 
FO&)*(2,THKGO&,+9E(HO)EGLformsLtutoforms
O&,+9E(2,THKGO&,+9E(HO)EGLformsLtutoforms
FO&)*(T&,+E(2,THKGO&,+9E(HO)EGLformsLtutoforms
+9,**2,THKD:ADe!10g<2LformsL@aaLfrmwebutil.@arMGO&,+9E(HO)E
GL@libLdebugger.@arMGO&,+9E(HO)EGLformsLtutoformsLForms?raph.@arM
GO&,+9E(HO)EGLformsLtutoformsLmyIcons.@arM
 
J webutil config file path
6E#'TI9(+O-FI?KD:ADe!10g<2LformsLsererLwebutil.cfg
 
         Edit the ?tutoforms?config? add6to6forms#e,.cfg file to set your own database 
connect string 0in blue in this example1
 
...
loo!,ndFeelKOracle
color*chemeKblaf
logoKno
JdonNt forget to put your own database connexion
useridBtutoforms10g?tutoforms10gCD9
 
         +opy the ?tutoforms?config?tutforms10g.en! to the ?forms?ser!er directory
 
         add the ?tutoforms?config? add6to6forms#e,.cfg at the end of 
your ?forms?ser!er?forms#e,.cfg file
 
 
         Then" you can start the demo by indicating the new Otutoforms10gP formsweb.cfg 
section.
 
 
http://machine:8890/forms/frmservlet?config=tutoforms10g