Oracle EBS Forms開發(fā)指南(中級)_第1頁
Oracle EBS Forms開發(fā)指南(中級)_第2頁
Oracle EBS Forms開發(fā)指南(中級)_第3頁
Oracle EBS Forms開發(fā)指南(中級)_第4頁
Oracle EBS Forms開發(fā)指南(中級)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、信息技術(shù)最正確實(shí)踐ORACLE核心應(yīng)用技術(shù)E-Business SuiteForms開發(fā)指南Author:黃建華Creation Date:createdate MMMM d, yyyyOctober 16, 2006Last Updated:savedate MMMM d, yyyyFebruary 19, 2021Document Ref: Version:DRAFT 1AApprovals:autotext PIC Oracle Logo * Mergeformat autotext PIC Oracle Logo * Mergeformat autotext PIC Oracle Lo

2、go * Mergeformat Copy Number_Document ControlChange Record SECTIONDateAuthorVersionChange Reference CREATEDATE d-MMM-yy 16-Oct-06Draft 1aNo Previous DocumentReviewersNamePositionDistributionCopy No.NameLocationLibrary MasterProject LibraryProject ManagerNote To Holders:If you receive an electronic c

3、opy of this document and print it out, please write your name on the equivalent of the cover page, for document control purposes.If you receive a hard copy of this document, please write your name on the front cover, for document control purposes.Contents TOC o 2-3 Document Control PAGEREF _Toc22297

4、9806 h ii1.Folder、JTF Grid PAGEREF _Toc222979807 h 21.1.Folder開發(fā)步驟從頭開始 PAGEREF _Toc222979808 h 21.2.Folder問題 PAGEREF _Toc222979809 h 71.3.Folder開發(fā)步驟基于模版 PAGEREF _Toc222979810 h 71.4.JTF Grid開發(fā)步驟 PAGEREF _Toc222979811 h 102.多語言開發(fā) PAGEREF _Toc222979812 h 142.1.國際化支持 PAGEREF _Toc222979813 h 142.2.Form自

5、身的多語言版本 PAGEREF _Toc222979814 h 142.3.數(shù)據(jù)多語言開發(fā)步驟 PAGEREF _Toc222979815 h 142.4.EBS啟用新語言時的考慮 PAGEREF _Toc222979816 h 223.附件開發(fā) PAGEREF _Toc222979817 h 243.1.關(guān)于附件 PAGEREF _Toc222979818 h 243.2.標(biāo)準(zhǔn)附件設(shè)置 PAGEREF _Toc222979819 h 244.Javabean PAGEREF _Toc222979820 h 294.1.Form與Java PAGEREF _Toc222979821 h 294

6、.2.例子:Hello World PAGEREF _Toc222979822 h 314.3.例子:執(zhí)行PC本地命令 PAGEREF _Toc222979823 h 344.4.例子:讀取PC文本文件 PAGEREF _Toc222979824 h 374.5.例子:通用導(dǎo)入 PAGEREF _Toc222979825 h 405.Form個性化 PAGEREF _Toc222979826 h 415.1.Form個性化概述 PAGEREF _Toc222979827 h 415.2.例子:修改字段Prompt PAGEREF _Toc222979828 h 425.3.例子:有條件顯示消息

7、 PAGEREF _Toc222979829 h 435.4.例子:調(diào)用數(shù)據(jù)庫Package PAGEREF _Toc222979830 h 445.5.例子:添加菜單 PAGEREF _Toc222979831 h 445.6.例子:翻開功能 PAGEREF _Toc222979832 h 455.7.例子:執(zhí)行查詢 PAGEREF _Toc222979833 h 465.8.例子:其他應(yīng)用 PAGEREF _Toc222979834 h 475.9.例子:Instance間遷移 PAGEREF _Toc222979835 h 486.技巧、常用代碼 PAGEREF _Toc22297983

8、6 h 496.1.Form中的變量 PAGEREF _Toc222979837 h 496.2.初始值、格式掩碼 PAGEREF _Toc222979838 h 496.3.消息處理 PAGEREF _Toc222979839 h 506.4.Special菜單 PAGEREF _Toc222979840 h 506.5.庫存組織訪問 PAGEREF _Toc222979841 h 506.6.MFG_ORGANIZATION_ID相關(guān)問題 PAGEREF _Toc222979842 h 516.7.常用內(nèi)置過程 PAGEREF _Toc222979843 h 526.8.待續(xù) PAGERE

