Oracle Application Form

Embed Size (px)

Citation preview

MC LCMC LC................................................................................................................1 Kin trc ng dng .................................................................................................4Tng quan v kin trc ng dng. .................................................................................. 4 M hnh pht trin v trin khai Oracle Application. ..................................................... 7

Cc chun cho vic Customize ng dng .............................................................8Tng quan v vic customize Oracle Applications......................................................... 8 Customization theo cch m rng. ................................................................................. 9 Customize theo cch m rng ......................................................................................... 9 Customize bng cch chnh sa .................................................................................... 11 Customize c s d liu Oracle Applications............................................................... 12 Nng cp v chnh sa Oracle Applications ................................................................. 12 Tch hp Custom Objects v Schemas ......................................................................... 12 Nng cp cc form c customize ln Release 11i .................................................... 12

Tng quan v Coding Standard trong ng dng ...............................................13Theo di cc thay i v d liu vi Record History ( WHO ) .................................... 13 Cc rng buc khai bo ( declarative constraint ) : ....................................................... 15 View : ............................................................................................................................ 16 Sequence : ..................................................................................................................... 16 API ng k bng : ........................................................................................................ 16 Tng quan v vic s dng PL/SQL trong cc ng dng : ........................................... 17 Thut ng : .................................................................................................................... 17 Cc chun chung trong lp trnh PL/SQL : ................................................................... 18 nh dng m PL/SQL : ............................................................................................... 19 X l li : ...................................................................................................................... 20 Mt vi hng dn khi coding SQL : ........................................................................... 21 Cc trigger trong form : ................................................................................................ 22 Nhng s thay th cho cc built-in trong Oracle Forms ............................................... 22 Lp trnh cc handler cho item, event v table : ........................................................... 23 Lp trnh cc handler cho item : ................................................................................... 24 Lp trnh cc handler cho event : .................................................................................. 25 Lp trnh cc handler cho table : ................................................................................... 25

Form TEMPLATE ................................................................................................40Gii thiu v form TEMPLATE : ................................................................................. 40 Cc th vin trong form TEMPLATE .......................................................................... 40 Cc trigger trong form TEMPLATE............................................................................. 42

Thit lp cc thuc tnh ca cc i tng cha(ContainerObject) ................49Cc i tng cha : ..................................................................................................... 49 Module : ........................................................................................................................ 49 Window :....................................................................................................................... 49 Canvas : ......................................................................................................................... 511

Block : ........................................................................................................................... 51 Region : ......................................................................................................................... 54

Thit lp cc thuc tnh ca cc i tng Widget ...........................................55Text Item : ..................................................................................................................... 55 Display Item : ................................................................................................................ 56 Poplist : ......................................................................................................................... 56 Option Group : .............................................................................................................. 56 Check Box :................................................................................................................... 56 Button ( Nt ) : .............................................................................................................. 56 List of Values ( LOV ) .................................................................................................. 57 Thit lp cc thuc tnh cho item : ................................................................................ 57 Mt s lu : ................................................................................................................ 60

iu khin hot ng ca Window, Block, v Region .......................................61iu khin hot ng ca Window ............................................................................... 61 Lp trnh cho cc Tabbed Regions................................................................................ 69 Hnh ng ca tabbed region : ..................................................................................... 70 3 mc kh trong lp trnh : ........................................................................................... 70

Cho php hot ng truy vn ..............................................................................73Query Find : .................................................................................................................. 73 Trin khai Row-LOV .................................................................................................... 73 Trin khai Find Window ............................................................................................... 74

Lp trnh cc hnh ng cho item .......................................................................78Mi quan h gia cc Item............................................................................................ 78 Item ph thuc c iu kin .......................................................................................... 81 Cc item a ph thuc................................................................................................... 82 2 Master Item v 1 Dependent Item .............................................................................. 83 Kiu ph thuc Cascading ............................................................................................ 85 Cc item loi tr ln nhau (Mutually Exclusive Items) ................................................ 86 Cc item ng hnh vi nhau (Mutually Inclusive Items) ............................................ 88 Mutually Inclusive Item lin h vi Dependent Item ................................................... 89 Cc item bt buc iu kin (Conditionally Mandatory Items) .................................... 91 Cc mc nh (Defaults) ............................................................................................... 93 Kim tra tnh ton vn (Integrity Checking) ................................................................. 94 i tng Calendar ....................................................................................................... 97 Cc la chn cp cao ca Calendar .............................................................................. 98

iu khin Toolbar v Default Menu ...............................................................100Pulldown Menu v Toolbar ........................................................................................ 100 Cc la chn c trn thanh cng c ( toolbar ) : ......................................................... 101 Cc mc ch c trong Menu ........................................................................................ 102 iu khin menu ng ................................................................................................ 103 To cc biu tng trn toolbar cho cc form bn customize .................................... 104 Cc menu c bit ....................................................................................................... 105 Customize cc RightMouse Menu (Popup Menus) .................................................. 105

Message Dictionary .............................................................................................108Tng quan v Message Dictionary ............................................................................. 108 Cc im c trng ca Message Dictionary ............................................................ 108

2

Cc bc cn tin hnh khi xc nh Message Dictionary ......................................... 109 Thit lp Message Dictionary ..................................................................................... 109 Phng php i vi Database Serverside Messaging. ............................................ 110

USER PROFILE .................................................................................................112Cc mc ca User Profile: .......................................................................................... 112 nh ngha mi cc ty chn ca user profile ............................................................ 113 Thit lp gi tr ty chn user profile.......................................................................... 113 Thit lp user profile ring ca bn ............................................................................ 113 Xc nh trc ty chn user profile .......................................................................... 113 Profile Window ........................................................................................................... 114

FOLDER ..............................................................................................................116Tng quan v Folder. .................................................................................................. 116 Lp trnh vi Folder trn form ng dng. ................................................................... 116

3

Kin trc ng dngTng quan v kin trc ng dng.Kin trc ng dng ca h thng Oracle Application theo m hnh tp trung 3 lp, l cc lp Desktop Client, Middle Tier (Form Server) v Data Base Server. Mi thao tc Client u thc hin da trn h thng Java nhng. D liu nhp liu c truyn v Application Server, vic x l cc chc nng c thc hin Application Server. Vic thao tc x l d liu thc hin Database Server. Kin trc tng th c m t nh hnh v di y:

Desktop Client : Giao din ha, s dng trn cc Web browser chun c h tr Java nhng chy Jinitiator. Oracle JInitiator l phin bn Oracle ca JavaSofts Java Plug-In, cho php x l JVM ti Web client thay v da vo JVM default ca browser.

4

C th tng thch vi mi PC,network computer hoc trn bt c giao din no c Java.

Middle Tier (Form Server): X l cc p ng logic ca Form. L ni lu gi cc d liu cache cc b. Trung gian gia hai tng.

5

Database Server: S dng cc li hm t xa (RPC) giao tip vi DB khi cn thit (c th thc hin nhiu DB action cng mt lc cc cu lnh SQL). X l thao tc d liu trn ng dng. Lu cc th tc trn DB nn giao tip gia cc stored procedure v DB xy ra trong b nh ch khng phi trn mng. Tng thch vi DB t 8i tr ln.

6

M hnh pht trin v trin khai Oracle Application.

Hin ti ti trung tm s dng mi trng Window thit k giao din, dch Form bng Form Server trn h iu hnh Linux. Qu trnh pht trin form bao gm ba bc chnh l: Build Generate Run/Test Build Form : Access to Libraries and Referenced Forms Thit lp FORMS60_PATH. Referenced Objects and the ORACLE_APPLICATIONS V ariable Generating Your Form : (dch Form trn Forms Server) Moving the File fmb Dch file : f60gen module=demo.fmb userid=apps/apps Running Your Form for Testing : test trn mi trng Web ch khng phi trn Form developer Sau khi hon thnh cc bc trn chuyn n Deployment : Nu ang pht trin v trin khai trn cng mt platform th ch cn copy file .fmx n ch cn khng phi dch file trn platform ch.

7

Cc chun cho vic Customize ng dng c th pht trin ng dng trn sn phm Oracle Applications bn phi s dng Oracle Application Object Library cng vi cc cng c khc nh Form v Report. Cc ch chnh : Tng quan v vic customize Oracle Applications Customize theo cch m rng Customize theo cch chnh sa Customize c s d liu Oracle Applications Nng cp v chnh sa Oracle Applications Nng cp Custom Forms ln Release 11i Upgrade Utility v Standards Compliance Checker: flint60

Tng quan v vic customize Oracle ApplicationsCc cng vic sau bn c th lm pht trin trn ng dng : Thay i cc Form trn ng dng : Giao din (appearance) M kim tra (validation logic) Hnh ng (behavior) Thay i Report hay chng trnh : Giao din (appearance) M (logic) Thay i c s d liu ca ng dng : Thm vo cc readonly schema Thm m vo cc database trigger Bin dch li ton b ng dng.

8

Customization theo cch m rng.Pht trin cc thnh phn mi cng nh ng dng mi trn nn c sn s dng Oracle Application Object Library. iu ny c th n gin bng cch copy mt thnh phn c sn ti mt th mc khc v tin hnh sa i n. Customization theo cch chnh sa Cch ny gi l thay i ngay ti ch. Tuy nhin theo khuyn co ta nn trnh cch lm ny v c th gp s c khi nng cp hoc khi sa i. Cc thnh phn (Component) Component c th l module code (nh form, report hoc SQL script) hay cc i tng Oracle Application Object Library (nh menus, responsibilities, messages) hay k c i tng CSDL(tables, views, packages, or functions). Mt ng dng pht trin phi c ng k vi Oracle Application Object Library v phi c th mc ring cng vi component ca n. Cc i tng c s d liu Mt table, index, view, sequence, database trigger, package, grant, hoc synonym. Application Short Name L tn tham chiu ca ng dng khng c du cch. Application Basepath L tn ca mt bin mi trng c chuyn thnh top directory ca cy th mc ca ng dng. Oracle Application Object Library s tm cc ng dn ti cc th mc mc di thc hin cc file chy trong ng dng k c form file. Cu trc th mc ca Application L s sp sp th t cc th mc trong ng dng. Th mc ca Oracle Applications c to ra khi ci t ng dng hay khi nng cp ng dng. Vi cc ng dng t to bn phi to ring cc th mc cho n. Cc file mi trng (Environment Files) ca ng dng Xc nh bin mi trng khi ci t ng dng. Bin mi trng bao gm .env v adovars.env (i vi UNIX platforms).

Customize theo cch m rng nh ngha ng dng c customize ca bn

9

To cu trc th mc cho ng dng c customize Thm ng dng c customize vo trong file Environment ca ng dng Thm cc thnh phn mi vo trong ng dng c customize ca bn Lp ti liu cho cc thnh phn mi

