Oracle Form 使用注意事項

來源:互聯網
上載者:User

一、處理錯誤
 
1.當錯誤出現在Oracle Form PL/SQL中時,處理的方法如下: 
 IF (err_condition) THEN  
    Fnd_message.set_name(appl_short_name,message_name); 
    Fnd_message.error;  
 RAISE form_trigger_failure; 
 END IF; 
 
2.當錯誤出現在Stored Procedure中時,處理的方法如下: 
 IF (err_condition) THEN 
     Fnd_message.set_name(appl_short_name,message_name); 
     App_exception.raise_exception; 
 END IF;
 
 
3.當我們在測試FORM_SUCCESS,FORM_FAILURE和FORM_FATAL的時候,
  可能觸發了目地的子程式而導至它們的值發生改變,例如下面這個例子:
 
  GO_ITEM(‘emp.empno’);
 
 IF FROM_FAILURE THEN 
 RAISE FORM_TRIGGER_FAILURE;  
 END IF; 
 
 GO_ITEM引起其它的觸發器觸發,比如WHEN-NEW-ITEM-INSTANCE,儘管GO_ITEM可能執行失敗,
 但是後面的Trigger有可能執行成功,這就意味著FROM_FAILURE是失效的,
 為了避免這種情況發生,可以改為下面這樣:
 
 GO_ITEM(‘emp.empno’); 
 IF :SYSTEM.CURSOR_ITEM != ‘EMP.EMPNO’ THEN  
    RAISE FORM_TRIGGER_FAILURE;  
 END IF;
 
 4.避免使用RAISE_APPLICATION_ERROR,因為它與我們使用的進程服務的設置有衝突 
 
 5.不要使用CALL_FORM,你可以使用FND_FUNCTION.EXECUTE來代替CALL_FORM或是OPEN_FORM
 
 
 二、在Oracle Application中使用PL/SQL中需要注意的地方
 
 1.使用select … from dual來代替select … from sys.dual ;
 
 2.只返回一條行的Select查詢要處理NO_DATA_FOUND例外, INSERT 、 UPDATE 、 DELETE
   不會產生這個例外,要使用SQL%NOTFOUND來檢查是否有數據  
 
 三、 Triggers in Forms 
 1.所有的BLOCK或是FIELD的TRIGGER的執行類型都是Override或是Before,一般情況下,
   使用的是Before類型,因為通常相同的Trigger在FORM層級同樣也會觸發.
   這個例外是如果彈性域調用了From層次的POST-QUERY ,但是你在BLOCK的POST-QUERY中重設了
   這個塊的查詢狀態,像這種情況, BLOCK層的POST-QUERY必須將執行類型設置為After 
 
 四、使用APPCORE來代替Oracle Forms Built-In, APPCORE包含了一些等同於Oracle Forms built-ins的功能
 
 EXIT_FORM不要直接使用EXIT_FROM,應該始終使用do_key(‘EXIT_FORM’),
 如果需要退出整個Oracle applications suite,應該首先調用copy(‘Y’,’GLOBAL.APPCORE_EXIT_FLAG’);
 然後再調用Do_key(‘EXIT_FORM’); 
 
 SET_ITEM_PROPERTY使用APP_ITEM_PROPERTY.SET_PROPERTY和APP_ITEM_PROPERTY.SET_VISUAL_ATTRIBUTE來代替 

 GET_ITEM_PROPERTY使用APP_ITEM_PROPERTY.GET_PROPERTY來代替 
 OPEN_FORM使用FND_FUNCTION.EXECUTE來代替 
 CLEAR_FORM使用do_key(‘CLEAR_FORM’)來代替
 
 COMMIT使用do_key(‘COMMIT_FORM’)來代替
 
 EDIT_FIELD使用do_key(‘EDIT_FIELD’)來代替,這個程式噹噹前的ITEM是DATE的時彈出Calendar
 
 VALIDATE使用APP_STANDARD.APP_VALIDATE來代替 
 
 五、 Coding Table handlers (參考Oracle Application Developer ’ s Guide)
 
 
 六、設置物件的屬性 
 1. Canvas的大小最大隻能設置到高5 inch 、寬7.8 inch ,目的是為了更好的適應客戶端的環境 
 2.使用APP_CUSTOM.OPEN_WINDOW和APP_CUSTOM.CLOSE_WINDOW來打開和關閉window,
   不過使用go_block也可以達到打開window的功能
 
 3. APP_SPECIAL用來控制菜單項是否可用 
 
 七、設置ITEM的一些屬性
 