9、F _Toc222979844 h 527.Open and Closed Issues for this Deliverable PAGEREF _Toc222979845 h 53Open Issues PAGEREF _Toc222979846 h 53Closed Issues PAGEREF _Toc222979847 h 53Folder、JTF GridFolder開發(fā)步驟從頭開始本節(jié)標(biāo)題說明:標(biāo)準(zhǔn)指做Folder都要做而且是一樣的步驟,可以考慮做個模版了;普通指和做普通Form一樣;特殊指做Folder都要做但需要根據(jù)實(shí)際內(nèi)容作修改。什么是FolderFolder不是Form的

10、標(biāo)準(zhǔn)功能,而是Oracle自己在EBS開發(fā)中總結(jié)出來的“動態(tài)界面:不同用戶可以根據(jù)自己的需要,設(shè)置塊中哪些字段需要顯示以及順序;而開發(fā)人員那么免于被布局折騰的痛苦。對于開發(fā)來說,要做的事情就是用“遵循Folder標(biāo)準(zhǔn)換取“布局零工作量??截悩?biāo)準(zhǔn)Folder對象標(biāo)準(zhǔn)翻開,把對象組“STANDARD_FOLDER拖到我們自己的Form中,并選擇“Subclass而非“Copy,這個和前面講的查詢塊不同。這樣會自動產(chǎn)生一系列用于Folder的對象:塊、畫布、Lov/記錄組、參數(shù)、Property Classes、Window,這些都不用修改。引用Folder的PLL庫標(biāo)準(zhǔn)選中Attached Lib