Lp ti liu cho cc thnh phn mi Vi mi thnh phn mi, lp ti liu cho t nht l cc ni dung sau : Mc ch Cc tham s u vo (cho report v program) Cc u ra v d (cho report v program) X l m Cc i tng CSDL c s dng v kiu truy cp (select, update, insert,delete). Nu cc component t ca bn l sa t bn copy ca mt component trong ng dng bn phi lit k chng trong file applcust.txt ( nm $APPL_TOP/admin directory Oracle Applications s s dng file ny trong qu trnh patch hay upgrade

nh ngha ng dng c customize ca bnS dng Applications window ng k custom application (bao gm name v short name theo tiu chun t tn thng thng)

To cu trc th mc cho ng dng c customize T to cho ng dng ca bn mt cu trc th mc hp l.

Sa i Applications Environment File Sa i file bin mi trng cho hp l sau khi ng li Forms Server v Internal Concurrent Manager ri chy file bin mi trng Oracle Application Object Library tm thy cc component.

Thm mi cc thnh phn Mi khi to mt component mi lu l chng trong th mc con hp l ca ng dng.

Thm mt form mi S dng file Template khi bt u to mt form mi c th tng thch

10

vi ng dng hoc sa i mt form c sn trn ng dng ri ng k li vi ng dng.

Cc bc tip theo l : Thm mt Report hoc mt Concurrent Program Thm mt Report Submission Form Thm Online Help Thm Menus Thm Responsibilities Thm cc thng bo trong Message Dictionary

Customize bng cch chnh saCc bc tin hnh sa i mt form c sn trong ng dng : Vi Release 11i, tt c cc form u t trong th mc $AU_TOP/forms/. Copy Oracle Applications form tin hnh s i ( Lu khng sa i trc tip ln form). S dng Oracle Forms Developer and Oracle Application Object Library :

1. Xc nh mt file 2. Copy file vo trong custom application v i tn file 3. Bo ton file nguyn bn 4. Thc hin cc chnh sa 5. Ch thch cho form 6. Dch form 7. ng k ng dng c customize trong applcust.txt 8. Lp ti liu cho vic customize

Ch thch cho form ghi thng tin v ngy v ngi sa ca form s dng PREFORM trigger Oracle Forms. FND_STANDARD.FORM_INFO($Revision: $, , , $Date: $, $Author: $);

11

Lu c th s dng Help oline th phi gi nguyn Application short Name . Chnh sa mt Report c sn Cc bc tin hnh i vi Oracle Reports .rdf file cng tng t nh di y : 1. Xc nh file 2. Thc hin chnh sa 3. Ch thch cho report 4. To 1 concurrent program s dng file ca bn

Customize c s d liu Oracle ApplicationsNu thc hin vic ny phi c bit lu khng lm nh hng ti ton b ng dng .

Nng cp v chnh sa Oracle Applications Kim tra cc chnh sa i vi CSDL Xc nh cc chnh sa c Lun chuyn cc chnh sa Chy li Grant v Synonym Scripts Test tt c cc s sa i

Tch hp Custom Objects v Schemas thc hin iu ny tt nht nn hi chuyn gia.

Nng cp cc form c customize ln Release 11i

12

Tng quan v Coding Standard trong ng dngTheo di cc thay i v d liu vi Record History ( WHO ) Tnh nng Record History ( WHO ) cung cp thng tin v ngi to mi hay cp nht cc hng trong cc bng Oracle Applications. Nu bn thm cc ct WHO c bit vo bng v cc m WHO vo form v stored procedure, ngi dng c th theo di c nhng thay i vi d liu ca h. Bn s dng cc trng n ( hidden field ) trong mi block i din cho cc ct WHO. Gi FND_STANDARD.SET_WHO trong cc trigger PRE-INSERT, PRE-UPDATE cung cp gi tr cho cc trng ny. Cc ct WHO :

13

14

Cc rng buc khai bo ( declarative constraint ) : NOT NULL DEFAULT UNIQUE CHECK PRIMARY KEY

Trnh to cc bng vi kiu d liu : LONG, LONG RAW, RAW. S dng kiu VARCHAR2(2000) thay th. Vi cc bng c tn ct trng vi t kho, to view n bng vi tn ct c thay bng tn khc khng trng t kho. C th thc hin INSERT, UPDATE, DELETE qua view kiu ny c.

15

View : Cc block phc tp th da trn cc view, cc block n gin th da trn cc table. Bn cng nn to cc LOV da trn view. Ct u tin trong view nn chn l ct gi (pseudo-column) ROWID (t tn l ROW_ID), ri n cc ct ca bng ( k c cc ct WHO ). t thuc tnh Key Mode ca block l Non-Updatable tt tham chiu mc nh n ROWID ca Oracle Forms cho cc block da trn view. t thuc tnh Primary Key ca item l True vi item l kho chnh ca view. Lp trnh cc trigger thc hin insert, update, delete v lock : khi to 1 block da trn view, phi lp trnh cc trigger ON-INSERT, ON-UPDATE, ON-DELETE v ON-LOCK insert, update, delete v lock bng gc thay v view. Vi view trn 1 bng, khng cn n cc trigger insert, update, delete hay lock. t Key Mode ca block l Unique. Cc view trn 1 bng khng cn n ct ROW_ID.

Sequence : To sequence : cung cp cc gi tr ID khng trng nhau cho 1 ct ca 1 bng. Khng nn gii hn phm vi ca sequence ( khng s dng CYCLE hoc MAXVALUE ). S dng kiu d liu Number lu cc gi tr ca sequence. Khng s dng bng FND_UNIQUE_IDENTIFIER_CONTROL

API ng k bng : Bn ng k cc bng ng dng t to ca mnh bng 1 PL/SQL routine trong package AD_DD. Cc bng ( v mi ct ca n ) ch phi ng k khi chng s dng flexfield hoc Oracle Alert. C th s dng AD_DD API xo cc ng k ca bng v ct Khi thay i cu trc bng, ng k li bng cch xo ng k c ( ct trc ri n bng ), sau ng k li. AD_DD API khng kim tra s tn ti ca bng cn ng k. V vy, cn bit chc bng cn ng k c tn ti v m t ng cc nh dng ca n khi s dng AD_DD API. Khng cn phi ng k cho view. Cc th tc trong package AD_DD :procedure register_table (p_appl_short_name in varchar2, p_tab_name in varchar2,

16

p_tab_type in varchar2, p_next_extent in number default 512, p_pct_free in number default 10, p_pct_used in number default 70); procedure register_column (p_appl_short_name in varchar2, p_tab_name in varchar2, p_col_name in varchar2, p_col_seq in number, p_col_type in varchar2, p_col_width in number, p_nullable in varchar2, p_translate in varchar2, p_precision in number default null, p_scale in number default null); procedure delete_table (p_appl_short_name in varchar2, p_tab_name in varchar2); procedure delete_column (p_appl_short_name in varchar2, p_tab_name in varchar2, p_col_name in varchar2);

V d v s dng package AD_DD ng k 1 bng flexfield v cc ct ca n : EXECUTE ad_dd.register_table(FND, CUST_FLEX_TEST, T, 8, 10, 90); EXECUTE ad_dd.register_column(FND, CUST_FLEX_TEST, APPLICATION_ID, 1, NUMBER, 38, N, N);

Tng quan v vic s dng PL/SQL trong cc ng dng : Bn c th s dng cc th tc PL/SQL nh mt phn ca ng dng bn xy dng nm trong Oracle Applications. Bng cch tun theo cc chun lp trnh, bn c th to ra 1 th tc PL/SQL tch hp hon ton vi ng dng. Bn c th s dng PL/SQL vit cc on m m rng c tnh th tc custom form v report. PL/SQL cng gip module ho form code ca bn, hoc pht trin cc chng trnh chy ng thi ( concurrent program ).

Thut ng : Server-side : ch cc th tc lu trn c s d liu Oracle . Client-side : ch cc th tc chy trong cc chng trnh l client ca CSDL Oracle.

17

Cc chun chung trong lp trnh PL/SQL : Lun s dng package : nh ngha cc th tc PL/SQL trong package Kch thc package : m ngun ca 1 n v chng trnh ( 1 package ) client-side khng c vt qu 10K, v tng kch thc source code v compiled code phi nh hn 64K. Nu 1 n v chng trnh qu ln, c th chia ra thnh cc n v con c lin kt vi nhau. Server-side package khng b gii hn v kch thc. Thm cc th tc mi vo cc package tn ti : thm vo cui ca mi package. Nu thm vo gia package ( specification hay body ), phi dch li cc form c tham chiu n package, nu khng s b li. S dng tn trng trong cc client-side package : lun dng tn trng y ( BLOCK_NAME.FIELD_NAME ) khoanh vng tm kim ( ch tm trong block ), v trnh trng hp xung t khi c 2 trng trng tn. Tn trng trong cc tham s ca th tc : khng dng kiu tham s OUT hoc IN OUT v c th lm thay i cc gi tr ca trng truyn vo khi kt thc th tc. Vi danh sch tham s qu di, s dng => truyn ng tham s. S dng DEFAULT : s dng DEFAULT khi to gi tr mc nh cho tham s thay v :=, cho gi tr truyn vo c th ghi ln gi tr mc nh. Ngc li, vi hng, s dng := gi tr khng th b ghi ln. S dng ID ca object : cc on code thay i nhiu thuc tnh ca 1 i tng bng SET__PROPERTY, nn s dng ID ca i tng. Dng FIND_ ly ID, sau truyn ID vo th tc c dng sn SET__PROPERTY. X l gi tr NULL : bt k biu thc so snh no c cha phn t NULL u tr v gi tr FALSE. kim tra mt phn t c NULL hay khng, s dng IS. Cc bin global : c 3 loi . Oracle Form global : bin nm trong pseudo-block ( khi gi ) global ca form. . PL/SQL package global : bin c nh ngha trong package specification . Oracle Form Parameter : bin c to nh mt tham s trong Oracle Forms Designer.

18

nh dng m PL/SQL : Trong 1 package, nh ngha cc bin private trc, sau n cc th tc private, cui cng l cc th tc public. Lun kt thc th tc hoc package bng End Procedure_name; hoc End Package_name; d theo di, nhn dng.

Hng lnh di li vo trong 2 du cch d c code, v d :

S dng -- thm dng ch thch v /* */ bao on ch thch. Cn l ch thch v lnh c ch thch thng hng.

19

S dng ch hoa ( vi cc t kho ) v ch thng ( cc t cn li ) d c code ( v PL/SQL khng phn bit ch hoa ch thng ).

Dng IF-THEN-ELSIF thay cho cc cu trc IF-THEN-ELSE lng nhau.

Ch to cc khi PL/SQL lng nhau trong 1 th tc khi phi x l nhng li c th pht sinh.

X l li : Li trong th tc PL/SQL trong Oracle Form : s dng FND_MESSAGE hin th thng bo li, sau gi RAISE FORM_TRIGGER_FAILURE dng vic x l li.

Li trong cc stored procedure : s dng FND_MESSAGE.SET_NAME hin th thng bo li, sau gi APP_EXCEPTION.RAISE_EXCEPTION dng x l

20

Kim tra FORM_SUCCESS, FORM_FAILURE v FORM_FATAL : cc gi tr ca chng c th b thay i bi mt trigger no . Xem v d sau :

Trnh s dng RAISE_APPLICATION_ERROR v n gy xung t trong qu trnh x l li pha server.

Mt vi hng dn khi coding SQL : S dng select from DUAL thay v select from SYS.DUAL. Khng s dng SYSTEM.DUAL. Tt c cc lnh SELECT nn s dng mt cursor (con tr) t nh ngha t trc. Mt lnh SELECT bnh thng thc hin 2 x l : 1 ly d liu v 1 kim tra

21

c b li TOO_MANY_ROWS khng. Ta c th trnh iu ny bng vic ch ly v 1 bn ghi t cursor m ta nh ngha trc. Nu bn mun SELECT vo trong 1 tham s th tc, khai bo tham s l IN OUT, cho d c s dng hay khng gi tr ca tham s ( tr trng hp tham s l trng ). 1 single-row SELECT khi khng tr v hng no s sinh ra li NO_DATA_FOUND. 1 INSERT, UPDATE, hay DELETE khi khng tc ng ln hng no s khng bo li. Bn phi t kim tra gi tr ca SQL%NOTFOUND bit c c b li khng. x l NO_DATA_FOUND, vit mt on bt li (exception handler), thay v dng COUNT m s hng hin thi. Khi kim tra gi tr ca mt trng hoc mt bin bt li sai, kim tra trong PL/SQL code, ch khng phi trong mnh WHERE.

Cc trigger trong form : Kiu x l : Kiu x l cho tt c cc trigger mc block hay field nn l Overide ( ln trigger mc form) hoc Before (thc hin trc trigger mc form). Thng thng l s dng kiu Before, v phin bn trigger mc form cng cn c thc hin. Trng hp ngoi l l khi bn c mt li gi flexfield trong trigger POST-QUERY mc form, nhng bn t li query status ca block trong trigger POST-QUERY mc block, th bn nn t kiu x l cho trigger mc block l After. Trigger WHEN-CREATE-RECORD vn kch hot khi block khng cho php insert. V vy, nn kim tra xem 1 block c cho php insert khng trc khi thc hin x l no trong trigger ny :

Nhng s thay th cho cc built-in trong Oracle Forms Khng s dng CALL_FORM : v built-in ny khng tng thch vi OPEN_FORM (c s dng bi cc Oracle Application routine). S dng FND_FUNCTION.EXECUTE thay cho CALL_FORM hoc OPEN_FORM khi mun m form bng lp trnh.

22

Nhng Oracle Forms built-in sau c cc APPCORE routine tng ng vi chng : + EXIT_FORM : cc form Oracle Applications c x l ng c bit. Khng gi trc tip EXIT_FORM, m lun gi do_key(EXIT_FORM). ng ton b Oracle Applications, trc tin gi : copy(Y, GLOBAL.APPCORE_EXIT_FLAG); sau gi : do_key(EXIT_FORM); + SET_ITEM_PROPERTY : thay bng APP_ITEM_PROPERTY.SET_PROPERTY v APP_ITEM_PROPERTY.SET_VISUAL_ATTRIBUTE. Nhng APPCORE routine ny t cc thuc tnh trong Oracle Applications theo chun.C mt s thuc tnh s dng SET_ITEM_PROPERTY. + GET_ITEM_PROPERTY : s dng APP_ITEM_PROPERTY.GET_PROPERTY khi ly cc thuc tnh c th ca Oracle Applications. Khi t hoc ly cc thuc tnh cn li, s dng cc built-in ca Oracle Forms. + OPEN_FORM : s dng FND_FUNCTION.EXECUTE thay th. C 2 cch gi ny u lm cho cc trigger POST-RECORD v POST-BLOCK kch hot. + CLEAR_FORM : s dng do_key(CLEAR_FORM). Routine ny s bo li FORM_TRIGGER_FAILURE nu c 1 bn ghi khng hp l. + COMMIT : s dng do_key(COMMIT_FORM). Routine ny s bo li FORM_TRIGGER_FAILURE nu c 1 bn ghi khng hp l. + EDIT_FIELD / EDIT_TEXTITEM : s dng do_key(edit_field). Routine ny s gi calendar khi item hin ti l date. + VALIDATE : s dng APP_STANDARD.APP_VALIDATE thay th. Routine ny s chuyn focus n bt k item no lm pht sinh li navigation.

Lp trnh cc handler cho item, event v table : Ngi lp trnh c th gi cc handler (chng trnh x l) t trong trigger x l cc m cn thit validate mt item hoc m bo cho 1 hnh ng c thc hin ng trong tnh hung c th. 1 form in hnh c tng package cho mi block, v 1 package cho bn thn form. Lp trnh cho cc th tc trong mi package, v gi th tc (hay handler ) t cc trigger c lin quan. Vi handler lin quan n nhiu block hay p ng cho trigger mc form, t n vo trong package ca form.

23

Vic vit cc handler ( cho item, event, table ), v gi chng trong trigger s gip cho khi lng m trong trigger mc ti thiu.

Lp trnh cc handler cho item :Cc item handler l cc th tc cha ng tt c cc on m dng validate mt item c th no . Mt item handler package cha tt c cc th tc dng validate cc item trong 1 block hoc 1 form. Nn t tn package theo tn block ( hoc tn form ) v t tn cc th tc trong package theo tn cc item trong block (VD : block EMP, item EMPNO -> package EMP, procedure EMPNO) d xc nh code no i vi item no. Mi item handler lun c 1 tham s tn l EVENT, kiu l VARCHAR2, thng truyn tn ca trigger gi item handler . Cc EVENT thng dng v x l tng ng l : PRE-RECORD : t li cc item attribute cho bn ghi mi. EVENT ny thng c s dng cho cc APPCORE routine (loi enable hoc disable cc trng c lp). Bn cng c th dng WHEN-NEW-RECORD-INSTANCE ( thay cho PRERECORD ) trong mt vi trng hp. INIT : khi to ( initialize ) item. INIT ch th cho item handler kim tra cc iu kin hin ti ca form v t li cc gi tr mc nh v cc thuc tnh ng cho item nu cn thit. EVENT ny c gi i bi cc handler khc v l u vo cho nhiu APPCORE routine. Trng hp thng thng nht l khi 1 item ph thuc vo 1 item khc. Khi 1 master item thay i, handler ca item ph thuc s c gi vi s kin INIT. VALIDATE : c s dng vi nhiu APPCORE routine khi item cn c validate. S dng VALIDATE thay cho WHENVALIDATEITEM, WHEN CHECKBOXCHANGED, WHENLISTCHANGED, hoc WHENRADIO CHANGED.

24

Lp trnh cc handler cho event : Event handler thc hin cc hnh ng phc tp trn nhiu item c lin quan vi nhau, trong khi item handler thc hin cc hnh ng n gin trn 1 item. Trong event handler, ta c th gi cc item handler. Event handler ch x l 1 s kin ( trn nhiu item ), nn khng cn tham s EVENT, v cng khng cn bt k tham s no. Event handler c t tn theo trigger, nhng thay du gch ngang bng du gch di (VD: trigger PRE-QUERY -> handler PRE_QUERY). Mt s event handler thng dng : . PRE_QUERY : cung cp cc gi tr cn cho cc item ly c cc bn ghi mong mun. . POST_QUERY : cung cp gi tr cho cc item khng lin quan n bng d liu. . WHEN_CREATE_RECORD : cung cp cc gi tr mc nh khi to bn ghi mi ( khi m s dng thuc tnh default value l cha ) . WHEN_VALIDATE_RECORD : kim tra cc quan h phc tp c trong item.

Lp trnh cc handler cho table : Mt table handler l 1 server-side package hoc 1 client-side package cung cp mt API cho 1 bng. Cc table handler c s dng insert, update, delete hoc lock mt bn ghi, hoc kim tra xem 1 record bng khc c tham chiu n record trong bng ny ko. V hu ht cc form trong Oracle Applications u da trn cc view nn cn phi c cc table handler ny x l nhng tng tc vi cc bng c trong view.

25

Cc table handler cha mt vi hoc tt c cc th tc sau : . CHECK_UNIQUE : kim tra xem c gi tr lp trong ct unique hay khng . CHECK_REFERENCES : kim tra tnh ton vn tham chiu . INSERT_ROW . UPDATE_ROW . DELETE_ROW . LOCK_ROW

INSERT_ROW, UPDATE_ROW, DELETE_ROW v LOCK_ROW thng c s dng thay th x l giao dch mc nh ca Oracle Forms trong cc trigger ON-INSERT, ON-UPDATE, ON-DELETE v ON-LOCK.

Trong th tc x l bng INSERT_ROW, nu mt ct kho chnh cho php gi tr NULL, cn thm OR (primary_key IS NULL AND X_col IS NULL) vo mnh WHERE ca cu lnh SELECT ROWID.

Trong th tc x l bng LOCK_ROW, nu 1 ct khng c php NULL, g b iu kin OR (RECINFO.col IS NULL AND X_col IS NULL) ra khi lnh IF. Tc ng ln 1 bng th hai : thc hin 1 hnh ng trn 1 bng khc, gi th tc x l tng ng ca bng thay cho vic thc hin hnh ng trc tip. V d, trong th tc DELETE_ROW ca bng master, ta xo bn ghi master v gi th tc DELETE_ROW ca bng detail xo cc bn ghi detail tng ng, ch khng thc hin lnh DELETE trc tip xo chng trong handler ca master.

V d v client-side table handler : handler ny cung cp cc th tc INSERT_ROW, UPDATE_ROW, DELETE_ROW, and LOCK_ROW cho bng EMP. Bn lp trnh clientside table handler trc tip trong form

Package spec you would code for your EMP block PACKAGE EMP IS PROCEDURE Insert_Row; PROCEDURE Lock_Row; PROCEDURE Update_Row; PROCEDURE Delete_Row; END EMP; Package body you would code for your EMP block PACKAGE BODY EMP IS PROCEDURE Insert_Row IS

26

CURSOR C IS SELECT rowid FROM EMP WHERE empno = :EMP.Empno; BEGIN INSERT INTO EMP( empno, ename, job, mgr, hiredate, sal, comm, deptno ) VALUES ( :EMP.Empno, :EMP.Ename, :EMP.Job, :EMP.Mgr, :EMP.Hiredate, :EMP.Sal, :EMP.Comm, :EMP.Deptno ); OPEN C; FETCH C INTO :EMP.Row_Id; if (C%NOTFOUND) then CLOSE C; Raise NO_DATA_FOUND; end if; CLOSE C; END Insert_Row; PROCEDURE Lock_Row IS

27

Counter NUMBER; CURSOR C IS SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM EMP WHERE rowid = :EMP.Row_Id FOR UPDATE of Empno NOWAIT; Recinfo C%ROWTYPE; BEGIN Counter := 0; LOOP BEGIN Counter := Counter + 1; OPEN C; FETCH C INTO Recinfo; if (C%NOTFOUND) then CLOSE C; FND_MESSAGE.Set_Name(FND, FORM_RECORD_DELETED); FND_MESSAGE.Error; Raise FORM_TRIGGER_FAILURE; end if; CLOSE C; if ( (Recinfo.empno = :EMP.Empno)

28

AND ( (Recinfo.ename = :EMP.Ename) OR ( (Recinfo.ename IS NULL) AND (:EMP.Ename IS NULL))) AND ( (Recinfo.job = :EMP.Job) OR ( (Recinfo.job IS NULL) AND (:EMP.Job IS NULL))) AND ( (Recinfo.mgr = :EMP.Mgr) OR ( (Recinfo.mgr IS NULL) AND (:EMP.Mgr IS NULL))) AND ( (Recinfo.hiredate = :EMP.Hiredate) OR ( (Recinfo.hiredate IS NULL) AND (:EMP.Hiredate IS NULL))) AND ( (Recinfo.sal = :EMP.Sal) OR ( (Recinfo.sal IS NULL) AND (:EMP.Sal IS NULL))) AND ( (Recinfo.comm = :EMP.Comm) OR ( (Recinfo.comm IS NULL) AND (:EMP.Comm IS NULL))) AND (Recinfo.deptno = :EMP.Deptno) ) then return; else FND_MESSAGE.Set_Name(FND, FORM_RECORD_CHANGED); FND_MESSAGE.Error; Raise FORM_TRIGGER_FAILURE; end if; EXCEPTION When APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION then IF (C% ISOPEN) THEN close C;

29

END IF; APP_EXCEPTION.Record_Lock_Error(Counter); END; end LOOP; END Lock_Row; PROCEDURE Update_Row IS BEGIN UPDATE EMP SET empno = :EMP.Empno, ename = :EMP.Ename, job = :EMP.Job, mgr = :EMP.Mgr, hiredate = :EMP.Hiredate, sal = :EMP.Sal, comm = :EMP.Comm, deptno = :EMP.Deptno WHERE rowid = :EMP.Row_Id; if (SQL%NOTFOUND) then Raise NO_DATA_FOUND; end if; END Update_Row; PROCEDURE Delete_Row IS BEGIN DELETE FROM EMP WHERE rowid = :EMP.Row_Id; if (SQL%NOTFOUND) then Raise NO_DATA_FOUND; end if; END Delete_Row; END EMP;

30

- V d v server-side table handler : handler ny cung cp cc th tc INSERT_ROW, UPDATE_ROW, DELETE_ROW v LOCK_ROW cho bng EMP. Handler ca bn s bao gm 1 package trong form v 1 serverside package trong c s d liu. Package trong form s gi severside package v truyn tt c gi tr ca cc trng nh l cc i s.

Package spec you would code in your form for your EMP block PACKAGE EMP IS PROCEDURE Insert_Row; PROCEDURE Update_Row; PROCEDURE Lock_Row; PROCEDURE Delete_Row; END EMP; Package body you would code in your form for your EMP block PACKAGE BODY EMP IS PROCEDURE Insert_Row IS BEGIN EMP_PKG.Insert_Row( X_Rowid => :EMP.Row_Id, X_Empno => :EMP.Empno, X_Ename => :EMP.Ename, X_Job => :EMP.Job, X_Mgr => :EMP.Mgr, X_Hiredate => :EMP.Hiredate, X_Sal => :EMP.Sal, X_Comm => :EMP.Comm, X_Deptno => :EMP.Deptno); END Insert_Row; PROCEDURE Update_Row IS BEGIN31

EMP_PKG.Update_Row( X_Rowid => :EMP.Row_Id, X_Empno => :EMP.Empno, X_Ename => :EMP.Ename, X_Job => :EMP.Job, X_Mgr => :EMP.Mgr, X_Hiredate => :EMP.Hiredate, X_Sal => :EMP.Sal, X_Comm => :EMP.Comm, X_Deptno => :EMP.Deptno); END Update_Row; PROCEDURE Delete_Row IS BEGIN EMP_PKG.Delete_Row(:EMP.Row_Id); END Delete_Row; PROCEDURE Lock_Row IS Counter Number; BEGIN Counter := 0; LOOP BEGIN Counter := Counter + 1; EMP_PKG.Lock_Row( X_Rowid => :EMP.Row_Id, X_Empno => :EMP.Empno, X_Ename => :EMP.Ename, X_Job => :EMP.Job, X_Mgr => :EMP.Mgr, X_Hiredate => :EMP.Hiredate, X_Sal => :EMP.Sal, X_Comm => :EMP.Comm,

32

X_Deptno => :EMP.Deptno); return; EXCEPTION When APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION then APP_EXCEPTION.Record_Lock_Error(Counter); END; end LOOP; END Lock_Row; END EMP; Package spec for the serverside table handler (SQL script) SET VERIFY OFF DEFINE PACKAGE_NAME=EMP_PKG WHENEVER SQLERROR EXIT FAILURE ROLLBACK; CREATE or REPLACE PACKAGE &PACKAGE_NAME as /* Put any header information (such as $Header$) here. It must be written within the package definition so that the header information will be available in the package itself. This makes it easier to identify package versions during upgrades. */ PROCEDURE Insert_Row(X_Rowid IN OUT VARCHAR2, X_Empno NUMBER, X_Ename VARCHAR2, X_Job VARCHAR2, X_Mgr NUMBER, X_Hiredate DATE, X_Sal NUMBER, X_Comm NUMBER, X_Deptno NUMBER ); PROCEDURE Lock_Row(X_Rowid VARCHAR2, X_Empno NUMBER,

33

X_Ename VARCHAR2, X_Job VARCHAR2, X_Mgr NUMBER, X_Hiredate DATE, X_Sal NUMBER, X_Comm NUMBER, X_Deptno NUMBER ); PROCEDURE Update_Row(X_Rowid VARCHAR2, X_Empno NUMBER, X_Ename VARCHAR2, X_Job VARCHAR2, X_Mgr NUMBER, X_Hiredate DATE, X_Sal NUMBER, X_Comm NUMBER, X_Deptno NUMBER ); PROCEDURE Delete_Row(X_Rowid VARCHAR2); END &PACKAGE_NAME; / show errors package &PACKAGE_NAME SELECT to_date(SQLERROR) FROM user_errors WHERE name = &PACKAGE_NAME AND type = PACKAGE / commit; exit; Package body for the serverside table handler (SQL script) SET VERIFY OFF DEFINE PACKAGE_NAME=EMP_PKG

34

WHENEVER SQLERROR EXIT FAILURE ROLLBACK; CREATE or REPLACE PACKAGE BODY &PACKAGE_NAME as /* Put any header information (such as $Header$) here. It must be written within the package definition so the header information is available in the package itself. This makes it easier to identify package versions during upgrades. */ PROCEDURE Insert_Row(X_Rowid IN OUT VARCHAR2, X_Empno NUMBER, X_Ename VARCHAR2, X_Job VARCHAR2, X_Mgr NUMBER, X_Hiredate DATE, X_Sal NUMBER, X_Comm NUMBER, X_Deptno NUMBER ) IS CURSOR C IS SELECT rowid FROM emp WHERE empno = X_Empno; BEGIN INSERT INTO emp( empno, ename, job, mgr, hiredate, sal, comm, deptno ) VALUES ( X_Empno,

35

X_Ename, X_Job, X_Mgr, X_Hiredate, X_Sal, X_Comm, X_Deptno ); OPEN C; FETCH C INTO X_Rowid; if (C%NOTFOUND) then CLOSE C; Raise NO_DATA_FOUND; end if; CLOSE C; END Insert_Row; PROCEDURE Lock_Row(X_Rowid VARCHAR2, X_Empno NUMBER, X_Ename VARCHAR2, X_Job VARCHAR2, X_Mgr NUMBER, X_Hiredate DATE, X_Sal NUMBER, X_Comm NUMBER, X_Deptno NUMBER ) IS CURSOR C IS SELECT * FROM emp WHERE rowid = X_Rowid FOR UPDATE of Empno NOWAIT;

36

Recinfo C%ROWTYPE; BEGIN OPEN C; FETCH C INTO Recinfo; if (C%NOTFOUND) then CLOSE C; FND_MESSAGE.Set_Name(FND, FORM_RECORD_DELETED); APP_EXCEPTION.Raise_Exception; end if; CLOSE C; if ( (Recinfo.empno = X_Empno) AND ( (Recinfo.ename = X_Ename) OR ( (Recinfo.ename IS NULL) AND (X_Ename IS NULL))) AND ( (Recinfo.job = X_Job) OR ( (Recinfo.job IS NULL) AND (X_Job IS NULL))) AND ( (Recinfo.mgr = X_Mgr) OR ( (Recinfo.mgr IS NULL) AND (X_Mgr IS NULL))) AND ( (Recinfo.hiredate = X_Hiredate) OR ( (Recinfo.hiredate IS NULL) AND (X_Hiredate IS NULL))) AND ( (Recinfo.sal = X_Sal) OR ( (Recinfo.sal IS NULL) AND (X_Sal IS NULL))) AND ( (Recinfo.comm = X_Comm) OR ( (Recinfo.comm IS NULL) AND (X_Comm IS NULL))) AND (Recinfo.deptno = X_Deptno)

37

) then return; else FND_MESSAGE.Set_Name(FND, FORM_RECORD_CHANGED); APP_EXCEPTION.Raise_Exception; end if; END Lock_Row; PROCEDURE Update_Row(X_Rowid VARCHAR2, X_Empno NUMBER, X_Ename VARCHAR2, X_Job VARCHAR2, X_Mgr NUMBER, X_Hiredate DATE, X_Sal NUMBER, X_Comm NUMBER, X_Deptno NUMBER ) IS BEGIN UPDATE emp SET empno = X_Empno, ename = X_Ename, job = X_Job, mgr = X_Mgr, hiredate = X_Hiredate, sal = X_Sal, comm = X_Comm, deptno = X_Deptno WHERE rowid = X_Rowid; if (SQL%NOTFOUND) then Raise NO_DATA_FOUND;

38

end if; END Update_Row; PROCEDURE Delete_Row(X_Rowid VARCHAR2) IS BEGIN DELETE FROM emp WHERE rowid = X_Rowid; if (SQL%NOTFOUND) then Raise NO_DATA_FOUND; end if; END Delete_Row; END &PACKAGE_NAME; / show errors package body &PACKAGE_NAME SELECT to_date(SQLERROR) FROM user_errors WHERE name = &PACKAGE_NAME AND type = PACKAGE BODY / commit; exit;

39

Form TEMPLATEGii thiu v form TEMPLATE : Form TEMPLATE l im khi u cn c i vi mi s pht trin form mi. Bt u to 1 form mi bng cch copy form TEMPLATE v 1 th mc trong my ri thay tn n bng mt tn form mi Form TEMPLATE bao gm : Cc tham chiu ti cc nhm i tng trong form APPSTAND (STANDARD_PC_AND_VA, STANDARD_CALENDAR) Cc kt ni (attachment) n mt s th vin (FNDSQF, APPCORE, v APPDAYPK) Mt s trigger mc form cn phi thm code. Cc n v chng trnh, trong c package APP_CUSTOM (specification v body), cha cc hnh ng mc nh cho cc s kin ng v m window. Bn thng phi sa code trong package ny khi pht trin form theo yu cu. Bng mu ca ng dng Rt nhiu i tng c tham chiu ( nm trong cc nhm i tng ), h tr cho calendar, toolbar, alternative region v menu. V d nh cc LOV, block, parameter, property class. Mt s i tng v d a ra cc item v layout in hnh. b chng i, xa cc i tng sau trong form : Block : BLOCKNAME, DETAILBLOCK Canvas : BLOCKNAME Window : BLOCKNAME STANDARD_TOOLBAR, v

Cc th vin trong form TEMPLATE Form TEMPLATE cha cc attachment n mt s th vin. 3 th vin c attach trc tip l : FNDSQF, APPCORE, APPDAYPK. Cc th vin khc c attach n 3 th vin ny. Trong Oracle Forms, ta khng bit c th vin c attach theo kiu no.

40

Th vin APPCORE : Cha cc th tc nm trong cc package m mi form u cn h tr menu, toolbar, v cc hnh ng chun theo yu cu. Cha cc package c gi lu cc hnh ng c th khi ang chy ng dng. Cha cc package cung cp cc th tc x l li, thng bo theo cc mc Cc package trong APPCORE thng c tn bt u bng APP.

Th vin APPDAYPK : cha cc package x l tnh nng Oracle Applications Calendar. Th vin FNDSQF : Cha cc th tc v package cho Message Dictionary, flexfield, profile, x l ng thi (concurrent processing). Cung cp cc tin ch cho navigation, multicurrency, WHO Cc package trong FNDSQF thng c tn bt u bng FND.

Th vin CUSTOM : Th vin CUSTOM cho php m rng cc form ca Oracle Applications m khng phi thay i code trong Oracle Applications. Bn c th s dng th vin CUSTOM customize, p t cc quy tc (chng hn tn hng phi vit hoa), hoc disable nhng trng khng cn. Bn vit code trong th vin CUSTOM, bn trong nhng procedure shell c cung cp. Oracle Applications gi cc s kin ti th vin CUSTOME. Nhng on code bn vit c hiu lc da vo nhng s kin ny.

Th vin GLOBE : cho php ngi pht trin Oracle Applications tp hp cc tnh nng chung hoc ring vo trong form Oracle Applications m khng phi thay i form Oracle Applications gc. Oracle Applications gi cc s kin ti th vin GLOBE. Cc on code bn trong c hiu lc da vo cc s kin ny. Th vin GLOBE gi n cc routine trong cc th vin JA, JE v JL.

Th vin JA : cha code c trng cho khu vc Asia/Pacific v c gi bi th vin GLOBE. Th vin JE : cha code c trng cho khu vc EMEA (Europe/Middle East/Africa) v c gi bi th vin GLOBE. Th vin JL : cha code c trng cho khu vc Latin America v c gi bi th vin GLOBE.

41

Cc trigger trong form TEMPLATE Form TEMPLATE cha mt s trigger mc form. Cc trigger ny cn phi c cc routine khc hot ng ng. Text trong trigger thng c gi nguyn, ngi s dng s thm cc on text ca mnh vo trc hoc sau chng. Cc trigger chun : KEYCLRFRM KEYCOMMIT KEYDUPREC KEYEDIT KEYEXIT KEYHELP KEYLISTVAL KEYMENU ONERROR POSTFORM PREFORM WHENFORMNAVIGATE WHENNEWBLOCKINSTANCE WHENNEWFORMINSTANCE WHENNEWITEMINSTANCE WHENNEWRECORDINSTANCE WHENWINDOWCLOSED WHENWINDOWRESIZED Cc trigger do ngi dng nh ngha : ACCEPT CLOSE_THIS_WINDOW CLOSE_WINDOW EXPORT FOLDER_ACTION FOLDER_RETURN_ACTION LASTRECORD MENU_TO_APPCORE QUERY_FIND STANDARD_ATTACHMENTS

42

ZOOM Cc trigger thng phi chnh sa : ACCEPT APP_STANDARD.EVENT(ACCEPT); Trigger ny x l chc nng Action, Save and Proceed trn menu hoc toolbar. N lu nhng thay i v chuyn ti bn ghi tip theo ca block c xc nh l First Navigation Block. Thay th code trong trigger ny, hoc to trigger mc block vi kiu x l l Override

FOLDER_RETURN_ACTION null; Trigger ny cho php customize cc folder event xc nh. Thay th text bi code cn thit x l cc hnh ng cho folder.

KEYDUPREC APP_STANDARD.EVENT(KEYDUPREC); Trigger ny disable tnh nng nhn i bn ghi mc nh ca Oracle Forms. x l tnh nng Edit, Duplicate Record Above trn menu c ng, to 1 trigger KEYDUPREC mc block vi kiu x l Override. Vit code cho trigger ny n thc hin vic nhn i bn ghi, sau validate hoc xo cc trng cn thit.

KEYCLRFRM APP_STANDARD.EVENT(KEYCLRFRM); Trigger ny validate bn ghi trc khi th xo form. Thm code cn thit bn di code c sn. Thng th bn s thm cc li gi GO_BLOCK nu c cc alternative region trong form ca bn, v cung cp li cc gi tr cho region control poplist ca bn sau hnh ng Clear Form. KEYMENU

43

APP_STANDARD.EVENT(KEYMENU); Trigger ny disable lnh Block Menu ca Oracle Forms. enable hot ng ca Alternative Region bng bn phm t 1 block c th, to trigger KEYMENU mc block vi kiu x l l Override. Trigger ny nn m ra 1 LOV vi cc s la chn ging nh Alternative Region control poplist.

KEYLISTVAL APP_STANDARD.EVENT(KEYLISTVAL); Trigger ny thc hin cc hot ng ca flexfield hoc gi LOV. To trigger mc block hoc item vi kiu x l Override trn cc trng s dng i tng Calendar, hoc cc trng gi flexfield khi chng trnh ang chy. ONERROR APP_STANDARD.EVENT(ONERROR); Trigger ny x l tt c cc li, t server hoc t client, s dng cc li gi ca Message Dictionary. by cc li c th, kim tra cc li c th bn mc trc khi gi APP_STANDARD declare original_mess varchar2(80); begin IF MESSAGE_CODE = THEN original_mess := MESSAGE_TYPE|||| to_char(MESSAGE_CODE)||: ||MESSAGE_TEXT; your code handling the error goes here message(original_mess); ELSE APP_STANDARD.EVENT(ON_ERROR); END IF end; POSTFORM APP_STANDARD.EVENT(POSTFORM); Trigger ny c dnh cho nhng s dng trong tng lai.

44

Thm code cn thit vo trc code c sn.

PREFORM FND_STANDARD.FORM_INFO($Revision: $, , , $Date: $, $Author: $); APP_STANDARD.EVENT(PREFORM); APP_WINDOW.SET_WINDOW_POSITION(BLOCKNAME, FIRST_WINDOW); Trigger ny khi to cc gi tr bn trong Oracle Applications v menu. Cc gi tr bn nhp vo s c nhn thy khi chn Help, About Oracle Applications t menu ca Oracle Applications. Bn phi sa li short name ca Application. Application Shortname iu khin file tr gip online no ca Application c truy cp khi ngi dng chn nt Help trn toolbar. Form name l tn form ca ngi dng. N ch c mc ch bn tham kho, v khng c s dng ch no khc na. Oracle s dng 1 h thng iu khin m ngun cho php t ng cp nht cc gi tr bt u vi $. Bn cng phi sa li gi APP_WINDOW a tn block ca bn vo.

QUERY_FIND APP_STANDARD.EVENT(QUERY_FIND); Trigger ny a ra 1 thng bo mc nh cho bit Query Find khng c dng. Sa code trong trigger ny, hoc to trigger mc block vi kiu x l Override khi bn to 1 Find Window hoc 1 Row-LOV trong form ca bn WHENNEWFORMINSTANCE

45

FDRCSID($Header: ... $); APP_STANDARD.EVENT(WHENNEWFORM INSTANCE); app_folder.define_folder_block(template test, folder_block, prompt_block, stacked_canvas, window, disabled functions); app_folder.event(VERIFY); Li gi APP_STANDARD.EVENT trong trigger ny h tr ch query-only c gi bi FND_FUNCTION.EXECUTE. Li gi FDRCSID h tr h thng iu khin m ngun ca Oracle Applications. Cc li gi APP_FOLDER ch cho cc s dng bn trong ca Oracle Applications. Cc custom form khng cn n FDRCSID hay APP_FOLDER, nhng gi li chng trong trigger cng khng nh hng g. Thm nhng code cn thit trc code c. WHENNEWRECORDINSTANCE APP_STANDARD.EVENT(WHENNEWRECORD INSTANCE); Trigger ny qun l trng thi ca menu v toolbar ca Oracle Applications To trigger mc block nu cn ( kiu x l Before ) WHENNEWBLOCKINSTANCE APP_STANDARD.EVENT(WHENNEWBLOCK INSTANCE); Trigger ny qun l trng thi ca menu v toolbar ca Oracle Applications To trigger mc block nu cn ( kiu x l Before ) WHENNEWITEMINSTANCE APP_STANDARD.EVENT(WHENNEWITEMINSTANCE); Trigger ny qun l trng thi ca menu v toolbar ca Oracle Applications Nu thm vo 1 li gi n flexfields routine, thm n vo trc li gi APP_STANDARD.EVENT. Ni chung khng nn thm cc code khc vo trong trigger ny, v s tc ng n mi item trong form. Nu cn th to 1 trigger mc block hoc item vi kiu x l l Before.

46

Cc trigger khng c chnh sa CLOSE_THIS_WINDOW Trigger ny gi APP_CUSTOM.CLOSE_WINDOW khi chn Action > Close Window trn menu. CLOSE_WINDOW APP_CUSTOM.CLOSE_WINDOW(:SYSTEM.EVENT_WINDO W); Trigger ny x l tt c cc s kin ng window. Cc code x l nm trong package APP_CUSTOM.CLOSE_WINDOW

EXPORT app_standard.event(EXPORT); Trigger ny x l li gi Action, Export t menu FOLDER_ACTION app_folder.event(:global.folder_action); Trigger ny x l khi gi cc mc trn menu Folder. KEYCOMMIT APP_STANDARD.EVENT(KEYCOMMIT); Trigger ny x l cc commit trong cc form bnh thng hoc cc form c gi. KEYEDIT APP_STANDARD.EVENT(KEYEDIT); Trigger ny thc hin cc hot ng ca flexfield, hoc gi Calendar hay Editor. KEYEXIT APP_STANDARD.EVENT(KEYEXIT); Trigger ny x l cc s kin Close v ri khi ch enter-query. KEYHELP APP_STANDARD.EVENT(KEYHELP); Trigger ny gi h thng Window Help. LASTRECORD APP_STANDARD.EVENT(LASTRECORD);

47

Trigger ny x l s kin menu Go>Last Record.

MENU_TO_APPCORE APP_STANDARD.EVENT(:global.menu_to_appcore); Trigger ny h tr menu Special

STANDARD_ATTACHMENTS atchmt_api.invoke; Trigger ny x l li gi ca mc menu Attachments hoc ca nt Attachments trn toolbar.

WHENWINDOWCLOSED execute_trigger(CLOSE_WINDOW); Trigger ny tp trung cc s kin ng window t Oracle Applications hoc menu Window Manager.

WHENFORMNAVIGATE Bn khng th sa trigger ny. N enable cc hnh ng tiu chun chnh, nh normalize 1 form ang c minimize khi form ny c navigate. s dng s kin form ny, gn cho bin global c tn l GLOBAL.WHEN_FORM_NAVIGATE gi tr l tn ca 1 trigger do ngi dng nh ngha. Thng th vic gn ny c thc hin ngay trc khi gi GO_FORM.

ZOOM appcore_custom.event(ZOOM); Trigger ny x l li gi ca mc menu Action, Zoom hoc ca nt trn toolbar.

48

Thit lp cc thuc tnh ca cc i tng cha(ContainerObject)Cc i tng cha : module window ( modal v non-modal ) canvas ( content v stacked ) block region

Module : Lp thuc tnh : form TEMPLATE t ng p dng lp thuc tnh MODULE cho module. Cc thit lp cho lp ny bin i ty theo nn GUI. Tn module : tn module phi ging tn form. VD : tn module l GL01 th tn form l GL01.fmb Thuc tnh First Navigation Data Block : t cho thuc tnh ny tn ca block u tin m ngi s dng tip xc khi form chy. ( khng t theo tn ca block WORLD hay block CONTROL ). Thuc tnh ny cng quy nh im n ca con tr sau CLEAR_FORM hoc sau hnh ng Action -> Save and Proceed mc nh.

Window : Window s t ng k tha cc chun giao din ca nn GUI m chng ang chy trn t form APPSTAND ( nh cc tnh nng ca frame, cc font trn title bar, cc nt qun l window ).

49

ROOT_WINDOW l mt window c bit, khng c s dng v s lm nh hng n toolbar v cc i tng chun khc ca Oracle Application. Non-modal Window : cho php ngi s dng tng tc vi cc window khc, vi thanh cng c hay menu. Non-modal Window c dng th hin hu ht cc thnh phn trong ng dng. . Lp thuc tnh : mi non-modal window u p dng lp thuc tnh WINDOW. . Thuc tnh Primary Canvas : nhp vo tn content canvas gn vi window ny. . Xc nh ta ( X,Y ) : lp trnh nh v ta window trong th tc APP_CUSTOM.OPEN_WINDOW. . Tiu ( Title ) : c th thit lp thay i ty theo ni dung window hin th. . Kch thc : kch thc ti a ca window l 7.8 x 5 ( rng x cao ) inches. . ng window : Bn phi lp trnh thc hin hnh ng ng window. ng window u tin ca mt form s ng li ton b form v cc hnh ng khc. Lp trnh hnh ng ng ny trong th tc APP_CUSTOM.CLOSE_WINDOW. . M window : nu bn c on m no mun c thc hin khi m window, t n trong th tc APP_CUSTOM.OPEN_WINDOW. Bn phi thm on m iu khin ta block v nh v window. Khi chuyn n mt khi no y ( bng GO_BLOCK ), window cha block s t ng m ra. . Nu mun tt ( disable ) chc nng no ca menu, s dng APP_SPECIAL.

Modal Window : buc ngi s dng ch thao tc trong ca s (khng th tng tc c vi cc ca s khc), sau khi chp nhn hoc hu b nhng thay i thc hin mi thot c ra khi ca s. . Lp thuc tnh : s dng lp thuc tnh WINDOW_DIALOG to mt modal window. . Thuc tnh Primary Canvas : nhp vo tn content canvas gn vi window ny. . V tr window : modal window khi m lun chnh gia mn hnh

50

. ng window : modal window c th ng bng c ch ng ca s GUI ( kch chut vo c du X gc trn bn phi ) hoc ng bng lp trnh.

Canvas : Content Canvas : . Lp thuc tnh : CANVAS . Kch thc : nn t kch thc canvas bng vi kch thc window cha n. Stacked Canvas : . Lp thuc tnh : CANVAS_STACKED . Thuc tnh Raise on Entry lun t l Yes

Block : Lp thuc tnh : BLOCK ( vi nhng block trn non-modal window ), BLOCK_DIALOG ( vi nhng block trn modal window ). Nu block da trn mt bng hoc mt view n ( view trn mt bng ), t thuc tnh Key-Mode l Unique. Nu block da trn view lin kt ( view trn nhiu bng ), t Update Allowed l No. Phi c t nht mt item trong block c nh du l primary key ( t thuc tnh Primary Key ca n l Yes ). t thuc tnh Delete Allowed l No khng cho xo trong block. Next and Previous Navigation Data Block : t cc thuc tnh ny ca khi bng tn cc khi c th t duyt sau ( next ) v trc ( previous ) khi . Vi khi u tin, previous l chnh n, vi khi sau cng, next l chnh n. Context Block : c th hin trong cc detail window, cung cp ng cnh v sao chp cc trng c th hin trong master window. to 1 context block, to cc display item trong cng block ging nh master block v ng b trng context theo trng master. Dialog Block : c th hin trong modal window, i hi user phi tng tc vi chng trc khi chuyn qua ca s khc.

51

X l cc KEY trigger : mc d trong modal window khng th tng tc vi menu v toolbar, ta vn c th gi mt s tnh nng bng nhn mt s phm chc nng trn bn phm. trnh iu ny, ta disable cc Key trigger cho block bng cch lp trnh mt KEY-OTHERS trigger gi APP_EXCEPTION.DISABLED tt mi chc nng. Sau , ta c th cho php mt vi chc nng c th c thc hin bng vic lp trnh li mt s KEY trigger, nh :

( Vi block cho php nhiu bn ghi )

. Ta cng c th enable cho cc KEY - trigger ca block, v ch disable mt s bng cch gi APP_EXCEPTION.DISABLED trong nhng KEY trigger no ta mun disable. . Navigation ( iu hng ): ngn cn vic chuyn focus ra bn ngoi modal window bng cch : khng c t Navigation Style l Change Data Block, next v previous ca block t l chnh block .

52

Data Block khng c bng c s ( base table ) : s dng cc trigger giao dch ( ON-INSERT, ON-LOCK ) nu cc block ny phi x l commit. Data Block mt bn ghi : cho php user xem c cc bn ghi ca mt thc th, nhng ti mi thi im ch nhn thy mt bn ghi. Data Block nhiu bn ghi : cho php user xem c cc bn ghi ca mt thc th, nhng ti mi thi im c th thy nhiu bn ghi. . To Current Record Indicator : to mt text item trong block khng c detail block ng vi n. Thit lp lp thuc tnh cho n l CURRENT_RECORD_INDICATOR v to trigger WHEN-NEWITEM-INSTANCE cho n, trong trigger gi GO_ITEM(tn_block.tn_field). Mi ln indicator ny c click th con tr s chuyn n trng u tin ca bn ghi tng ng. . To Drill-down Indicator : tng t nh Current Record Indicator nhng l cho block c mt hoc nhiu detail block ng vi n.

Combination Block : mt kiu nh dng cc trng lai gia kiu nh dng n bn ghi v a bn ghi, trong mi kiu nh dng tn ti trn window ring ca chng, nhng tt c cc trng ca c 2 kiu nh dng nm trong cng mt block.

Quan h Master Detail : . t thuc tnh Coordination l Prevent Masterless Operation cc bn ghi chi tit lun lun tng ng vi bn ghi chnh ca n. . t thuc tnh Master Deletes l Non-Isolated nu khng cho php xa cc bn ghi c master table v detail table, Isolated nu ch cho xo bng master, v Cascading nu cho php xo c 2 bng. Tuy nhin khng nn s dng Cascading m nn dng Isolated xa bng master, sau vit mt th tc cho bng master thc hin lnh xo cc bn ghi detail tng ng. . Nu ( master ) block u tin ca form khng t ng truy vn, gi do_key(execute_query); INSTANCE. trong trigger WHEN-NEW-FORM-

53

Thit lp thuc tnh WHERE Clause ng : mi ln truy vn a vo iu kin lc khc nhau.

Region : Region l 1 nhm cc trng ( field ). Hu ht cc region ch n thun l s trnh by thm m, v nh mt frame ( box ) bao ly nhm cc trng lin quan, hoc mt frame ( line ) k bn trn nhm cc trng c quan h vi nhau. Khi con tr trong mt region, n s duyt theo th t i qua tt c cc item trong region trc khi chuyn qua cc field khc ngoi region. . Tabbed Region : xut hin trn tab canvas . Alternative Region : xut hin trn stacked canvas . Overflow Region

54

Thit lp cc thuc tnh ca cc i tng WidgetText Item : Cc lp i tng : TEXT_ITEM : thng dng nht TEXT_ITEM_DISPLAY_ONLY : dng cho cc trng khng cho php ngi dng nhp vo TEXT_ITEM_MULTILINE TEXT_ITEM_DATE : dng cho cc trng date

Thuc tnh Query Length : thit lp di cho xu truy vn. WHEN-VALIDATE-ITEM : trigger ny kch hot khi gi tr ca trng c s thay i. Cc trng date : Cc trng date ngi dng nhp vo nn s dng Calendar. Kiu d liu : DATE ( user khng cn nhp gi pht ) , DATETIME ( user phi nhp c ngy v gi pht ), TIME ( user ch c nhp gi ). t gi tr mc nh cho trng bng ngy hin ti m khng tnh n gi bng $$DBDATE$$, t gi tr bng c ngy v gi hin ti bng $$DBDATETIME$$, t gi tr bng gi hin ti m b qua ngy bng $$DBTIME$$. di trng : 11 k t ( ch nhp ngy ) v 20 k t ( nhp c ngy v gi ). Oracle Forms mc nh kiu nh dng ( format ) ca trng da

55

theo bin mi trng NLS_DATE_FORMAT. Validation trng date : nn validate trng date mc bn ghi thay v mc item, n s gip vic sa li d hn.

Display Item :Khng cho php ngi s dng tng tc vi n, ch n thun hin th d liu v khng nhn focus. Lp thuc tnh : DYNAMIC_TITLE, DYNAMIC_PROMPT, DISPLAY_ITEM

Poplist : lu d liu di dng danh sch ( kch c nh ) cc gi tr c th. Lp thuc tnh : LIST Gii hn : rng ca mt phn t list ti a l 30 k t. C th tha i ni dung phn t trong list khi chy

Option Group :Lp thuc tnh : RADIO_GROUP ( cho nhm ) v RADIO_BUTTON ( cho cc i tng trong nhm )

Check Box :Lp thuc tnh : CHECKBOX ( thng dng ), CHECKBOX_COORDINATION ( cho check box ta ).

Button ( Nt ) : Nt c th l nt ch, hoc nt hnh. Nt nn c t cng block vi cc i tng m n tng tc. Lp thuc tnh : BUTTON ( nt ch ) , BUTTON_ICONIC ( nt hnh ) Nt hnh khng th kch hot t bn phm. Hu ht cc nt khng th kch hot trong ch Enter-Query Cc nt nn gi APP_STANDARD.APP_VALIDATE v truyn mt scope ( vng validate ) trc khi thc hin hnh ng ca chng. iu ny m bo cc bn ghi c kim tra tnh hp l trc khi hnh ng c thc hin, v nt thc hin hnh ng trn block m n mong mun.

56

List of Values ( LOV ) Lp thuc tnh : LOV Nn to LOV theo view. t title cho LOV theo tn i tng m n cha. rng ct phi th hin gi tr trng. Nu mt item c LOV, c th t thuc tnh Validate from List ca n l Yes ch chp nhn nhng gi tr nhp vo c trong LOV. LOV lun t cp nht nhng gi tr mi mi khi c gi, t Automatic Refresh l Yes. Nu LOV c nhiu bn ghi, t Filter Before Display l Yes nhc user gii hn phm vi tm kim mi ln gi LOV. gi c LOV trong ch Enter-Query, to 1 trigger KEY-LISTVAL trn i tng gi LOV:

Trong ch Enter-Query, gi tr tr v ca LOV phi c tr v trng m t LOV c gi

Thit lp cc thuc tnh cho item : S dng APP_ITEM_PROPERTY.SET_PROPERTY : dng thit lp cc thuc tnh : ALTERABLE, ALTERABLE_PLUS, ENTERABLE, DISPLAYED, ENABLED, REQUIRED. Cc thuc tnh khc dng th tc gc

SET_ITEM_PROPERTY ca Oracle Form. Thuc tnh ALTERABLE cho php ( hoc khng cho php ) thay i mt instance ( hng ) ca item mc cho bn ghi l mi hoc l bn ghi truy vn t CSDL. . Th tc : app_item_property.set_property ( itemid, ALTERABLE, PROPERTY_ON); tng ng vi set_item_instance_property(itemid, INSERT_ALLOWED, PROPERTY_ON); set_item_instance_property(itemid, CURRENT_RECORD, UPDATEABLE, PROPERTY_ON); set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON); set_item_property(itemid, UPDATEABLE, PROPERTY_ON); CURRENT_RECORD,

