Oracle ERP 界面开发form.docx
《Oracle ERP 界面开发form.docx》由会员分享,可在线阅读,更多相关《Oracle ERP 界面开发form.docx(24页珍藏版)》请在冰豆网上搜索。
OracleERP界面开发form
OracleForm開發
(1)--FormBuilder前期準備
安裝acleForm6i及補丁以後,你自己開發的Form與OracleEBIS其它的Form不一樣,如:
1.沒有工具欄;
2.不能用通用的快捷鍵F11、Ctrl+F11和F6等等
這種毛病在第一次開發人員的通病。
後來才知道,沒有做好Form前期準備工作,不多說了,開始做事吧
第一:
FTP到OracleEBIS服務器的devappl/au/11.5.0(也就是$AU_TOP)目錄下,下載二個文件夾:
Forms和Resource,將它們保存在目錄D:
/Oralce/OracleForm目錄。
第二:
修改注冊表
2.1開始-->單擊”運行“-->輸入regedit--回車
2.2找到HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE數值名稱:
NLS_LANG,修改數值數據為AMERICAN_AMERICA.UTF8
2.3找到HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE數值名稱:
FORMS60_PATH,修改數值數據為D:
/Oracle/OracleForm/resource;D:
/Oracle/OracleForm/FORMS
呵呵。
。
。
。
。
準備工作做完成。
OracleForm開發
(2)--Form開發入門
開發OracleEBISForm需要套用標準模板TEMPLATE.fmb即可,若自己開發類似的功能的Form,那真是NB人也!
!
!
此文件在D:
/Oracle/OracleForm/Forms目錄中。
了解一下Form中的常用的對像:
1.DataBlocks(數據塊):
相當於數據源,指定數據來源於哪個表、哪個視圖或過程等等。
2.Items(項目)是Form最小單元,也是DataBlocks最小單元,相當也表或視圖也過程的遊標某一段。
3.Canvases(畫布)用於布局數據垮的界面。
畫布與數據塊沒有直接的對應關系,而是直接與Item對應,一個Canvases上的Item可以來源不同的DataBlocks。
4.LOVs(LOV):
相當於下拉列表也列表
5.Parameters(參數)相當於Form的全局變量,用於傳遞參數。
6.RecordGroups(記錄組):
是LOVs的數據源。
7.Windows(窗體):
一個Windows隻能一個Canvases.
8.Form:
一個Form可以多個Windows
下面手工創建一個簡單的Form
第一:
打開文件TEMPLANTE.fmb.另存為HHRALANTEST.fmb
1.1選擇Open,然後彈出一個文件選擇對話框
1.2 打開TEMPLANTE.fmb
1.3另存文件為HHRALANTEST.fmb。
但是,Form的名稱還TEMPLANTE,選中TEMPLANTE-->右擊選擇PropertyPalette-->在Name欄位中輸入HHRALANTEST。
第二:
刪除樣版自帶的對像如下圖
2.1DataBlocks:
BLOCKNAME、DETAILBLOCK
2.2Canveses:
BLOCKNAME
2.3Windows:
BLOCKNAME
第三:
添加DataBlocks
3.1選擇DataBlocks
3.2選擇Create,會彈出NewDataBlocks對話框
3.3選擇Buildanewdatablockmanually
3.4選擇剛才創建的DataBlocks-->右擊選擇PropertyPalette
3.5修改Name為HHRALANTEST,並修改SubclassInformation為BLOCK
3.6QueryDataSourceName輸入HHR_ALAN_TESTS(表名)
第四:
添加Canvases(畫布)
第五添加Windows(窗口)
注意:
5.4中PrimaryCanvas(主要畫布)為第四步添加的畫布HHRALANTEST
第六修改Form之PropertyPalette(特征盤)的屬性,
6.1ConsoleWindow為FIRSTWIND
6.2FirstNavigationDataBlock為HHRALANTEST
第七修改畫布(HHRALANTEST)PropertyPalette的屬性
7.1Window為FIRSTWIND
第八修改觸發器代碼和程序單位
8.1修改Form-->HHRALANTEST-->Triggers-->雙擊PER-FROMW如下圖
8.2修改Form-->HHRALANTEST-->ProgramUnits-->雙擊APP_CUSTOM(PackageBody)如下圖
注意:
若不修改以上二個程序單元,Form無在OracleEBIS中打開和關閉
第九在HHRALANTEST的數據塊(DataBlocks)中添加項目(Item)
9.1選擇Items
9.2創建Items
9.3選擇剛才創建的Item,右擊選擇PropertyPalette
9.4修改相關屬性如下圖
9.5修改Required為Yes,ColumnName欄位中輸入CODE如下圖
9.6選擇Item顯示哪張畫布上
9.7創建Item的標簽說明:
其它Item用重復按照上述方法創建。
注意:
Required為Yes表示在新增或修改時此欄此不能為空
第十 布署各個Item在畫布上的位置。
開發完成後要編譯,按Ctrl+Shift+K編譯通過。
OracleForm開發(3)--編譯Form和掛Form
接著上章節OracleForm開發
(2)--Form開發入門講
第一FTP上傳到$HHR_TOP/forms/US(英文版本目錄)和$HHR_TOP/forms/ZHS(簡體中文版本目錄)。
第二Telnet到OracleForm服務上,一定要用在$AU_TOP/form/US或$AU_TOP/forms/ZHS目錄下編譯Form
輸入如下命令:
f60gen$HHR_TOP/forms/US/HHRALANTEST.fmbapps/appspassoutput_file=$HHR_TOP/forms/US/HHRALANTEST.fmx
f60gen:
命令頭固定的
$HHR_TOP/forms/US/HHRALANTEST.fmb:
為第一步文件FTP上傳的目錄
apps/appspass:
編譯form文件一定要用apps用戶,因此也是固定的。
appspass是apps用戶的密碼。
output_file=$HHR_TOP/forms/US/HHRALANTEST.fmx:
編譯form文件到指定的目錄和名稱(HHRALANTEST.fmx)
第三在Oracle EBIS系注冊表單
1. 添加Form(SystemAdministrator-->Application-->Form)
1.1輸入Form(表單名稱)注意一定要與Form文件名一樣:
HHRALANTEST
1.2選擇此Form中哪個系統中用的,本例選擇在HHRPOCustomization
1.3輸入UserFormName(用戶表單名稱)
1.4輸入說明文件字
2.說明Form功能(SystemAdministrator-->Application-->Function)
2.1輸入Function(功能名稱)
2.2輸入UserFunctionName(用戶功能名稱)
2.3定到位Properties.
2.4選擇Type(功能類型)為Form
2.5定到位Form
2.6輸入或選擇HHRALANTEST(剛才添加的表單)
其它項跟需要也可以一一填寫上去
3.將上步創建的功能添加到菜單(Menus)中去
3.1查找到指定的菜單
3.2輸入Prompt(提示說明)
3.3輸入或選擇功能HHRALANTEST
OracleForm開發(4)--計設LOV(下拉列表)
上節學習開第一個Form,這個節在添加一個彈出下拉框
第一步:
添加記錄組
1.1 選中RecordGroups
1.2 單擊Create
1.3 輸入查詢SQL
1.4 單擊OK
1.5 修改剛才創建的RecordGroups為VENDORRG
第二步:
添加LOVs
2.1選中LOVs
2.2單擊Create
2.3選擇BuildanewLOVmanually,單擊OK
2.4改修LOVs為VENDOR_LOV
2.5打開VENDOR_LOV的特征盤(Palette),Title輸入供應商,選擇RecordGroup為VENDORRG
2.6單擊ColumnMappingProperties,顯示LOVColumnMapping窗口,在ColumnNames下拉框中輸入列名VENDOR_CODE(此列名與上面RecordGroup為VENDORRG中的SQLSelect語句字段一樣),ReturnItem選擇返回給數據塊HHRALANTEST中項目VENDOR_CODE,DisplayWidth是顯示列寬,ColumnTitle是顯示列名。
如果不需返回給某項目,ReturnItem為空。
但是,DisplayWindow和ColumnTitle是一定要輸入。
OracleForm開發(5)--Form消息提示
下面給大家收集一下相關OracleForm的消息提示
1.FND_MESSAGE.SET_STRING(‘’)。
此消息一定要結合FND_MESSAGE.SHOW或FND_MESSAGE.ERROR或FND_MESSAGE.HINT或FND_MESSAGE.WARN或FND_MESSAGE.QUESTION使用才能彈出對話窗口或顯示消息。
例如:
FND_MESSAGE.SET_STRING(‘陳顯平測試OracleForm的消息,’||Chr(10)||
‘大家看一下是否成功?
’);
FND_MESSAGE.SHOW;
2.FND_MESSAGE.SET_NAME(‘’,’’)
此消息也要結合FND_MESSAGE.SHOW或FND_MESSAGE.ERROR或FND_MESSAGE.HINT或FND_MESSAGE.WARN或FND_MESSAGE.QUESTION使用才能彈出對話窗口或顯示消息。
參數說明:
:
用應產品簡稱.如下圖紅色圓框:
:
消息代碼。
若在系統表中找不對應消息說明,則消息說明自動默認為。
還有,消息代碼使用前自動轉換大寫。
為何OracleForm要內置此函數?
它是為了系統定義多語言版本。
例如:
FND_MESSAGE.SET_NAME(‘FPT’,’ORACLE_001’);
FND_MESSAGE.ERROR;
3.FND_MESSAGE.DUBEG(‘’);
它是用於調試的,效果等同於FND_MESSAGE.SET_NAME或FND_MESSAGE.SET_STRING結合FND_MESSAGE.SHOW使用。
例如:
FND_MESSAGE.DEBUG(‘陳顯平測試OracleForm的消息,’||Chr(10)||
‘大家看一下是否成功?
’);
4.FND_MESSAGE.SHOW、FND_MESSAGE.ERROR、FND_MESSAGE.HINT和FND_MESSAGE.WARN的區別
FND_MESSAGE.SHOW提示的是注意消息,如下圖
FND_MESSAGE.ERROR提示的是誤錯消息,如下圖
FND_MESSAGE.HINT是顯示在表單中的狀態欄,如下圖
FND_MESSAGE.WARN提示有“確認”和“取消”二個按鈕,選擇進下一步操作,它與FND_MESSAGE.QUESTION類似。
5.FND_MESSAGE.QUESTION(BUTTON1INVARCHAR2,BUTTON2INVARCHAR2,BUTTON3INVARCHAR2,DEFAULT_BTNINNUMBER,CANCEL_BTNINNUMBER,ICONINVARCHAR2)
用於自定義對話按鈕,比FND_MESSAGE.WARN要靈活多了。
例如:
FND_MESSAGE.SET_STRING(‘陳顯平測試OracleForm的消息,’||Chr(10)||‘大家看一下是否成功?
’);
Int_Choose:
=FND_MESSAGE.QUESTION(‘確定’,null,’取消’,1,2,’NOTE’);
IfInt_Choose=2Then
Null;
ElseIfInt_Choose=1Then
Null;
EndIf;
OracleForm開發(6)--使用TabCanvas和StackedCanvas
按照OracleForm開發
(2)—Form入門的第一到第二步步驟創建一個HHRJEWELS表單。
使用數據塊向導導入三表表分別:
HHR_JEWEL_ITEMS、HHR_JEWEL_STONE和HHR_JEWEL_GOLDS,基中導入的數據塊名與表名相同,但是可以重命名(如HHR_JEWEL_ITEMSW重命名為HHRJEWEL,HHR_JEWEL_STONE重命名為HHRSTONE),數據塊向導導入的好處就是數據塊和項目屬性默認與表結構相同,如數據類型、字段長度和是否允許為空等等,減少手工設置。
HHR_JEWEL_STONE和HHR_JEWEL_GOLDS是表HHR_JEWEL_ITEMS二個屬性描述表,類似於PO明細與PO主題關系。
因此,需要創建它們之間關系:
1.選取數據塊HHRJEWEL下的Relations
2.單擊創建按鈕
3.選擇細明數據塊HHRSTONE
4.選擇Non-Isolated,若明細表存在記錄,則主題表不能刪除;若選擇isolated並明細表存在記錄,則主題表也能刪除。
5. 入輸ITEM_ID,主題表與明細表之間相關聯的字段。
以同樣方法創建HHRJEWEL與HHR_JEWEL_GOLDS的關系。
在創建二個關系同時,數據塊HHRJEWEL觸發器自動創建二個事件:
ON-POPULATE-DETAILS和ON-CHECK-DELETE-MASTER,程序單元(ProgramUnits)也自動創建三個過程:
Check_Package_Failure、Clear_All_Master_Details和Query_Master_Details。
注意:
要查看二個明細表中的項目ITEM_ID屬性CopyValuefromItem是否為HHRJEWEL.ITEM_ID
創建HHRJEWEL畫布,它為HHRJEWEL窗體的首要畫布。
在此畫布上添加一個框架(Frame),並設置此框架屬性如:
LayoutDataBlock為HHRJEWEL
UpdateLayout為Automatically表示自動布局,若要改為手工布局,則此項為Manually。
當添加項目到畫布時,項目會自動布局。
使用框的好處是方便版面布局和界面簡潔。
但是,我們看到界面中沒有ITEM_ID項目,這個項目是不需要顯示在界面上的,它新增時自動產生的。
因此,在表單新增記錄時,需要在HHRJEWEL數據塊觸發器上添加事件:
ON-INSERT,事件代碼如下:
Declare
MaxItemIDnumber;
begin
selectMax(ITEM_ID)IntoMaxItemIDFromHHR_JEWEL_ITEMS;
IfMaxItemIDisNullThen
MaxItemID:
=1;
Else
MaxItemID:
=MaxItemID+1;
Endif;
:
HHRJEWEL.ITEM_ID:
=MaxItemID;
InsertIntoHHR_JEWEL_ITEMS(ITEM_ID,BAR,JEWEL_NAME,DESCR)
Values(
:
HHRJEWEL.ITEM_ID,
:
HHRJEWEL.BAR,
:
HHRJEWEL.JEWEL_NAME,
:
HHRJEWEL.DESCR
);
End;
創建Tab畫布,與HHRJEWEL畫布是不一樣的,首先需要在工具欄中選擇TabCanvas,然後在HHRJEWEL畫布上繪畫Tab畫布區域大小,這樣就創建了一個Tab畫布。
它默認是一個TabPage。
設置Tab畫布的類型為:
Tab_CANVAS.
分別設置TabPage的標簽名為HHRSTONE和HHRGOLD
但是,我們要在這個TabPage頁上實現表格有水平和垂直滾動條,是不可能的事,因為TabCanvas上不能再放StackedCanvas。
而二個滾條同時出現,就必須要有StackedCanvas。
那怎麼辦呢?
答案還是要用StackedCanvas。
但是,不能在設計時看到效果,隻能在運行form時,才能體現出效果。
下面說一說如何實現吧
1. 在工具欄中,選擇StackedCanvas按鈕,在HHRJEWEL畫布上繪畫StackedCanvas區域大小,重命名為HHRGOLD。
2. 將HHR_JEWEL_GOLD數據塊的垂直滾動條添加到HHRGOLD畫布上。
3. 再在HHRJEWEL畫布上,創建StackedCanvas,命名為HHRGOLDSUB,用於布局HHR_JEWEL_GOLD數據塊中的項目。
4. 添加HHR_JEWEL_GOLD數據塊項目,設置HHRGOLDSUB顯示水平滾動條。
5. 將二個畫布移到TabCanvas上,並重疊在一起。
此時,隨便你選哪一個TabPage都會不有變化,因為二個StackedCanvas不在TabCanvas之上。
6. 按照以上相同方法創建HHRSTONE和HHRSTONESUB到HHRJEWEL畫布。
7. 需求在Form層觸發器中,添加WHEN-TAB-PAGE-CHANGED事件,其中Show_View(‘畫布名稱’)表示顯示參數畫布,Hide_View(‘畫布名稱’)表示隱藏參數畫布。
代碼如下:
界面計設就到此完成。
但是,還需求添加觸發事件,使得程序更完整。
分別在數據塊HHRSTONE和HHR_JEWEL_GOLDS觸發器中,添加PER_QUERY事件,它們事件內容一樣的,當主題數據塊HHRJEWEL.中ITEM_ID項目為空時,對二個明細查詢無效,如下
If:
HHRJEWEL.ITEM_IDIsNullThen
raiseform_trigger_failure;
Endif;
通過FTP上傳到服務上並編譯,還需要設置到某個菜單上。
最終運行結果如下