11、raries,點(diǎn)擊“+,如果本地沒有請先從效勞器下載。點(diǎn)擊Attach后選擇“Yes移除絕對路徑。創(chuàng)立數(shù)據(jù)庫對象普通創(chuàng)立數(shù)據(jù)庫對象,沒有任何特殊之處:- Create tablecreate table SCF.CUX_FLODER_DEMO( FLODER_DEMO_ID NUMBER not null, NUMBER_FIELD1 NUMBER not null, NUMBER_FIELD2 NUMBER, NUMBER_FIELD3 NUMBER, NUMBER_FIELD4 NUMBER, DATE_FIELD1 DATE NOT NULL, DATE_FIELD2 DATE, VAR

12、CHAR2_FIELD1 VARCHAR2(100) NOT NULL, VARCHAR2_FIELD2 VARCHAR2(100), VARCHAR2_FIELD3 VARCHAR2(100), VARCHAR2_FIELD4 VARCHAR2(100), VARCHAR2_FIELD5 VARCHAR2(100), VARCHAR2_FIELD6 VARCHAR2(100), CREATION_DATE DATE not null, CREATED_BY NUMBER not null, LAST_UPDATED_BY NUMBER not null, LAST_UPDATE_DATE D

13、ATE not null, LAST_UPDATE_LOGIN NUMBER, ATTRIBUTE_CATEGORY VARCHAR2(30), ATTRIBUTE1 VARCHAR2(240), ATTRIBUTE2 VARCHAR2(240), ATTRIBUTE3 VARCHAR2(240), ATTRIBUTE4 VARCHAR2(240), ATTRIBUTE5 VARCHAR2(240), ATTRIBUTE6 VARCHAR2(240), ATTRIBUTE7 VARCHAR2(240), ATTRIBUTE8 VARCHAR2(240), ATTRIBUTE9 VARCHAR2

14、(240), ATTRIBUTE10 VARCHAR2(240), ATTRIBUTE11 VARCHAR2(240), ATTRIBUTE12 VARCHAR2(240), ATTRIBUTE13 VARCHAR2(240), ATTRIBUTE14 VARCHAR2(240), ATTRIBUTE15 VARCHAR2(240)tablespace SCF;- Create/Recreate indexes create unique index SCF.CUX_FLODER_DEMO_U1 on SCF.CUX_FLODER_DEMO (FLODER_DEMO_ID) tablespac

15、e SCF; - Create/Recreate sequenceCREATE SEQUENCE SCF.CUX_FLODER_DEMO_S;- Create/Recreate synonumCREATE SYNONYM CUX_FLODER_DEMO_S FOR scf.CUX_FLODER_DEMO_S;CREATE SYNONYM CUX_FLODER_DEMO FOR scf.CUX_FLODER_DEMO;創(chuàng)立Folder塊普通按照普通步驟創(chuàng)立數(shù)據(jù)塊,包括塊和字段的子類、LOV、On-XXX觸發(fā)器、行指示符等等,如果有彈性域,那么也需要DF字段和相關(guān)的觸發(fā)器。當(dāng)然了,從Templat

16、e開始的常規(guī)修改步驟也是要做的。為標(biāo)準(zhǔn)起見,塊名后加“FOLDER,這里是“DEMO_FOLDER,這種數(shù)據(jù)塊我們叫“Folder塊。修改Folder塊標(biāo)準(zhǔn)創(chuàng)立SWITCHER字段手工添加字段,名字叫FOLDER_SWITCHER,子類為SWITCHER:并編寫觸發(fā)器WHEN-NEW-ITEM-INSTANCE:app_folder_move_cursor(1);編寫觸發(fā)器需要編寫如下觸發(fā)器:WHEN-NEW-RECORD-INSTANCEWHEN-NEW-BLOCK-INSTANCEPRE-QUERYPOST-QUERYPRE-BLOCKPOST-BLOCKKEY-ENTQRYKEY-EXE

17、QRYKEY-PREV-ITEMKEY-NEXT-ITEMKEY-PRVRECKEY-NXTRECKEY-CLRRECKEY-CLRBLK這些觸發(fā)器的內(nèi)容都是app_folder.event(觸發(fā)器名稱);創(chuàng)立Prompt塊標(biāo)準(zhǔn)手工創(chuàng)立非數(shù)據(jù)庫塊,子類仍為Block,為標(biāo)準(zhǔn)起見,塊名后加“PROMPT,這里是“DEMO_PROMPT,這種數(shù)據(jù)塊我們叫“Prompt塊。手工創(chuàng)立6個標(biāo)準(zhǔn)Item,名字和子類必須同下表:NameSubclassFOLDER_TITLEDYNAMIC_TITLEFOLDER_OPENFOLDER_OPENFOLDER_DUMMYFOLDER_DUMMYORDER_BY

18、1FOLDER_ORDERBYORDER_BY2FOLDER_ORDERBYORDER_BY3FOLDER_ORDERBY修改Prompt塊和Folder塊特殊“Folder塊有多少字段要顯示,就需要在“Prompt塊創(chuàng)立多少同名字段除了SWITCHER字段、行指示符、DF字段,前者是Folder的特殊字段,后兩者通常需要固定在內(nèi)容畫布上,并設(shè)置這些字段的關(guān)鍵屬性:屬性值SubclassFOLDER_PROMPT_MULTIROWInitial Value字段的PromptWidth字段的寬度,根據(jù)實(shí)際需要調(diào)整Prompt注:清空對“Folder塊的字段,也需要清空Prompt屬性。理解Fol

19、der自動布局原理到這里,我們先理解下Folder是如何自動布局的:需要使用Folder功能的字段必須放在堆疊畫布上,F(xiàn)older功能僅自動布局堆疊畫布寬度和在其上的字段順序。放在內(nèi)容畫布上的所有對象,包括堆疊畫布自身在內(nèi)容畫布上的起始位置,需要我們和以前一樣手工調(diào)整布局;只要布局得當(dāng),一個Windows上可以有多個Folder。自動布局的堆疊畫布寬度 = 內(nèi)容畫布寬度 堆疊畫布的X座標(biāo) 0.26,這個0.26啊,正好可以讓我們放垂直滾動條!此外,堆疊畫布高度也會被自動調(diào)整,調(diào)整時系統(tǒng)自動回算上水平滾動條的位置!最終界面的字段順序由Prompt塊字段的順序決定,那么Folder塊的字段在界面的

20、排列順序如何自動和Prompt對應(yīng)起來呢?原來系統(tǒng)是根據(jù)字段名!最終界面Tab鍵導(dǎo)航的順序仍然由Folder塊字段的順序決定,所以設(shè)計時注意兩者要一致。系統(tǒng)并不自動決定字段的Y軸位置!Y,即等于Prompt塊的Item的高度。為操作方便,也為了標(biāo)準(zhǔn)化,通常需要放個文件夾按鈕在內(nèi)容畫布的左上角,這個就是Folder_Open字段。創(chuàng)立堆疊畫布、內(nèi)容畫布、窗口普通Floder要求字段放置在堆疊畫布上,為標(biāo)準(zhǔn)起見,畫布名后加“FOLDER_STACK,View和Canvas的寬度無所謂,運(yùn)行時將自定根據(jù)窗口的大小調(diào)整,右邊正好會留出滾動條的位置。另外,為標(biāo)準(zhǔn)起見,內(nèi)容畫布后也可加“FOLDER_CO

21、NTENT。設(shè)置這兩個畫布的子類,并設(shè)置它們的Windows屬性相同。布局Item到畫布特殊設(shè)置如下Item到畫布:把FOLDER_OPEN、FOLDER_DUMMY、行指示符、Folder塊的垂直滾動條,都設(shè)到內(nèi)容畫布上,并設(shè)計它們的位置。Folder_Open按照其子類默認(rèn)值即可:X為0.1、Y為0。行指示符。垂直滾動條的Y為0.5,X那么需要在Window的Resize事件中設(shè)置,還記得那個0.26嗎?這樣,堆疊畫布在內(nèi)容畫布上的位置,應(yīng)該就是X為0.2,Y為0.25,想想為什么。同時啟用堆疊畫布的水平滾動條。Folder塊的SWITCHER字段設(shè)置到堆疊畫布。Folder塊的其他需要顯

22、示的字段都設(shè)置到堆疊畫布。Prompt塊的其他字段全部設(shè)置到堆疊畫布,并且Y座標(biāo)為0。注:FOLDER_TITLE字段不知道是干什么的,其寬度設(shè)為0。追加Form級觸發(fā)器標(biāo)準(zhǔn)在FOLDER_ACTION中追加:app_folder.event(:global.folder_action);在KEY-CLRFRM中追加:app_folder.event(KEY-CLRFRM);追加Form級觸發(fā)器特殊在WHEN-WINDOW-RESIZED中追加:if :system.event_window in (DEMO_FOLDER) then app_folder.event(WHEN-WINDOW-

23、RESIZED);end if;declarel_x_position number;l_width number;beginif :system.event_window in (DEMO_FOLDER) then app_folder.event(WHEN-WINDOW-RESIZED); l_width:=GET_VIEW_PROPERTY(DEMO_FOLDER_CONTENT,WIDTH); SET_CANVAS_PROPERTY(DEMO_FOLDER_CONTENT,WIDTH,l_width); l_width:=GET_VIEW_PROPERTY(DEMO_FOLDER_ST

24、ACK,WIDTH); l_x_position:=GET_VIEW_PROPERTY(DEMO_FOLDER_STACK,VIEWPORT_X_POS); l_x_position:=l_x_position + l_width + ; SET_BLOCK_PROPERTY(DEMO_FOLDER,BLOCKSCROLLBAR_X_POS,l_x_position); end if;end;注意必須用代碼對內(nèi)容畫布進(jìn)行調(diào)整,因?yàn)楦淖兇翱诖笮r,F(xiàn)orm不會自動調(diào)整。在WHEN-NEW-FORM-INSTANCE中追加:app_folder.define_folder_block(object

25、_name = DEMO_FOLDER, folder_block_name = DEMO_FOLDER, prompt_block_name = DEMO_PROMPT, folder_canvas_name = DEMO_FOLDER_STACK, folder_window_name = DEMO_FOLDER, disabled_functions = , tab_canvas_name = , fixed_canvas_name = );app_folder.event(INSTANTIATE);show_view(DEMO_FOLDER_CONTENT);第一句是Folder申明,