57

. Th tc : app_item_property.set_property(itemid, ALTERABLE,PROPERTY_OFF); tng ng vi set_item_instance_property(itemid, INSERT_ALLOWED, PROPERTY_OFF); set_item_instance_property(itemid, CURRENT_RECORD, UPDATEABLE, PROPERTY_OFF); CURRENT_RECORD,

Thuc tnh ALTERABLE_PLUS cho php hoc khng cho php thay i tt c cc instance ( hng ) ca item, mc cho bn ghi l mi hoc c truy vn t c s d liu. . Th tc : app_item_property.set_property(itemid, PROPERTY_ON); tng ng vi : set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON); set_item_property(itemid, UPDATEABLE, PROPERTY_ON); . Th tc : app_item_property.set_property(itemid, PROPERTY_OFF); tng ng vi : set_item_property(itemid, INSERT_ALLOWED, PROPERTY_OFF); set_item_property(itemid, UPDATEABLE, PROPERTY_OFF); ALTERABLE_PLUS, ALTERABLE_PLUS,

Thuc tnh ENTERABLE dng enable hoc disable mt instance ca item, l s m rng ca ALTERABLE bng vic iu khin thm thuc tnh NAVIGALBE. . Th tc : app_item_property.set_property(itemid,ENTERABLE, PROPERTY_ON); tng ng vi : set_item_instance_property(itemid,CURRENT_RECORD, INSERT_ALLOWED, PROPERTY_ON); set_item_instance_property(itemid,CURRENT_RECORD, UPDATEABLE, PROPERTY_ON);