1.Text Items
 
 一般情況下,大多數的Text items使用TEXT_ITEM這個屬性類,而需顯示多行的使用TEXT_ITEM_MULTILINE屬性類,
 如果是field是date類型使用TEXT_ITEM_DATE 
 設置它的查詢長度為255個字元
 
 
 2.Date Fields 
 可以使用$$DBDATE$$或是$$DBDATETIME$$來設置作為它的預設日期
 
 
 3.使LOV在ENTER-QUERY模式下應用於一個ITEM ,創建一個ITEM層級的KEY-LISTVAL觸發器,如下: 
 IF (:SYSTEM.MODE != ‘ENTER-QUERY’) THEN 
    LIST_VALUES;  
 ELSE
   SHOW_LOV(‘query lov’); 
 END IF;
 
 
4. Flexfields  
   鍵彈性域使用的是’ENABLE_LIST_LAMP’這個LOV ,並且將驗證設為No ,描述性彈性域不會使用到LOV
 
 
 八、控制Window 、 BLOCK
 
1. 控制運行時期的window
 
 例如在採購訂單視窗包含了一個標籤叫做’Lines’的按鈕,點擊它去到另一個視窗LINES這個塊,需要的步驟如下:
 
 
 第一步:修改以下的Trigger
 
 Trigger : PRE-FORM 
 App_window.set_window_position(‘HEADER’,’FIRST_WINDOW’);
 
 
 Trigger: WHEN-BUTTION-PRESSED 
 app_custom.open_window(‘LINES’); 
 第二步:修改APP_CUSTOM.OPEN_WINDOW
 
 If wnd = ‘LINES’ then 
    App_window.set_window_position(‘LINES’,’CASCADE’,’HEADER’);  
 Go_block(‘lines’); 
 End if;
 
 可用的類型有以下幾種: 
 ◆ CASCADE此類型當子視窗打開的時候,會顯示在父視窗的上面並距離父視窗的右邊0.3,通常使用於明細視窗  
 ◆ RIGHT, BELOW略 
 ◆ OVERLAP略 
 ◆ CENTER略  
 ◆ FIRST_WINDOW通常用於主視窗
 
 
 2.關閉視窗 
 一個FORM具有三個視窗分別是’Header’,’Lines’和’Shipments’,Shipments是Lines的明細視窗,
 而Lines是Header的明細視窗,從邏輯上講關閉視窗如下: 
 Procedure close_window(wnd varchar20 is
 
 If wnd = ‘HEADER’ then
 
App_window.close_first_window;
 
 Elsif wnd = ‘lines’ then
 
App_custom.close_window(‘shipments’);
 
 If (wnd = get_view_property(get_item_property(:system.cursor_item,item_canvas), 

 window_name) then
 
 go_block(‘header’); 
 end if; 
 elsif wnd = ‘shipments’ then
 
 If (wnd = get_view_property(get_item_property(:system.cursor_item,item_canvas),
 
 window_name) then
 
 go_block(‘lines’); 
 end if; 
 end if; 
hide_window(wnd);
 
end;
 
 
3.在執行過程中使用查詢 
 如果你想在打開FORM之前調用一個ROW-LOV或是查詢視窗,在WHEN-NEW-FORM-INSTANCE後面加上:
 
 EXECUTE_TRIGGER(‘QUERY_FIND’); 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.