26、根據(jù)參數(shù)名給出具體值即可,注意tab_canvas_name,我們不用Tab頁,所以為空。最后一句是因?yàn)楸纠袃?nèi)容畫布上沒有可導(dǎo)航的塊,所以需要用帶碼使其顯示。上傳&編譯&運(yùn)行運(yùn)行結(jié)果如下:可以調(diào)整列寬度和順序、隱藏或顯示列,并可以保存布局;調(diào)整窗口大小,F(xiàn)older會自動調(diào)整適應(yīng)。代碼請見。注,上述觸發(fā)器代碼可以全部組織到一個Program Units中。Folder問題Item隱藏后顯示,變成可更新蔡芳鈞將一個Folder ItemTEXT_ITEM_DISPALYONLY隱藏后然后再顯示,這個Item就變成了可以更新的字段了。這個問題的原因是繼承過來的STANDARD_FOLDER Ob

27、ject是舊版本導(dǎo)致的,所以如果大家在做Folder Form的時候,檢查一下這個問題,如果發(fā)現(xiàn)出現(xiàn)以上問題可以刪掉Object然后再從效勞器下載一個最新的下來繼承。Item隱藏后顯示,變成不可更新蔡芳鈞當(dāng)一個Folder ItemTEXT_ITEM隱藏后再顯示,這個Item就變成不可更新了,這個問題是由于APPFLDR中代碼的問題,當(dāng)隱藏的時候,它對這個Item執(zhí)行了set_item_property(prompt_id, DISPLAYED, PROPERTY_OFF)執(zhí)行這個代碼的時候,F(xiàn)orm中的幫助說明里有解釋,DISPLAYED設(shè)為OFF的時候相應(yīng)也會把UPDATEABLE的屬性設(shè)

28、為OFF,而執(zhí)行顯示后,set_item_property(prompt_id, DISPLAYED,PROPERTY_ON)并不會相應(yīng)的把這個Item設(shè)為可更新,所以Item就變灰了。要解決這個問題可以在WHEN-NEW-RECORD-INSTANCE中寫下相應(yīng)對Item控制的方法但是如果是多行可能需要點(diǎn)到相應(yīng)的行上才會將該行的Item顯示為可更新,否那么都是灰的,也可以在Form級的觸發(fā)器FOLDER_RETURN_ACTION中對Item進(jìn)行邏輯控制,這樣就不會出現(xiàn)上面的情況了。Folder開發(fā)步驟基于模版這里的模版指漢得提供的,文檔由賴旭華提供。基于模版新建Form用Form Buil