58

set_item_instance_property(itemid,CURRENT_RECORD, NAVIGABLE, PROPERTY_ON); set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON); set_item_property(itemid, UPDATEABLE, PROPERTY_ON); set_item_property(itemid, NAVIGABLE, PROPERTY_ON); ( t gi tr cho c item v item-instance to hiu qu ng nht ) . Th tc : app_item_property.set_property(itemid,ENTERABLE, PROPERTY_OFF); tng ng vi : set_item_instance_property(itemid,CURRENT_RECORD, INSERT_ALLOWED, PROPERTY_OFF); set_item_instance_property(itemid,CURRENT_RECORD, UPDATEABLE, PROPERTY_OFF); set_item_instance_property(itemid,CURRENT_RECORD, NAVIGABLE, PROPERTY_Off);

Thuc tnh DISPLAY iu khin vic n, hin item cng nh reset li cc thuc tnh c th m Oracle Form t ng thit lp khi n mt item no . . Th tc sau : app_item_property.set_property(itemid, PROPERTY_ON); tng ng vi : set_item_property(itemid, DISPLAYED, PROPERTY_ON); nu item khng phi l display item th thit lp thm : set_item_property(itemid, ENABLED, PROPERTY_ON); set_item_property(itemid, NAVIGABLE, PROPERTY_ON); nu item khng phi l display item hay nt, thit lp thm : set_item_property(itemid, QUERYABLE, PROPERTY_ON); set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON); set_item_property(itemid, UPDATEABLE, PROPERTY_ON); . Th tc sau : app_item_property.set_property(itemid, PROPERTY_OFF); DISPLAYED, DISPLAYED,

59

tng ng vi set_item_property(itemid, DISPLAYED, PROPERTY_OFF);

Thuc tnh ENABLE dng enable hay disable mt item no , x l vi APP_ITEM_PROPERTY.SET_PROPERTY khc vi x l gc ( native behavior ) ca Oracle Forms ch khi re-enable th s reset li cc thuc tnh lin quan c Oracle Forms t t ng khi disable. . Th tc : app_item_property.set_property(itemid,

ENABLED,PROPERTY_ON); tng ng vi ( nu item l text hoc list ) : set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON); set_item_property(itemid, UPDATEABLE, PROPERTY_ON); set_item_property(itemid, NAVIGABLE, PROPERTY_ON); tng ng vi ( nu item l button ) : set_item_property(itemid, ENABLED, PROPERTY_ON);

Thuc tnh REQUIRED quyt inh mt item c bt buc phi c nhp d liu hay khng, l mt thuc tnh item-level, tc l tc ng ln tt c cc instance ca item. Nu ch mun tc ng ln mt instance c th no ca item, ta c th dng th tc dng sn ca Oracle Forms l : SET_ITEM_INSTANCE_PROPERTY. . app_item_property.set_property(itemid, REQUIRED, PROPERTY_ON); . app_item_property.set_property(itemid, REQUIRED, PROPERTY_OFF);