29、der翻開TEMPLATE_FOLDER.fmb,把名稱改為一個有意義的名稱,并另存為相同名稱的fmb文件。關(guān)閉TEMPLATE_FOLDER.fmb,然后再翻開剛剛保存的文件進(jìn)行修改。如下列圖:創(chuàng)立數(shù)據(jù)塊右鍵Folder數(shù)據(jù)塊,運(yùn)行數(shù)據(jù)塊向?qū)?,來?chuàng)立一個數(shù)據(jù)塊,取一個有意義的名字,如ITEM_RELATION。如下列圖:創(chuàng)立標(biāo)題塊將FOLDER_PROMPT數(shù)據(jù)塊改成一個有意義的名字,如ITMRE_PROMPT,并把FOLDER_PROMPT數(shù)據(jù)塊中的FIELD1項刪除。如下列圖:創(chuàng)立標(biāo)題塊把ITEM_RELATION中需要顯示的項設(shè)置為在堆疊畫布FOLDER_STK中顯示,并清空屬性面板里

30、的“提示屬性,然后把物理屬性中的X軸坐標(biāo)和Y軸坐標(biāo)分別設(shè)為0和0.25。項的子類屬性按實(shí)際需要選擇即可創(chuàng)立標(biāo)題塊把上一步設(shè)置的項復(fù)制到ITMRE_PROMPT數(shù)據(jù)塊中按住Ctrl拖動,然后選復(fù)制,并把這些項的子類信息設(shè)置為FOLDER_PROMPT_MULTIROW,物理屬性中的X軸坐標(biāo)和Y軸坐標(biāo)分別設(shè)為0和0,然后分別給它們一個有意義的初始值。這些項的寬度屬性決定了在上一步設(shè)置的項的顯示寬度,所以調(diào)節(jié)顯示寬度需要在這個塊的項里調(diào)。如下列圖:更改觸發(fā)器翻開WHEN-NEW-FORM-INSTANCE觸發(fā)器,加上如下語句:app_folder.define_folder_block(PTSITM

31、RE, ITEM_RELATION, ITMRE_PROMPT, FOLDER_STK, MAIN);app_folder.event(INSTANTIATE); 其中中的參數(shù)含義依次為:Form名,數(shù)據(jù)塊名,PROMPT數(shù)據(jù)塊名,堆疊畫布名,主窗口名。 六個步驟做下來之后,F(xiàn)older就完成了。注意:Folder顯示的項不需要手動去畫布里調(diào)整布局,運(yùn)行的時候會自動排列開來。橫向滾動條會自動產(chǎn)生。JTF Grid開發(fā)步驟本節(jié)標(biāo)題說明:標(biāo)準(zhǔn)指做JTF Grid都要做而且是一樣的步驟,可以考慮做個模版了;普通指和做普通Form一樣;特殊指做JTF Grid都要做但需要根據(jù)實(shí)際內(nèi)容作修改。什么是JT

32、F GridJTF Grid不是Form的標(biāo)準(zhǔn)功能,而是Oracle自己在EBS開發(fā)中總結(jié)出來的“可配置塊字段:塊中有多少字段可以通過專門的界面定義。對于開發(fā)來說,要做的事情就是用“遵循JTF Grid標(biāo)準(zhǔn)換取“增刪字段無需修改Form代碼。拷貝標(biāo)準(zhǔn)JTF Grid對象標(biāo)準(zhǔn)對象組翻開JTF,把對象組“JTF_GRID拖到我們自己的Form中,并選擇“Subclass而非“Copy,這個和前面講的Folder一樣。這樣會自動產(chǎn)生一系列用于JTF_GRID的對象:塊、畫布、參數(shù)、Property Classes、Window,尤其注意Form級觸發(fā)器JTF_GRID_EVENT。這些都不用修改。過

33、程從JTFSTAND.fmb拷貝JTF_CUSTOM_GRID_EVENT過程到我們自己的Form中,然后補(bǔ)上事件處理,暫時全部放null:PROCEDURE jtf_custom_grid_event(gridname IN VARCHAR2, eventtype IN VARCHAR2) ISBEGIN IF eventtype = jtf_grid_events.hyperlink_event THEN NULL; ELSIF eventtype = jtf_grid_events.new_record_event THEN NULL; ELSIF eventtype = jtf_gri