Mt s lu : Gi APP_ITEM_PROPERTY.SET_PROPERTY tng ng vi mt tp cc x l thuc tnh c lin quan vi nhau nu thit lp tng bc. Mt s thuc tnh nh ALTERABLE hay ENTERABLE ch c th thit lp khi chy ( runtime ) v n tc ng ln tng instance. Hu ht cc Visual Attribute c trin khai t ng bi cc APPCORE routine, tr mt s visual attribute sau ( m ngi pht trin phi t lp trnh thc hin ) : DATA_DRILLDOWN, DATA_SPECIAL, DATA_REQUIRED

60

iu khin hot ng ca Window, Block, v Region

iu khin hot ng ca Window nh v window khi n c m :

CASCADE : ca s con chng ln ca s chnh, lch cho xung 0.3. Thng dng cho cc ca s detail. RIGHT, BELOW : ca s con m bn phi, hoc bn di ca s chnh, khng che ca s chnh. OVERLAP : ca s detail chng ln ca s chnh, lch xung di 0.3. CENTER : ca s m chnh gia ca s khc, thng dng cho modal window. FIRST_WINDOW : nh v ca s ngay di toolbar, thng dng cho ca s chnh.

61

ng Window : Cc s kin ng non-modal window ( khng phi l modal window ) u chuyn ti APP_CUSTOME.CLOSE_WINDOW. Code mc nh c vit trong form TEMPLATE thc hin nhng vic sau : . Nu form ang ch Enter-Query, APP_CUSTOM s gi : APP_EXCEPTION.DISABLED. . Trng hp ngc li, nu con tr ang trong window chun b ng, APP_CUSTOM thc hin do_key(PREVIOUS_BLOCK) a con tr thot khi window hin ti. . Cui cng, APP_CUSTOM n window bng HIDE_WINDOW() Nu con tr vn nm trong window, window s t ng m li sau khi c ng. ng window u tin ( tc l ng form ), gi APP_WINDOW.CLOSE_FIRST_WINDOW

Example :In a form with windows Header, Lines, and Shipments, where Lines is a detail of Header, and Shipments is a detail of Lines, the logic to close the windows is as follows:

PROCEDURE close_window (wnd VARCHAR2) IS IF wnd = HEADER THEN Exit the form app_window.close_first_window; ELSIF wnd = LINES THEN Close detail windows (Shipments) app_custom.close_window(SHIPMENTS); If cursor is in this window, move it to the HEADER block

62

IF (wnd = GET_VIEW_PROPERTY(GET_ITEM_PROPERT Y( :SYSTEM.CURSOR_ITEM,ITEM_CANVAS), WINDOW_NAME)) THEN GO_BLOCK(HEADER); END IF; ELSIF wnd = SHIPMENTS THEN If cursor is in this window, move it to the LINES block IF (wnd = GET_VIEW_PROPERTY(GET_ITEM_PROPERT Y( :SYSTEM.CURSOR_ITEM, ITEM_CANVAS), WINDOW_NAME)) THEN GO_BLOCK(LINES); END IF; END IF; THIS CODE MUST REMAIN HERE. It ensures the cursor is not in the window that will be closed by moving it to the previous block. IF (wnd = GET_VIEW_PROPERTY(GET_ITEM_PROPERT Y( :SYSTEM.CURSOR_ITEM, ITEM_CANVAS), WINDOW_NAME)) THEN

63

DO_KEY(PREVIOUS_BLOCK); END IF; Now actually close the designated window HIDE_WINDOW(wnd); END close_window; Thit lp title ng cho window :

Nu

mun

thay

i

base

title

ca

mt Bt

window, k li

gi

: gi

SET_WINDOW_PROPERTY(TITLE). mi . iu khin hot ng ca Block

APP_WINDOW.SET_TITLE no trong tng lai s bo ton base title

Lp trnh cho cc quan h Master-Detail : Khi detail block v master block nm trong 2 ca s khc nhau (u l non-modal window), detail block phi cung cp mt c cu cho php user chuyn i gia coordination tc th v coordination tr hon. Khi detail block l visible, chn coordination tc th s cho php cc detail record thay i khi master record thay i. Cn khi detail block l khng visible, nn chn coordination l tr hon. S dng th tc APP_WINDOW.SET_COORDINATION coordinate cc block. V d : trong v d s dng cc i tng sau : Master block ORDERS, trong window ORDERS Detail Block LINES, trong window LINES Relation : ORDERS_LINES

64

Coordination check box : CONTROL.ORDERS_LINES Nt navigate ti LINES block : CONTROL.LINES + Bc 1 : to 1 nt navigate ti detail block + Bc 2 : to 1 coordination check box ( t trong control block ) trong ca s detail cho php ngi dng chn coordination tc th hoc coordination tr hon khi ca s c m. + Bc 3 : to 1 th tc x l item nh sau :

PACKAGE BODY control IS PROCEDURE lines(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENBUTTON PRESSED) THEN app_custom.open_window(LINES); END IF; END lines; PROCEDURE orders_lines(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENCHECKBOX CHANGED) THEN APP_WINDOW.SET_COORDINATION(E VENT, :control.orders_lines, ORDERS_LINES); END IF; END orders_lines; END control; Bc 4 : sa package APP_CUSTOM nh sau :

65

Bc 5 : Gi cc th tc x l s kin v trng vit trn trong cc trigger :

Trin khai mt Combination Block : Mi item trong 1 block c thuc tnh Number of Items Display ca ring n, nn bn c th to mt single block cha vi item l cc single-record ( detail ) v vi item khc l multi-record ( Summary ). Khi trin khai mt combination block, hu ht cc item xut hin 2 ln, nn coordination ca cc gi tr trong cc item ny phi c qun l. Thuc tnh Synchronize with Item t ng thc hin iu ny. Bn iu khin vic navigate ti cc phn ca block trong cc tnh hung khc nhau bng cch s dng mt trng gi l Switcher, l trng c navigate u tin trong block. Khi con tr chuyn ti Switcher, n ngay lp tc s c chuyn n item u tin trong phn Detail hoc phn Summary ca block. Cc bc trin khai : Bc 1 : Thit lp Combination Block To 2 ca s v cc canvas cha cc phn khc nhau ca block ca bn. Vi phn Summary, s dng cc non-mirror item. Nhn i cc item ny to phn Detail. Phn Detail ca Combination Block nn c th t u tin.

66

Nh th khi user khng in vo 1 required item v th commit block, Oracle Forms s t con tr vo item trong block Detail. Bc 2 : Thit lp cc thuc tnh cho item . Vi cc i tng nh (l bn sao ca i tng gc), i tn chng phn nh mi quan h vi i tng gc (v d i tng gc tn l status th i tng nh tn l status_mir). Thit lp thuc tnh Synchronize with Item property v m bo l thuc tnh Database Item c t l Yes nu cc i tng c ng b ng vi cc ct ca bng c s. . Thit lp thuc tnh Number of Records Displayed mc block cho phn Summary. Cc item trong block s cng nhn gi tr ny, nu nh khng t li thuc tnh ca chng. t li thuc tnh Number of Records Displayed bng 1 cho cc i tng trong phn Detail. . ngn ngi dng chuyn tab ra khi Detail v vo trong Summary, thit lp thuc tnh Previous Navigation Item cho i tng Detail u tin v thuc tnh Next Navigation Item cho i tng Detail cui cng. . chuyn tab ng thi vi chuyn bn ghi trong 1 block nhiu bn ghi, gi APP_COMBO.KEY_PREV_ITEM trong trigger KEYPREVITEM ca i tng u tin trong Summary v gi next_record trong trigger KEYNEXT ITEM ca i tng cui cng ca phn Summary. . Nu chuyn i 1 block c thnh combination block, phi thay i cc tham chiu trong cc trigger c, v by gi mi trng u tn ti 2 phin bn. Bc 3 : Drilldown Record Indicator Thm 1 Drilldown Record Indicator thc hin lnh : execute_trigger(SUMMARY_DETAIL); Bc 4 : Tham s Record Count . To 1 tham s lu s bn ghi ca phn block (Summary hay Detail) m bn ang trong. t tn tham s l _RECORD_COUNT, trong l tn ca combination block. Chun t tn ny c lin quan n code trong APPCORE. Kiu d liu ca tham s l number, v gi tr mc nh l 2 ( con tr ban u t trong Summary) hoc 1 ( con tr ban u t trong Detail). . To trigger mc block WHENNEWITEMINSTANCE (Execution Hierarchy: Before) cha code :

:PARAMETER._RECORD_COUNT :=

67

GET_ITEM_PROPERTY(:SYSTEM.CURSOR_ITEM, RECORDS_DISPLAYED); Bc 5 : Switcher To 1 text item v gn cho n lp thuc tnh SWITCHER. N l item c navigate u tin trong block. t n vo trong toolbar canvas. To 1 trigger WHENNEWITEMINSTANCE mc item cho n (Execution Hierarchy : Override) cha code :

IF(:PARAMETER._RECORD_COUNT > 1) THEN GO_ITEM(); ELSE APP_WINDOW.SET_WINDOW_POSITION(, OVERLAP, ); GO_ITEM(); END IF; Bc 6 : Summary/Detail Menu Item . To 1 trigger SUMMARY_DETAIL mc block (Execution Hierarchy: Override) cha code :

IF GET_ITEM_PROPERTY(:SYSTEM.CURSOR_ITEM, RECORDS_DISPLAYED) > 1 THEN :PARAMETER._RECORD_COUNT := 1; ELSE :PARAMETER._RECORD_COUNT := 2; END IF; GO_ITEM(.Switcher);on code ny thay i gi tr trong tham s _RECORD_COUNT Switcher chuyn con tr ti phn cn li trong block. N c thc thi khi ngi dng chn Go -> Summary/Detail. . To 1 trigger mc block PREBLOCK (Execution Hierarchy: Override) cha code :

68

APP_SPECIAL.ENABLE(SUMMARY_DETAIL, PROPERTY_ON);. Cui cng, to 1 trigger mc form PREBLOCK (Execution Hierarchy:Override) cha code :

APP_SPECIAL.ENABLE(SUMMARY_DETAIL, PROPERTY_OFF);. Nu tt c cc block u l combination, bt SUMMARY_DETAIL mc form, b qua trigger mc block. Nu c nhiu block l combination, bt SUMMARY_DETAIL mc form, v tt n mc block vi cc block khng phi combination. Bc 7 : nh v window v con tr khi m form Nu combination block ca bn l block u tin trong form, nh v 2 ca s ca n trong trigger PRE-FORM vi nhng li gi sau :APP_WINDOW.SET_WINDOW_POSITION(, FIRST_WINDOW); APP_WINDOW.SET_WINDOW_POSITION(, OVERLAP, );

Thng th ngi dng vo Summary trc, tuy nhin nu mun vo Detail trc, thit lp tham s _RECORD_COUNT bng 1 trong trigger PRE-FORM.

Lp trnh cho cc Tabbed Regions Mt s khi nim : Tabbed Region : mt nhm cc tab lin quan vi nhau, cn gi l tab canvas. Tab Page : trang tab trong tabbed region, ni th hin mt nhm cc item lin quan. Topmost tab page : trang tab trn cng, hay trang tab ang c chn v ang th hin. Fixed Field : l trng hay item xut hin trn nhiu, hoc trn tt c, cc tab page. Alternative Region Field : l trng ch xut hin duy nht trn mt tab page no v khng c mt trn cc tab page khc.

69

Control : l cch gi khc cho field, item hay widget.

Hnh ng ca tabbed region :Hnh ng mong mun l m ra mt tab page v chuyn focus ti mt trng thch hp khi tab c click. Hnh ng ny cn c lp trnh v hnh ng mc nh ca Oracle Forms l m tab v t focus trn chnh i tng tab . Keyboard-only Operation : ngi dng truy cp vo tab qua phm nng trn keyboard. Dynamic Tab Layouts : n hay hin mt tab linh ng tu theo d liu Other Behavior : cc tab nn vn hnh c trong ch enter-query.

3 mc kh trong lp trnh : Simple (n gin) : khng cn scrollbar, khng c fixed field. Mi tab s tng ng vi 1 block ring bit trong form. Medium (trung bnh) : c scrollbar, nhng khng c fixed field. Mi tab s c mt thanh cun ngang xem cc trng v thanh cun dc xem tt c cc bn ghi. Mi tab s tng ng vi mt multi-row block ring bit. Difficult ( kh ) : c fixed field ( v c hoc khng c scrollbar ) : mt multi-row block c th dn tri trn nhiu tab page. Vi fixed field, nn t cc item vo trong stacked-canvas nm bn trn tab page.

Cc bc trin khai tabbed region : Bc 1 : To tab canvas. t tn cho tab canvas theo chun TAB_ENTITY_REGIONS (v d vi thc th LINES, t tn cho tab canvas l TAB_LINES_REGIONS). Thit lp lp thuc tnh l TAB_CANVAS. Thit lp thuc tnh Window cho tab canvas t n vo ng ca s. Nu t sai, bn s khng s dng c View -> Stacked Views trong Form Builder hin th tab canvas trn content canvas. Bc 2 : iu chnh tab canvas. Thit lp th t ca tab canvas sau content canvas v trc bt k stacked canvas no s xut hin ng trc n. iu chnh viewport ca tab canvas trong Layout Editor. Hin th content canvas cng lc d nh v tab canvas.

70

Bc 3 : To cc tab page. Vi mc trung bnh v mc kh, tn ca cc tab page phi ph hp vi tn ca cc stacked canvas alternative region tng ng vi chng.

Bc 4 : Hiu chnh cc tab page. Thit lp lp thuc tnh l TAB_PAGE. t label cho mi tab page. Thit lp th t cho cc tab page trong Object Navigator. Bc 5 : Ring vi mc kh, to fixed field stacked canvas. t tn n l tab_canvas_FIXED. Thit lp th t cho n sau tab canvas nhng trc bt k stacked canvas alternative region no m bn to cho mc kh. Thit lp lp thuc tnh cho n l CANVAS_STACKED_FIXED_FIELD. Chnh viewport ca fixed field canvas nm trong viewport ca tab canvas. Bc 6 : Vi mc trung bnh v mc kh, to cc stacked canvas alternative region. Tt c cc canvas ny phi c cng v tr v kch thc viewport. Kim tra thuc tnh Visible ca cc stacked canvas alternative region, ch canvas no xut hin u tin c thuc tnh ny l Yes. Vi mc kh, cc canvas alternative region ny s che khut mt phn (ch khng phi l tt c) ca canvas fixed field. Cn m bo l v tr v kch thc viewport ca alternative region canvas lin h ph hp vi fixed field canvas. ) Bc 7 : t cc item ca bn vo cc tab page hay stacked canvas thch hp. t cc scrollbar ca block (nu c) gn cnh phi canvas. Nu ang s dng stacked canvas, m bo rng stacked canvas khng chng ln cc trng c t trc tip vo trong tab page. Tng t, cc stacked canvas alternative region cng khng c chng ln cc item trong stacked canvas fixed field. Bc 8 : Hiu chnh layout ca bn. t cc tiu tng ng cho cc trng. Khi hiu chnh, lu cn chnh cc i tng hp l m bo tnh thm m, d nhn. Bc 9 : Lp trnh cho tab handler. Oracle cung cp 2 file mu gip lp trnh cho handler d hn : . FNDTABS.txt cho mc d v mc trung bnh . FNDTABFF.txt cho trng hp fixed field (mc kh) Hai file ny nm trong th mc Resource (trong th mc FND). Copy text t file vo trong form ri sa li code cho ph hp vi cc i tng v cc

71

hnh ng trong form. Tham kho cc comment c trong file sa code c d hn. Bc 10 : Gi cc tab handler t trigger. To 1 trigger mc form WHENTABPAGECHANGED, v gi handler t trigger ny. Trigger nn truyn s kin WHENTABPAGECHANGED ti handler, v d :

MY_PACKAGE.TAB_MY_ENTITY_REGIONS(WHEN TABPAGECHANGED);To 1 trigger mc block (Execution Hierarchy Style: Before) WHEN NEWITEMINSTANCE gi ti handler ca bn, v d :

MY_PACKAGE.TAB_MY_ENTITY_REGIONS(WHEN NEWITEMINSTANCE);

72

Cho php hot ng truy vnQuery Find : C 2 hnh thc trin khai cho Query Find. Mt s hin th mt Row-LOV trong c cc hng bn chn mt. Mt s m ra ca s tm kim ( Find window ), trong c cc trng m ngi s dng c th mun dng chn d liu. Ch s dng 1 hnh thc trin khai cho mi block c th. Tt c cc block c th truy vn trong form nn h tr Query Find. Gi Query Find khi m form : nu mun mt Row-LOV hoc Find Window hin ngay lp tc khi m form, gi EXECUTE_TRIGGER( QUERY_FIND ); cui trigger WHEN-NEW-FORM-INSTANCE.

Trin khai Row-LOV trin khai mt Row-LOV, to 1 LOV chn ra kho chnh ca hng (m ngi s dng mun) a vo trong 1 tham s form, sau copy gi tr ny vo trong trng kho chnh ca block cha kt qu truy vn ngay trc lc thc hin truy vn. Xt 1 v d vi block DEPT da trn bng DEPT vi cc ct DEPTNO, DNAME, LOC. Cc bc trin khai nh sau : Bc 1 : To 1 tham s cho kho chnh. To 1 tham s form lu kho chnh chn t LOV. Nu Row-LOV l dnh cho detail block, bn khng cn to tham s lu kho ngoi, m hy thm vo mnh WHERE ca nhm bn ghi ( s c to bc sau ) tn ct kt ni. Thit lp kiu d liu v di thch hp cho tham s. V d ta to tham s DEPTNO_QF tng ng vi block DEPT. Bc 2 : To 1 LOV To 1 LOV cha cc ct cn thit ngi dng c th xc nh uc hng mnh mun chn. Nu Row-LOV l cho detail block, thm ct kt ni ( kho ngoi ) vo mnh WHERE ca nhm bn ghi ng vi LOV. Kho chnh ( chn t LOV ) s c tr v cho tham s. V d ta to 1 LOV l DEPT_QF cha 2 ct l DEPTNO v DNAME. t

73

i tng nhn gi tr tr v ca DEPTNO l DEPTNO_QF. Bc 3 : To 1 trigger PRE-QUERY To 1 trigger PRE-QUERY mc block (Execution Hierarchy: Before) cha on m sau : IF :parameter.G_query_find = TRUE THEN := :parameter.; :parameter.G_query_find := FALSE; END IF; Vi kho chnh gm nhiu thnh phn, bn cn nhiu lnh gn cho kho chnh. Tham s G_query_find c sn trong form TEMPLATE. V d ta to trigger PRE-QUERY cha on m sau : IF :parameter.G_query_find = TRUE THEN :DEPT.DEPTNO := :parameter.DEPTNO_QF :parameter.G_query_find := FALSE; END IF; Bc 4 : To 1 trigger QUERY_FIND Cui cng, to 1 trigger ( loi trigger t to ) mc block tn l QUERY_FIND (Execution Hierarchy: Override) cha m : APP_FIND.QUERY_FIND(); V d ta to trigger cha : APP_FIND.QUERY_FIND(DEPT_QF);

Trin khai Find Window trin khai 1 Find Window, to thm 1 window cha cc trng m ngi dng thng hay chn khi bt u thc hin tm kim v copy tt c cc gi tr ca item t block vo trong block cha kt qu truy vn ngay trc khi thc hin truy vn. Trong v d m ta s xem xt, c 1 block da trn bng EMP, l block cha kt qu truy vn. Kho chnh ca bng EMP l EMPNO. Block cn cha mt trng kiu date l HIREDATE. Find Window c thit k xc nh cc bn ghi bng EMPNO hoc HIREDATE. Cc bc trin khai : Bc 1 : Copy nhm i tng QUERY_FIND t form APPSTAND . Copy nhm i tng QUERY_FIND t form APPSTAND vo form ca bn. N cha 1 window, 1 block v 1 canvas m t xy dng nn Find Window ca bn.

74