34、d_events.popup_event THEN NULL; ELSIF eventtype = jtf_grid_events.row_selection_event THEN NULL; ELSIF eventtype = jtf_grid_events.end_of_find_event THEN NULL; ELSIF eventtype = jtf_grid_events.doubleclick_event THEN NULL; END IF;END;引用JTF Grid的PLL庫標(biāo)準(zhǔn)選中Attached Libraries,點(diǎn)擊“+,選擇JTF_GRID.pll,其將自動引用JT

35、F_UTIL、JTFDEBUG。如果本地沒有請先從效勞器下載。創(chuàng)立數(shù)據(jù)庫對象普通創(chuàng)立數(shù)據(jù)庫對象,沒有任何特殊之處,可以使用現(xiàn)成的View和Table,本例子使用gl_je_headers_v。做之前,請確保有總賬憑證,不然沒有數(shù)據(jù);或者你也可以隨便換個有數(shù)據(jù)的視圖,但下面的電子表格定義、觸發(fā)器代碼要注意跟著換。定義CRM電子表格特殊N: CRM Adminstrator/Spreadtable/Metadata Administraion輸入電子表格名稱、源視圖、字段定義:創(chuàng)立Grid塊普通手工創(chuàng)立非數(shù)據(jù)庫塊,標(biāo)準(zhǔn)起見,塊名后加“GRID,這里是“DEMO_GRID。當(dāng)然了,從Template

36、開始的常規(guī)修改步驟也是要做的。修改Grid塊特殊手工創(chuàng)立非數(shù)據(jù)庫項,并設(shè)置這些字段的關(guān)鍵屬性:字段名Subclass說明READONLY_GRIDJTF_GRID_ITEM必須,名字隨便FINDBUTTON可選DETAILBUTTON可選布局Item到畫布普通把DEMO_GRID布局到畫布,什么畫布都可以,我們需要設(shè)置其在畫布的啟示位置、高度、寬度,因?yàn)樵O(shè)計時在畫布上不容易看到,我們可以直接設(shè)置屬性。追加Form級觸發(fā)器特殊在WHEN-NEW-FORM-INSTANCE中追加:IF NOT jtf_grid.getbooleanproperty(DEMO_GRID.READONLY_GRID,

37、 jtf_grid_property.initialized) THEN jtf_grid.init(jtf_custom.grid_name, GL_JE_HEADERS_V); jtf_grid.setbooleanproperty(DEMO_GRID.READONLY_GRID, jtf_grid_property.allow_multiple_row_selection, FALSE);END IF;編寫Find Button觸發(fā)器特殊用戶點(diǎn)擊Find,通常是彈出查詢界面,輸入完條件再執(zhí)行查詢。我們這里省去查詢條件界面,直接在FIND按鈕的WHEN-BUTTON-PRESSED中編寫:

38、jtf_grid.removeallbindvariables(DEMO_GRID.READONLY_GRID);-jtf_grid.setbindvariable(DEMO_GRID.READONLY_GRID, CURRENCY_CODE, CNY);operty(DEMO_GRID.READONLY_GRID, jtf_grid_property.where_clause, CURRENCY_CODE=CNY);IF jtf_grid.getbooleanproperty(DEMO_GRID.READONLY_GRID, jtf_grid_property.is_populated) T

39、HEN jtf_grid.refresh(DEMO_GRID.READONLY_GRID);ELSE jtf_grid.populate(DEMO_GRID.READONLY_GRID);END IF;處理選擇事件特殊用戶選中某行后,我們可以根據(jù)其選中的信息去翻開一個普通塊,這樣首先需要在FIND按鈕的WHEN-BUTTON-PRESSED中編寫:jtf_grid.RequestRowSelection(DEMO_GRID.READONLY_GRID);可以翻開該包查看其具體作用。然后在過程jtf_custom_grid_event中響應(yīng)選擇事件:PROCEDURE jtf_custom_gr

40、id_event(gridname IN VARCHAR2, eventtype IN VARCHAR2) IS grid_selection JTF_GRID_PROPERTY.ROW_SELECTION_TYPE; l_startRow number;BEGIN IF eventtype = jtf_grid_events.hyperlink_event THEN NULL; ELSIF eventtype = jtf_grid_events.new_record_event THEN NULL; ELSIF eventtype = jtf_grid_events.popup_event

41、THEN NULL; ELSIF eventtype = jtf_grid_events.row_selection_event THEN grid_selection := jtf_grid.GetRowSelection(DEMO_GRID.READONLY_GRID); if grid_selection.COUNT 0 then l_startRow := grid_selection(1).startRow; fnd_message.debug(jtf_grid.GetColumnCharValue(DEMO_GRID.READONLY_GRID, l_startRow, NAME)

42、; -Do any thing here END IF; ELSIF eventtype = jtf_grid_events.end_of_find_event THEN NULL; ELSIF eventtype = jtf_grid_events.doubleclick_event THENnull; END IF;END;問題:如何響應(yīng)雙擊事件呢?上傳&編譯&運(yùn)行運(yùn)行結(jié)果如下:代碼請見。注,上述觸發(fā)器代碼通常全部組織到一個名字為“JTF_CUSTOM的Program Units中,這樣就可以定義一個變量GRID_NAME來保存字段名,免得每處代碼重復(fù)寫DEMO_GRID.READONLY

43、_GRID。如果要使Window變化時Grid跟著變,那么需要參考Folder的做法,在WHEN-WINDOW-RESIZED觸發(fā)器中調(diào)整畫布大小、Grid的大小。多語言開發(fā)國際化支持說明EBS的國際化支持,也叫多語言支持,包含多個層面:數(shù)據(jù)庫級別:字符集支持多國語言,如UTF8支持全球所有語言數(shù)據(jù)級別:采用_B表+_TL表+ENV(LANG)環(huán)境變量+_VL表+“小地球來實(shí)現(xiàn)消息級別:所有消息,通過分語種維護(hù)的消息字典獲取文件級別:采用分語種目錄的形式來實(shí)現(xiàn)Forms、Reports的國際化支持Form自身的多語言版本EBS時運(yùn)行時“找fmx文件,實(shí)際上是根據(jù)用戶登錄時選擇的語言,首先到$_

44、TOP/forms/下找fmx文件,如果沒有那么繼續(xù)在$_TOP/forms/US下找。也就是說,需要我們維護(hù)不同語言的Form編譯到不同的目錄。不過Oracle提供了工具“Oracle Translation Builder (OTB),可以將多個語言的字符串保存入1個fmb文件,這樣在設(shè)計時根據(jù)NLS_LANG 自動顯示該語言的內(nèi)容,編譯時、運(yùn)行時也是同樣道理。更多多語言方面的轉(zhuǎn)換,請參考“Customer Translations。數(shù)據(jù)多語言開發(fā)步驟要求熟練掌握基于Template、基于View的開發(fā)過程;要求熟悉EBS中“小地球的操作。下面結(jié)合例子直接說明開發(fā)步驟和注意點(diǎn),假定只有2個

45、字段,1個需要維護(hù)多語言信息,不考慮彈性域字段。數(shù)據(jù)庫對象的要求:基表B沒有什么特殊之處:create table SCF.CUX_MULTILINGUAL_DEMO_B( MULTILINGUAL_DEMO_ID NUMBER not null, MULTILINGUAL_DEMO_CODE VARCHAR2(30) not null, CREATED_BY NUMBER(15) not null, CREATION_DATE DATE not null, LAST_UPDATED_BY NUMBER(15) not null, LAST_UPDATE_DATE DATE not null,

46、 LAST_UPDATE_LOGIN NUMBER(15);create unique index SCF.CUX_MULTILINGUAL_DEMO_B_U1 on SCF.CUX_MULTILINGUAL_DEMO_B (MULTILINGUAL_DEMO_ID);Create Sequence SCF.CUX_MULTILINGUAL_DEMO_B_S;Create Synonym CUX_MULTILINGUAL_DEMO_B For scf.CUX_MULTILINGUAL_DEMO_B;Create Synonym CUX_MULTILINGUAL_DEMO_B_S For scf

47、.CUX_MULTILINGUAL_DEMO_B_S;數(shù)據(jù)庫對象的要求:多語言表TL主鍵字段:基表主鍵+LANGUAGE。其他字段:需要維護(hù)多語言的字段+Who字段+SOURCE_LANG。create table SCF.CUX_MULTILINGUAL_DEMO_TL( MULTILINGUAL_DEMO_ID NUMBER not null, DESCRIPTION VARCHAR2(255), LANGUAGE VARCHAR2(4) not null, CREATED_BY NUMBER(15) not null, CREATION_DATE DATE not null, LAST_

48、UPDATED_BY NUMBER(15) not null, LAST_UPDATE_DATE DATE not null, LAST_UPDATE_LOGIN NUMBER(15), SOURCE_LANG VARCHAR2(4) not null);create unique index SCF.CUX_MULTILINGUAL_DEMO_TL_U1 on SCF.CUX_MULTILINGUAL_DEMO_TL(MULTILINGUAL_DEMO_ID, LANGUAGE);Create Synonym CUX_MULTILINGUAL_DEMO_TL For scf.CUX_MULT

49、ILINGUAL_DEMO_TL;數(shù)據(jù)庫對象的要求:視圖VL該視圖根據(jù)登錄用戶的語言過濾數(shù)據(jù):Create Or Replace View CUX_MULTILINGUAL_DEMO_VL AsSELECT b.ROWID row_id, b.multilingual_demo_id, b.multilingual_demo_code, t.descriptioned_by, b.last_update_date, b.last_update_login FROM scf.cux_multilingual_demo_b b, scf.cux_multilingual_demo_tl t WHE

50、RE b.multilingual_demo_id = t.multilingual_demo_id AND t.LANGUAGE = userenv(LANG);數(shù)據(jù)庫對象的要求:表操作API需要同時操作TL表,同時提供add_language過程,供EBS啟用新語言時使用。以下代碼僅關(guān)注“-Process TL table here局部即可:CREATE OR REPLACE PACKAGE cux_multilingual_demo_pkg AUTHID CURRENT_USER AS /*= * PROCEDURE: insert_row() *=*/ PROCEDURE insert

51、_row(x_row_id IN OUT VARCHAR2, x_multilingual_demo_id IN OUT NUMBER, p_multilingual_demo_code IN VARCHAR2, p_description IN VARCHAR2, p_creation_date IN DATE, p_created_by IN NUMBER, p_last_update_date IN DATE, p_last_updated_by IN NUMBER, p_last_update_login IN NUMBER); /*= * PROCEDURE: lock_row()

52、*=*/ PROCEDURE lock_row(p_multilingual_demo_id IN NUMBER, p_multilingual_demo_code IN VARCHAR2, p_description IN VARCHAR2 DEFAULT NULL); /*= * PROCEDURE: update_row() *=*/ PROCEDURE update_row(p_multilingual_demo_id IN NUMBER, p_multilingual_demo_code IN VARCHAR2, p_description IN VARCHAR2, p_last_u

53、pdate_date IN DATE, p_last_updated_by IN NUMBER, p_last_update_login IN NUMBER); /*= * PROCEDURE: delete_row() *=*/ PROCEDURE delete_row(p_multilingual_demo_id IN NUMBER); /*= * PROCEDURE: add_language() *=*/ PROCEDURE add_language;END cux_multilingual_demo_pkg;/CREATE OR REPLACE PACKAGE BODY cux_mu

54、ltilingual_demo_pkg AS /*= * PROCEDURE: insert_row() *=*/ PROCEDURE insert_row(x_row_id IN OUT VARCHAR2, x_multilingual_demo_id IN OUT NUMBER, p_multilingual_demo_code IN VARCHAR2, p_description IN VARCHAR2, p_creation_date IN DATE, p_created_by IN NUMBER, p_last_update_date IN DATE, p_last_updated_

55、by IN NUMBER, p_last_update_login IN NUMBER) IS CURSOR c IS SELECT ROWID FROM cux_multilingual_demo_b WHERE multilingual_demo_id = x_multilingual_demo_id; BEGIN IF x_multilingual_demo_id IS NULL THEN SELECT cux_multilingual_demo_b_s.NEXTVAL INTO x_multilingual_demo_id FROM dual; END IF; INSERT INTO

56、cux_multilingual_demo_b (multilingual_demo_id, multilingual_demo_code, created_by, creation_date, last_updated_by, last_update_date, last_update_login) VALUES (x_multilingual_demo_id, p_multilingual_demo_code, p_created_by, p_creation_date, p_last_updated_by, p_last_update_date, p_last_update_login)

57、; -Process TL table here INSERT INTO cux_multilingual_demo_tl (multilingual_demo_id, description, created_by, creation_date, last_updated_by, last_update_date, last_update_login, LANGUAGE, source_lang) SELECT x_multilingual_demo_id, p_description, p_created_by, p_creation_date, p_last_updated_by, p_

58、last_update_date, p_last_update_login, l.language_code, userenv(LANG) FROM fnd_languages l WHERE l.installed_flag IN (I, B) AND NOT EXISTS (SELECT NULL FROM cux_multilingual_demo_tl t WHERE t.multilingual_demo_id = x_multilingual_demo_id AND t.LANGUAGE = l.language_code); OPEN c; FETCH c INTO x_row_

59、id; IF (c%NOTFOUND) THEN CLOSE c; RAISE no_data_found; END IF; CLOSE c; END insert_row; /*= * PROCEDURE: lock_row() *=*/ PROCEDURE lock_row(p_multilingual_demo_id IN NUMBER, p_multilingual_demo_code IN VARCHAR2, p_description IN VARCHAR2 DEFAULT NULL) IS CURSOR c IS SELECT multilingual_demo_id, mult

60、ilingual_demo_code FROM cux_multilingual_demo_b WHERE multilingual_demo_id = p_multilingual_demo_id FOR UPDATE OF multilingual_demo_id NOWAIT; rec c%ROWTYPE; -Process TL table here CURSOR c1 IS SELECT description FROM cux_multilingual_demo_tl WHERE multilingual_demo_id = p_multilingual_demo_id AND L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論