. Sau khi copy, xo nhm i tng QUERY_FIND i. Window, canvas v block vn cn, v bn li c th copy li nhm i tng nu cn thm Find Window na. Bc 2 : i tn block, canvas v window . i tn block, canvas v window. t thuc tnh queryable ca block l No. . Trong v d, i tn block, canvas v window thnh : EMP_QF, EMP_QF_CANVAS, and EMP_QF_WINDOW. Bc 3 : Vit code cho trigger ca nt NEW . Vit code cho trigger WHENBUTTONPRESSED ca nt NEW trong block ca Find Window n truyn i tn ca block Result nh 1 tham s. Thng tin ny cho php Oracle Applications chuyn con tr ti block Result v t con tr ti v tr bn ghi mi. S d c nt NEW l bi v khi bn m 1 form, Find Window c th t ng m ra, v nu bn mun thm mi ngay 1 bn ghi th ch vic chn nt NEW. . Trong v d, sa dng code app_find.new(); trong trigger thnh app_find.new(EMP); Bc 4 : Vit code cho trigger ca nt FIND . Vit code cho trigger WHENBUTTONPRESSED ca nt FIND n truyn i tn ca block Results. Thng tin ny cho php Oracle Applications chuyn focus ti block Results v thc hin truy vn. . Trong v d, sa dng code app_find.find ( ); thnh app_find.find(EMP); . Nu bn cn phi validate cc item trong Find Window, t on code ca bn trc li gi APP_FIND.FIND. Bn c th a ra li nhc nu ngi dng cha nhp iu kin lc, hoc iu kin lc c th phi mt nhiu thi gian x l. Bc 5 : Thit lp thuc tnh Navigation Data Block . Thit lp thuc tnh Previous Navigation Data Block ca block Find l block Results. iu ny cho php ngi dng thot khi Find Window m khng cn thc hin truy vn. . T block Result, next v previous data block ca n l cc i tng khc, ch khng bao gi quay v Find Window. Bc 6 : Vit code cho trigger KEYNXTBLK Vit code cho trigger KEYNXTBLK ca block Find n c tnh nng ging nh nt FIND. Khi ngi dng chn Go>Next Block, hnh ng xy ra ging nh khi nhn nt FIND.

75

Bc 7 : t title cho Find Window t title cho Find Window. Trong v d, t title l Find Employees. Bc 8 : To cc item cn thit . To cc item m ngi dng truy vn trong block Find Window. n gin nht l copy cc item t block Result vo block Find Window. . Cc thao tc vi nhng item trong Find Window : > t thuc tnh Required l No > t gi tr mc nh l NULL > Nu bn copy cc item t block Results, t thuc tnh Database Item l No, v loi b cc trigger km vi chng. Nu cn gi li 1 trigger no y, cn sa cc tham chiu ca n ti cc trng trong block Find Window > Thng thng item trong block Find Window c LOV gn vi n ngi dng lun c th chn ng gi tr hp l cho item. Cc trng date c th s dng Calendar v trigger KEY-LISTVAL c lin quan. > Cc item l check box hay option group trong block Results nn chuyn thnh poplist trong block Find Window. Khi chng NULL, truy vn khng chu mt gii hn no. Bc 9 : Cn chnh Find Window trong form iu chnh Find Window ca bn : chnh li kch thc, v tr, cc trng Bc 10 : Lp trnh trigger PRE-QUERY . To trigger PRE-QUERY cho block Results (Execution Hierarchy : Before) copy iu kin lc truy vn t block Find Window sang block Results (l ni truy vn thc s xy ra). . Bn c th s dng built-in COPY ca Oracle Forms copy gi tr hoc c th gn gi tr trc tip bng := . IF :parameter.G_query_find = TRUE THEN COPY (,); :parameter.G_query_find := FALSE; END IF; . Mt kiu lc thng dng l truy vn trong phm vi cc s (hoc cc ngy, hoc cc k t) no . C th s dng th tc APP_FIND.QUERY_RANGE thc hin iu ny. Tham s mt v hai l gi tr thp v gi tr cao, tham s ba l tn ca trng d liu c truy vn thc s. . Trong v d : IF :parameter.G_query_find = TRUE THEN

76

COPY(:EMP_QF.EMPNO, EMP.EMPNO); APP_FIND.QUERY_RANGE(:EMP_QF.Hiredate_from, :EMP_QF.Hiredate_to, EMP.Hiredate); :parameter.G_query_find := FALSE; END IF; Bc 11 : To trigger QUERY_FIND . To trigger QUERY_FIND (loi trigger t to) cho block Results (Execution Hierarchy: Override) cha code : APP_FIND.QUERY_FIND(, , ); . Trong v d : APP_FIND.QUERY_FIND(EMP_WINDOW, EMP_QF); EMP_QF_WINDOW,

77

Lp trnh cc hnh ng cho itemCc ch chnh Mi quan h cc Item Defaults Kim tra tnh ton vn Calendar CALENDAR: Calendar Package

Mi quan h gia cc Item Cc Item ph thuc. Cc Item ph thuc vo iu kin. Cc Item a ph thuc. Hai Master Items & Mt Dependent Item Ph thuc tng. Cc Item loi tr ln nhau. Cc Item bao gm ln nhau. Mutually Inclusive Items with Dependents Cc Item c tnh iu kin bt buc. Cc hnh ng chnh i vi cc Item nh sau: Disabled Items and WHENVALIDATEITEM Trigger Trong hu ht mi quan h gia cc Item bn phi t ng enable hoc disable cc Item. WHENVALIDATEITEM lun xy ra ti thi im u tin khi mt user di chuyn qua mi trng ca mt record mi, thm ch khng thay i gi tr g Cc item ph thuc to mt text item, check box, hoc poplist m ch enabled khi mt master item c tnh ton, s dng procedure APP_FIELD.SET_

78

DEPENDENT_FIELD. iu ny cho php : - Cc item ph thuc hoc c clear hoc l invalid khi master thay i. - Nu master item l NULL hoc iu kin l FALSE, th item ph thuc disabled.

Trong v d di y ta c hai item l item_type v item_name. Item_name ph thuc vo item_type, do item_name ch enable khi item_type l NOT NULL.

Bc 1 To mt th tc iu khin procedures nh di y: PACKAGE BODY ORDER IS PROCEDURE ITEM_TYPE(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENVALIDATEITEM) THEN -- Any validation logic goes here. ITEM_NAME(INIT); ELSE fnd_message.debug(Invalid event passed to ORDER.ITEM_TYPE: || EVENT); END IF; END ITEM_TYPE; PROCEDURE ITEM_NAME(EVENT VARCHAR2) IS BEGIN IF ((EVENT = PRERECORD) OR (EVENT = INIT)) THEN APP_FIELD.SET_DEPENDENT_FIELD(EVENT, ORDER.ITEM_TYPE, ORDER.ITEM_NAME); ELSE fnd_message.debug(Invalid event passed to ORDER.ITEM_NAME: || EVENT); END IF; END ITEM_NAME; END ORDER; Bc 2: Gi th tc iu khin item trong :

79

Trigger: WHENVALIDATEITEM on item_type:order.item_type(WHENVALIDATEITEM);

Trigger: PRERECORD on order (Fire in EnterQuery Mode: No):order.item_name(PRERECORD); Bc 3 : Nu master v dependent item u trong mt multirow block, hoc chng l cc items trong mt singlerow block l detail ca mt master block, ta phi gi SET_DEPENDENT_FIELD cho s kin POSTQUERY thay vo . PROCEDURE ITEM_NAME(EVENT VARCHAR2) IS BEGIN IF ((EVENT = PRERECORD) OR (EVENT = INIT) OR (EVENT = POSTQUERY)) THEN APP_FIELD.SET_DEPENDENT_FIELD(EVENT, ORDER.ITEM_TYPE, ORDER.ITEM_NAME); ELSE fnd_message.debug(Invalid event passed to ORDER.ITEM_NAME: || EVENT); END IF; END ITEM_NAME; Thm mt iu khin trong: ORDER.ITEM_NAME(POSTQUERY);

Ch : Trong mt multirecord block, nu item ph thuc l Item cui cng ca record, con tr chut n record tip theo Khi di chuyn t master. lm vic vi iu khin ny , thm vo KEYNEXTITEM trigger m xy ra mt VALIDATE(Item_scope) tip theo l NEXT_ITEM. Ch : Nu item ph thuc l mt required list hoc option group, thit lp invalidate parameter trong li gi APP_FIELD.SET_DEPENDENT_FIELD thnh TRUE. Khi flag l TRUE, item ph thuc c thit lp nh l invalid hn l cleared.

80

Item ph thuc c iu kinTrong v d ny , block orderc c hai l item_type v item_size. Item_size is enabled ch khi item_type l SHOES. Bc 1: To mt th tc iu khin item di y . Tng t nh trong trng hp simple master/dependent, nhng phi thit lp iu kin thay v tn ca master item. PACKAGE BODY order IS

PROCEDURE ITEM_TYPE(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENVALIDATEITEM) THEN size(INIT); ELSE fnd_message.debug(Invalid event passed to ORDER.ITEM_TYPE: || EVENT); END IF; END item_type; END IF; END size;

PROCEDURE size(EVENT VARCHAR2) IS BEGIN IF ((EVENT = PRERECORD) OR (EVENT = INIT)) THEN APP_FIELD.SET_DEPENDENT_FIELD(EVENT, (:order.item_type = SHOES), ORDER.SIZE); ELSE fnd_message.debug(Invalid event passed to ORDER.SIZE: || EVENT); END order;

81

Bc 2 Gi th tc iu khin trong :

Trigger: PRERECORD on order (Fire in EnterQuery Mode: No):order.item_size(PRERECORD);

Trigger: WHENVALIDATEITEM on item_type:order.item_type(WHENVALIDATEITEM);

Cc item a ph thucy l trng hp m nhiu item ph thuc vo mt master item. V d, item_types chc chn c th nh r color v size. Do , trng color v size l ph thuc vo the master field item_type, v ch enabled khi item_type l RAINCOAT. Bc 1 To cc th tc x l item nh sau : PACKAGE BODY order IS PROCEDURE item_type(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENVALIDATEITEM) THEN color(INIT); size(INIT); ELSE fnd_message.debug(Invalid event passed to ORDER.ITEM_TYPE: || EVENT); END IF; END item_type; PROCEDURE color(EVENT VARCHAR2) IS BEGIN IF (EVENT = PRERECORD) OR (EVENT = INIT) THEN APP_FIELD.SET_DEPENDENT_FIELD(EVENT, (:order.item_type = RAINCOAT), ORDER.COLOR);

82

ELSE fnd_message.debug(Invalid event passed to ORDER.COLOR: || EVENT); END IF; END color; PROCEDURE size(EVENT VARCHAR2) IS BEGIN IF (EVENT = PRERECORD) OR (EVENT = INIT) THEN APP_FIELD.SET_DEPENDENT_FIELD(EVENT, (:order.item_type = RAINCOAT), ORDER.SIZE); ELSE fnd_message.debug(Invalid event passed to ORDER.SIZE: || EVENT); END IF; END size; END order; Bc 2 Gi cc th tc trong :

Trigger: WHENVALIDATEITEM on order.item_type:order.item_type(WHENVALIDATEITEM);

Trigger: PRERECORD (Fire in EnterQuery Mode: No):order.color(PRERECORD); order.size(PRERECORD);

2 Master Item v 1 Dependent ItemGi s cc size khc nhau ca nhng chic m tng ng vi cc color khc nhau. Bn khng th in vo color ca chic m n khi no bn in vo c hai item_type v size. S hp l ca block ph thuc c iu khin bi ni dung ca c hai master_1 and master_2. Bc 1 To cc th tc di y : PACKAGE BODY order IS PROCEDURE item_type(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENVALIDATEITEM) THEN

83

color(INIT): ELSE fnd_message.debug(Invalid event passed to ORDER.ITEM_TYPE: || EVENT); END IF; END item_type; PROCEDURE size(EVENT VARCHAR2) IS BEGIN IF (EVENT = WHENVALIDATEITEM) THEN color(INIT); ELSE fnd_message.debug(Invalid event passed to ORDER.SIZE: || EVENT); END IF; END size; PROCEDURE color(EVENT VARCHAR2) IS BEGIN IF (EVENT = PRERECORD) OR (EVENT = INIT) THEN APP_FIELD.SET_DEPENDENT_FIELD(EVENT, ((:order.item_type IS NOT NULL) AND (:order.size IS NOT NULL)), ORDER.COLOR); ELSE fnd_message.debug(Invalid event passed to ORDER.COLOR: || EVENT); END IF; END color; END order; Bc 2 Gi cc th tc iu khin trong :

Trigger: WHENVALIDATEITEM on order.item_type:order.item_type(WHENVALIDATEITEM);

Trigger: WHENVALIDATEITEM on order.size:order.size(WHENVALIDATEITEM);

Trigger: PRERECORD (Fire in EnterQuery Mode: No):

84

order.color(PRERECORD);

Kiu ph thuc CascadingVi kiu ph thuc cascading, item_3 ph thuc vo item_2, item_2 ph thuc vo item_1. Thng thng tt c cc item trong cng mt block. V d , block order bao gm cc items vendor, site, v contact. Danh sch list tng ng ca sites ph thuc vo vendor hin ti .

- Khi vendor c thay i, site b cleared.- Bt c khi no vendor l null, site l disabled. Danh sch list ca cc contacts ph thuc vo site hin ti. - Bt c khi no site thay i, contact l cleared. - Bt c khi no site l null, contact l disabled. Bc 1 To th