-------------------------------------------------- -------------
 1.一進頁面就能看到表中已生成數據,而不用按ctrl+f11進行查詢的語句:
在form級的觸發器when-new-form-instance中,
寫如下代碼:
go_block('XXXX');
execute_query;
要查詢的數據塊的名稱
說明:
當使用基於表建立的塊時,可使用塊裡的任何項的GO_BLOCK或者GO_ITEM找到那個塊當查詢數據到一個塊裡去,可通過execute_query進行處理
補充:用DELETE_RECORD從塊中刪除當前記錄,要改變數據庫的記錄,必須使用COMMIT_FORM

 2,什麼辦法可以控制form中File菜單中的Export嗎? 使其失效答:
在FORM中,在FORM級的觸發器EXPORT中,
將其中的代碼app_standard.event('EXPORT');屏蔽掉,改為null;試一試

 3當form啟動時,在pre-form觸發器中instantiate你特定的菜單items
調用app_special.instantiate包
 procedure APP_SPECIAL.INSTANTIATE(
 option_name varchar2, --定義tigger名字
 hint varchar2 default null,--定義菜單實體的名字,使用&來定義菜單實體的鍵盤快捷鍵
 icon varchar2 default null,--
 initially_enabledboolean default true,
 separator varchar2 default null);--定義'LINE'為separator
例子
 app_special.instantiate(’SPECIAL1’,’&rint Order’,’PRINTORD’);

 4,在tool菜單中的check boxes
 --option_name與trigger_name包括關鍵字CHECKBOX(例如:SPECIAL3_CHECKBOX)
 app_special.instantiate(’SPECIAL3_CHECKBOX’,’Spe&cial 3 Box w Line’, ’’,TRUE,’LINE’);
 --調用app_special.set_checkbox來初始化check box的值
app_special.set_checkbox(’SPECIAL3_CHECKBOX’,’TRUE’);
 --在SPECIALn_CHECKBOX函數中和相應的邏輯代碼中測試check box
app_special.get_checkbox
 if (app_special.get_checkbox(’SPECIAL3_CHECKBOX’)=’TRUE’) then
 fnd_message.debug(’Special 3 is True!’);
else
 fnd_message.debug(’Special 3 is False!’);
 end if;

 5,在你在pre-form中instantiate實體,隨意將指定的菜單實體設置為可用或不可用(基於數據塊),
調用APP_SPECIAL.ENABLE
 procedure APP_SPECIAL.ENABLE(option_name varchar2,
state);
在form-level中的pre-block trigger裡面,將你的special菜單的item定義為disable
app_special.enable(’SPECIAL1’,PROPERTY_OFF);
在form-level中的pre-block trigger裡面,將你的special菜單的item定義為able
app_special.enable(’SPECIAL1’,PROPERTY_on);
將所有的special菜單設置為disable
app_special.enable(’SPECIAL’,PROPERTY_OFF);

 6,編輯鼠標右鍵菜單調用APP_POPUP.INSTANTIATE(block或者item層的PRE-POPUPMENU Trigger)
 procedure APP_POPUP.INSTANTIATE(
 option_name varchar2,
 txt varchar2,
 initially_enabled boolean default true,
 separator varchar2 default null);
與app_special.instantiate類似例如:
 APP_POPUP.INSTANTIATE('POPUP1','First Entry');

 7,關於Implementing Zoom Use the Custom Library的學習:
 1. .pll文件可以用form builder打開,修改,創建
 2. .pll文件的編譯方法:
 f60gen module=CUTOM.PLL userid=apps/apps module_type=LIBRARY
 3.當系統不自動激活菜單上的圖標時,可以在數據塊的block-level的when-new-block-instance trigger中添加如下代碼:
以zoom為例子:set_menu_item_property('VIEW.ZOOM',ENABLED,PROPERTY_TURE)
在form-level的相應的trigger(比如zoom trigger)中改寫下列代碼:
custom.event('ZOOM')
 4. fnd_function.exrcute語法:
 procedure FND_FUNCTION.EXECUTE
 (function_name IN varchar2,
 open_flag IN varchar2 default ’Y’,
 session_flag IN varchar2 default ’SESSION’,
 other_params IN varchar2 default NULL,
 activate IN varchar2 default ’ACTIVATE’,
 browser_target IN varchar2 default NULL);
 5.FND_FUNCTION.TEST(function_name IN varchar2)
測試指定的函數是否可以連接,該函數用於form啟動時測試函數的可用性,

 8,彈性域(Flexfields)的總結:
使用FND_KEY_FLEX.DEFINE在item handler中設定key彈性域的定義
 procedure flexfield_item_name(event varchar2)
is
begin
fnd_key_flex.define(
block=>'block_name',
field=>'concatenated_segements_field_name',
id=>'ccid_field_name',
appl_short_name=>'shortname_of_application_used_to_register_flexfield',
code=>'flexfield_code',
NUM=>'structure_number',
any_other_auguments);
)
例:
FND_KEY_FLEX.DEFINE(
BLOCK=>’LINES’,
FIELD=>’ACCTG_FLEX_VALUES’,
 ID=>’GL_ACCOUNT_CC_ID’,--Your ID field is the GL_ACCOUNT_CC_ID item
APPL_SHORT_NAME=>’SQLGL’,
CODE=>’GL#’,
 NUM=>’101’--可以使用GL_SET_OF_BOOKS_ID作為structure id
);
 -------------------------------------------------- --------------------------------
使用FND_DESCR_FLEX.DEFINE在item handler中設定描述性彈性域的定義定義
FND_DESCR_FLEX.DEFINE(
BLOCK=>'BLOCK_NAME',
FIELD=>'DISPLAYED_FLEXFIELD_FIELD_NAME',
APPL_SHORT_NAME=>'SHORTNAME_OF_APPLICATION_USED_TO_REGISTER_FLEXFIELD',
DESC_FLEX_NAME=>'FLEXFIELD_NAME',
ANY_OTHER_ARGUMNTS);

FND_DESCR_FLEX.DEFINE(
BLOCK=>’ORDERS’,
FIELD=>’DESC_FLEX’,
APPL_SHORT_NAME=>’DEM’,
DESC_FLEX_NAME=>’DEM_ORDERS’);
)

 9, COPY命令
 Copies a value from one item or variable into another item or global variable.
Syntax
 PROCEDURE COPY(source VARCHAR2, destination VARCHAR2)
Parameters
 source: The source is a literal value.
 destination: The destination can be either a text item or another global variable.
例:
 COPY( 'Yes', 'GLOBAL.'||global_var_name );
將‘YES’付值給變量global_var_name

 10, message用法總結:
 1.設置信息:
 --FND_MESSAGE.SET_NAME語法:
 procedure FND_MESSAGE.SET_NAME(application_shortnameIN varchar2,message_name IN varchar2);
作用:
從Message Dictionary獲取一條信息一般情況下在FORM中顯示出錯信息使用以下代碼:
 FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
 FND_MESSAGE.ERROR ;
--FND_MESSAGE.RETRIEVE
作用:
取得一條數據庫中的等待信息
 --FND_MESSAGE.SET_STRING (value IN varchar2)
作用:
將字符串放到消息棧中,
--FND_MESSAGE.SET_TOKEN
作用:用值替換message的信息中的變量語法:
 procedure FND_MESSAGE.SET_TOKEN(token_name IN VARCHAR2,value IN VARCHAR2
 translate IN boolean default FALSE);
 --在form用於顯示信息的函數
1.FND_MESSAGE.ERROR
2.FND_MESSAGE.WARN
例子
Example:
FND_MESSAGE.SET_NAME(’SQLAP’,’AP_PAY_MULTI_PAY_VOID’);
 REC_COUNT:= <NUMBER OF PAYMENTS>;
FND_MESSAGE.SET_TOKEN(’NUM_OF_RECS’,REC_COUNT);
 IF (NOT FND_MESSAGE.WARN) THEN
 Raise FORM_TRIGGER_FAILURE;
 END IF;
3.FND_MESSAGE.QUESTION
語法:
FND_MESSAGE.QUESTION(
 button1 IN varchar2 default ‘YES’,
 button2 IN varchar2 default ‘NO’,
 button3 IN varchar2 default ‘CANCEL’;
 default_btn IN number default 1,
 cancel_btn IN number default 3,
 icon IN varchar2 default ‘question’) return number;
說明:
 FND_MESSAGE.QUESTION返回一個被選中的button的number
Example:
 FND_MESSAGE.SET_NAME(’FND’,’ATCHMT-COMMIT BEFORE INVOKING’);
 IF FND_MESSAGE.QUESTION
 (’YES’,’CANCEL’,NULL,1,2,NULL) = 2 THEN
 RAISE FORM_TRIGGER_FAILURE;
 END IF;
4.FND_MESSAGE.SHOW
作用:顯示信息
5.FND_MESSAGE.DEBUG
6.FND_MESSAGE.GET
作用:
取得在message中設置好的message信息

 11設置Item-level和Item-instance-level屬性時需特別的注意,
 Item-level屬性影響所有的記錄,而Item-instance-level屬性只影響特定的記錄(當前行)。

 12fotmatting currency fields(貨幣的轉換和格式化)
 FND_CURRENCY:The Dynamic Currency feature allows different values in arbitrary currencies to be displayed in
 the same report or form, each shown with appropriate formatting.
FND_CURRENCY.GET_FORMAT_MASK(:ORDERS.CURRENCY_CODE,GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH));
 1.取得需對應的貨幣其中:GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH)為返回一個該item的最大長度,
 FND_CURRENCY.GET_FORMAT_MASK(currency_code IN varchar2,field_length IN number)return varchar2;
 2.格式化(需要的話進行匯率轉換)item的貨幣類型
APP_ITEM_PROPERTY.SET_PROPERTY('LINES.PRICE',FORMAT_MASK,
FND_CURRENCY.GET_FORMAT_MASK(:ORDERS.CURRENCY_CODE,
 GET_ITEM_PROPERTY('LINES.PRICE',MAX_LENGTH) ))
 3.動態控制item的顯示格式的觸發範圍在Block-level的Post-query trigger和Item-level的when-validate-item trigger調用handler,控制顯示格式。

 CALENDAR日曆如何實現在form中彈出calendar並返回所選日期的功能?
 1.設text item為日期型, LOV屬性為:ENABLE_LIST_LAMP並且Validate from List LOV—>No
 2.在該text item的KE_LISTVAL下加入如下代碼:calendar.show;
 trigger屬性Execution Hierarchy—>Override,fire in enter-query mode—>No。
使用APP_DATE.FND_DATE取得服務器端的時間環境

 13 , Dependencies item的編程語法:
 1.APP_FIELD.SET_DEPENDENT_FIELD(EVENT,:block.master_item = CONDITION,
‘block.dependent_item’);
用途:A conditionally-dependent item changes validation when the value in the master
 item changes. Specify the condition rather than the master item name.
 This procedure makes an item enterable or not enterable based on whether the master item
 is NULL or a specified condition is TRUE, and clears the field. The dependent item can be
 a text item, check box, or poplist.
 You typically call this procedure in the following triggers:
 ? WHEN–VALIDATE–ITEM on the master field
 ? WHEN–VALIDATE–ITEM on the field(s) the condition is based on or in event INIT
 on the dependent field
 ? PRE–RECORD
 ? POST–QUERY (required only when the dependent item is in a
 multi–record block)
 :block.master_item = CONDITION包括:
 --APP_FIELD.SET_DEPENDENT_FIELD(EVENT,(:block.master_item IS NOT NULL),
 ’block.dependent_item’);用於Multiple items may depend on a single master.
 --APP_FIELD.SET_DEPENDENT_FIELD(EVENT,((:block.master_item1 IS NOT NULL) AND
 (:block.master_item2 IS NOT NULL)),’block.dependent_item’);
用於Two master items may share a dependent item.
--APP_FIELD.SET_DEPENDENT_FIELD(EVENT,’block.master_item,’block.dependent_item’);
用於Cascading dependence - an item can be both master and dependent.
2.APP_FIELD.SET_EXCLUSIVE_FIELD
用途Mutually exclusive items—they look like two items, but behave as one. Use
 APP_FIELD.SET_EXCLUSIVE_FIELD to code.
--APP_FIELD.SET_EXCLUSIVE_FIELD(EVENT,’block.item1’,’block.item2’,’block.item3’);
 Call item handler procedures in:
 – WHEN-VALIDATE-ITEM for each exclusive item
 – PRE-RECORD on the items’ block (Fire in Enter-Query Mode: No)
 – WHEN-CREATE-RECORD on the items’ block
3.APP_FIELD.SET_INCLUSIVE_FIELD
用途Mutually Inclusive Items—one for all and all for one!
 Use APP_FIELD.SET_INCLUSIVE_FIELD to code a set of items where, if any
 of the items is not null, all items are required.
--APP_FIELD.SET_INCLUSIVE_FIELD(EVENT,’block.item1’,’block.item2’);
 ? Call item handler procedures in:
 – WHEN-VALIDATE-ITEM for each inclusive item
 – PRE-RECORD on the items’ block (Fire in Enter-Query Mode: No)
4.APP_FIELD.SET_REQUIRED_FIELD
用途:Conditionally Mandatory items—use APP_FIELD.SET_REQUIRED_FIELD to
 require certain items only if a certain condition is met.
--APP_FIELD.SET_REQUIRED_FIELD(EVENT,(CONDITION),’block.item’);
通常在以下的trigger中調用Dependencies控制邏輯:PRE-RECORD,when-create-record,
 when-validate-item,when-checkbox-changed, when-radio-changed,when-list-changed
和‘INIT’事件。  PRE-RECORD和INIT是在操作數據前初始化這些邏輯,而其他是在item發生變化後驗證這些邏輯,滿足條件則進行後續的動作。
 -------------------------------------------------- ----------------------------
使用APP_ITEM_PROPERTY.SET_PROPERTY代替SET_ITEM_PROPERTY設置item屬性
 APP_ITEM_PROPERTY.SET_PROPERTY modifies the following properties:
 ? DISPLAYED
 ? ENABLED
 ? ENTERABLE
 ? ALTERABLE (item instance level)
 ? ALTERABLE_PLUS (item level)
 ? REQUIRED
注意:
在APP_ITEM_PROPERTY.SET_PROPERTY使用item id或者block.item_name
語法:
 item_id := Find_item(’block_name.item_name’);
app_item_property.set_property(item_id,property_name,setting);
等同於
app_item_property.set_property(’block_name.item_name’,property_name,setting);

 14 , Tab Related Code
 Tab-related Variables與Tab-related相關的變量
 ? :SYSTEM.TAB_NEW_PAGE
 – name of the tab page the user clicked on(取得用戶點擊後的tab頁)
 ? :SYSTEM.EVENT_CANVAS
 – name of canvas that owns the newly-selected tab page(取得用戶新點擊的畫布)
 ? :SYSTEM.TAB_PREVIOUS_PAGE
 – name of the tab page that was topmost before the user
 clicked on the new one(取得在用戶點擊新的頁面前的tab頁)
 Dynamically Changing Tabs
 ? Dynamically hide tabs only at form startup.
 – set_tab_page_property(...VISIBLE)
 ? Dynamically enabling/disabling tabs.
 – set_tab_page_property(...ENABLED...)
 Tab-related Trigger
 ? WHEN-TAB-PAGE-CHANGED
 – fires only when user clicks on a tab
 – cannot be fired programmatically
 – can only exist at the form level

 target_canvas_name VARCHAR2(30) := :system.tab_new_page;--取得當前用戶點擊的tab頁
 curr_canvas_name VARCHAR2(30) := get_item_property(:system.cursor_item,item_canvas);--返回當前畫布的名稱
 current_tab VARCHAR2(30) := get_canvas_property('TAB_LINES_REGIONS',topmost_tab_page);
 --返回在tab畫布上的頂層的tab頁的名字
 set_canvas_property('TAB_LINES_REGIONS', topmost_tab_page, curr_canvas_name); --將當前的畫佈設為可交換頁頂層的tab

 15, Window與Region Behavior編程:
 WINDOW的控制:(使用app_window包來取得標準的窗口控制動作)
 1.打開windows
 --修改PER-FORM觸發器中調用第一個form
 --修改app_custo.open_window中調用windows的名字,打開窗口(用鍵盤切換當前Block或用button打開窗體時,需使用APP_CUSTOM.OPEN_WINDOW函數,語法為APP_CUSTOM.OPEN_WINDOW(‘block_name’)
 APP_CUSTOM.OPEN_WINDOW中又會調用app_window.set_window_position。 如果是Master-Detail Block需要建立coordination關係的,在APP_CUSTOM.OPEN_WINDOW('LINES')時,調用APP_WINDOW.SET_COORDINATION)
 --對於每一個window而言,
 --用app_window.set_coordination來設置必要的關係(
 procedure APP_WINDOW.SET_COORDINATION(event varchar2,coordination varchar2,relation_name varchar2);
 --其中event
 The name of the trigger event (either WHEN-CHECKBOX-CHANGED,WHEN-WINDOW-CLOSED, or OPEN-WINDOW)
--coordination
 IMMEDIATE or DEFERRED. Defaults to IMMEDIATE
--relation_name
 Name of the relation, which is listed in the Oracle Forms Designer under the Block object in the
 Relation object)
 --設置窗體的位子使用app_window.set_window_position(位子包括(CASCADE, RIGHT, BELOW, OVERLAP or CENTER).)
 --COORDINATION,重設
 2.關閉windows
 --與打開form相對,用APP_CUSTOM.CLOSE_WINDOW函數調用windows的名字關閉窗口
 --對於每一個窗口,用app_window.set_coordination來設置必要的關係
 --當第一個窗口關閉時,使用APP_WINDOW.CLOSE_FIRST_WINDOW關閉form
 --避免關閉查詢中的windows
 --將光標從一個關閉的窗口移到前一個數據庫上
 --用hide_window隱藏制定窗口,
 3.設置window title
 --用app_windows.set_title來設置context-dependent信息
 --在PRE-RECORD中調用title
 -------------------------------------------------- -------------------------------------------------- ---------------
當用鍵盤切換當前Block或用button打開窗體時,需使用APP_CUSTOM.OPEN_WINDOW函數可以使用下面的procedure
 PROCEDURE LINES(EVENT VARCHAR2) IS
BEGIN
 IF (EVENT IN ('WHEN-BUTTON-PRESSED', 'KEY-NXTBLK'))
 THEN APP_CUSTOM.OPEN_WINDOW('LINES');
ELSE
 FND_MESSAGE.DEBUG('Invalid event passed to orders.lines: '|| EVENT);
 END IF;
 END LINES;
修改APP_CUSTOM.OPEN_WINDOW函數,打開windows的規則:
 1.設置windows位置;用app_window.set_window_position('你要打開的界面','打開模式--CASCADE, RIGHT, BELOW, OVERLAP or CENTER','前一個頁面')
 2重置master-detail關係(如有需要的話);如果是Master-Detail Block,則需要建立coordination關係,
 APP_WINDOW.SET_COORDINATION(event varchar2,coordination varchar2,relation_name varchar2);如
 APP_WINDOW.SET_COORDINATION('OPEN-WINDOW'--觸發事件(包括‘WHEN–CHECKBOX–CHANGED,
 WHEN–WINDOW–CLOSED, or OPEN–WINDOW)’),:control.orders_lines--需要調用coordination的數據塊(IMMEDIATE or DEFERRED. Defaults to IMMEDIATE),'ORDERS_LINES'--主從關係的名字Name of the relation ,);
 3導航到window中的一個block。 go_block('block')
 4必要時需要設置窗體屬性SET_WINDOW_PROPERTY('LINES',VISIBLE,PROPERTY_TRUE);
 -------------------------------------------------- --
對於APP_WINDOW.SET_COORDINATION的進一步理解:(用於主從關係中)
 This call sets the deferred coordination attribute of a relation to ON or
 OFF based on the state of the coordination check box. The check box is
 either ”DEFERRED” or ”IMMEDIATE.”For a closed window, the relation is always ”DEFERRED.”
 When coordination is set to ”DEFERRED,” AutoQuery is turned on.
 coordination check box選中與否決定其取值是‘IMMEDIATE’還是‘DEFERRED’。 如果coordination check box選中的話,
即使焦點在Master window時,Detail window中數據會於Master window同步;如果coordination check box沒有選中,
 Detail window的內容不會於Master window同步,直到焦點落在Detail window時,系統才會執行查詢更新數據。
這個過程自己試驗一下會非常的清楚。
使用coordination check box必須在其WHEN-CHECKBOX-CHANGED trigger中重置Master-Detail windows的同步關係。
------------------------------------------
設置上下文相關聯的windows的標題:
動態設置相關聯的窗體標題依靠APP_WINDOW.SET_TITLE函數,
注意在兩類trigger中需要調用它。 一類是Block-level的pre-record和on-insert trigger,
另一類是相關聯字段的when-validate-item trigger
 APP_WINDOW.SET_TITLE函數用法:
APP_WINDOW.SET_TITLE('ADJ_RECEIVE',ARAMETER.ORG_CODE);
其中ADJ_RECEIVE是window的名字,用於設置window的title

 16,常用item事件包括:
 when_validate_item :調用一個item的驗證並且設置動態的item屬性
 when_new_record_unstance :重置item屬性到默認狀態給一個新的紀錄。
 init:測試當前條件,必要時重置默認屬性和動態屬性對於‘INIT’的理解:
 Examine current conditions and reset defaults and dynamic attributes as necessary. Usually called by other handlers that affect this item.

 17 , EBS中客戶化表結構的設計原則:
 1)必須包括一個主鍵,並建立相應的序列;
 2)建立5個WHO字段,也就是
 CREATED_BY NUMBER
 CREATION_DATE DATE
 LAST_UPDATED_BY NUMBER
 LAST_UPDATE_DATE DATE
 LAST_UPDATE_LOGIN NUMBER
在FORM中使用屬性類:CREATION_OR_LAST_UPDATE_DATE,WHO字段並不會自動地被賦值,必須自己在FORM中編寫代碼來完成這項工作。
 EBS中提供了一個函數FND_STANDARD.SET_WHO,大家只要在FORM的BLOCK級觸發器PRE-INSERT/PRE-UPDATE中進行調用即可。
對於記錄的PRE-INSERT,PRE-UPDATE Trigger中加入了fnd_standard.set_who後,
程序自動會對CREATE _BY,CREATION_DATE,LAST_UPDATE_BY,LSAT_UPDATE_DATE,LAST_UPDATE_LOGIN這5個欄位賦新的值

 18, form編程規則:
 *引用字段時,使用:BlockName.ItemName的形式;
 *使用亞元直接用dual,不要用sys.dual和system.dual;
 *使用object IDs獲得更好的性能;
declare
 x_id item;
begin
 x_id := find_item(’block.item’);
 /* your code here */
end;
 *總是使用顯式游標;
 *使用FND_MESSAGE程序顯示信息
 *使用FND_MESSAGE.DEBUG拉顯示debugging信息,
典型用法:
ELSE
 fnd_message.debug(’Invalid event passed to control.orders_lines: ’ || EVENT);
 END IF;
 *使用RAISE FORM_TIGGER_FAILURE來終止應用層的運行
 *使用APP_EXCEPTION.RAISE_EXCEPTION來終止數據庫層的運行
 *用fnd_fuction.execute代替open_form
 *不要使用CALL_FORM
 *用do_key(‘exit_form’)代替exit_form
 To exit the Oracle Applications suite:
 copy (’Y’, ’GLOBAL.APPCORE_EXIT_FLAG’);
do_key(’exit_form’);
 *用do_key(‘clear_form’)代替clear_form
 *用do_key('COMMIT_form')代替commit
 *用do_key(‘edit_field’)代替EDIT_FIELD/EDIT_TEXTITEM
觸發器編程規則
 *Post-Query trigger說明:
 .用帶有LOVS的items使用lov來驗證是否正確,當他們在無意識的情況下被要求保存changes會使用戶感到混淆,
這種情況下,在你的post-query觸發器裡面重置記錄狀態:(設置當前塊的屬性為查詢狀態)
 set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);

 *必須設置為Before的trigger有WHEN-NEW-RECORD-INSTANCE, WHEN-NEW-BLOCK-INSTANCE,WHEN-NEW-ITEM-INSTANCE;
可以設置為Override的trigger有KEY-DUPREC,KEY-MENU,KEY-LISTVAL,QUERY_FIND, ACCEPT。

 19, FND_Function用法:
 FND_Function.Execute可使用
 Procedure--過程
 Executes the specified Form指定的form
 Only accessible from Client-side PL/SQL可連接form的客戶端的pl/sql
 Should be used in place of Oracle Forms built-ins OPEN_FORM and NEW_FORM應該在form級觸發器OPEN_FORM與NEW_FORM
 Usage:--使用例子
 procedure FND_FUNCTION.EXECUTE
 (function_name IN varchar2,
 open_flag IN varchar2 default ’Y’,
 session_flag IN varchar2 default ’SESSION’,
 other_params IN varchar2 default NULL,
 activate IN varchar2 default ’ACTIVATE’,
 browser_target IN varchar2 default NULL);

 20,,fnd_message.set_name用法:
一般情況下在FORM中顯示出錯信息使用以下代碼:
 FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
 FND_MESSAGE.ERROR ;
在PACKAGE中顯示出錯信息一般使用以下代碼:
 FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
 APP_EXCEPTION.RAISE_EXCEPTION ;
例fnd_message.set_name('FND','是否刪除該記錄?');
 fnd_message.question用法:
例在刪除某條記錄之前提示是否刪除該如何實現? 即在刪除某條記錄之前提示用戶是否刪除,
如何用戶選擇刪除則刪除,如果選擇否則不刪除的實現?
1。 首先新建Alter 'DELETE_ALERT',更改其屬性button1為"Yes",button2為"No"
2。 在Block level Trigger: key-delrec中增加如下代碼即可:
declare
 return_value number;
begin
 set_alert_property('DELETE_ALERT',alert_message_text,'Are You Sure Delete This Record ?');
 return_value := show_alert('DELETE_ALERT');
 if return_value = alert_button1 then
delete_record;
 end if;
end;

 21,提交請示關於fnd_request.submit_request的用法:
 FND_REQUEST.SUBMIT_REQUEST函數是用來提交一個請求的,它返回一個NUMBER值.具體調用如下
 :result := fnd_request.submit_request(application CHAR, --AP模快
 program CHAR, --應用程式
 description CHAR, --請求說明(可選)
 start_time CHAR, --RUN時間(可選)
 sub_request BOOLEAN, --立刻提交請求
 argument1 CHAR, --參數1
 argument2 CHAR, --參數2
 argument3 CHAR, --參數3
 argument4 CHAR, --參數4
 argument5 CHAR, --參數5.......
 argument100 CHAR);
英文說明(zt oracle) :
 Parameters are as follows:
 application - Short name of the application associated with the concurrent
 request to be submitted.
 program - Short name of the concurrent program (not the executable) for which
 the request should be submitted.
 description - Description of the request that is displayed in the Concurrent
 Requests form (Optional.)
 start_time - Time at which the request should start running, formatted as HH24:
 MI or HH24:MI:SS (Optional.)
 sub_request - Set to TRUE if the request is submitted from another request and
 should be treated as a sub-request.
 argument1...100 - Arguments for the concurrent request; up to 100
 arguments are permitted. If submitted from Oracle Forms, you must specify all
 100 arguments.
補充說明:
在用fnd_request.submit_request的時候,第五個參數用false,不要被參數名稱誤導;
這個函數有105個參數,前面五個定義請求本身,後面100個是傳遞給請求的具體參數,都是Char類型,
我們需要轉換,默認值是chr(0),代表這個參數不用傳遞給調用的請求;
在Package裡面調用只需要傳遞需要的參數個數,因為它有默認值指示結束;
在form裡面則不行,要寫滿105個,而且我們參數結束之後要用一個chr(0)來表示結束

fnd_request.submit_request('AR',
'SVAINEX_P',
'',
'',
FALSE,
:parameter.invoice_store,
chr(0),
'','','',
 '','','','','','','','','','','','','','','','','' ,'','','',
 '','','','','','','','','','','','','','','','','' ,'','','',
 '','','','','','','','','','','','','','','','','' ,'','','',
 '','','','','','','','','','','','','','','','','' ,'','','',
'','','','','','','','','','','','','','','');

 22,程式中如何設置才能在點MENU上的FIND的圖標時調出FIND WINDOW?(客制的ORACLE FORM中)?
在相應的QUERY_FIND裡寫的,最後調用到app_find.query_find
 OA中的查詢可以通過2種方法來實現:
 l LOV查詢
 l QUERY-WINDOW查詢。
 LOV查詢的實現比較簡單,且適合單一條件的查詢;相比來說QUERY-WINDOW查詢的實現較繁瑣,但它可以實現複雜的查詢。
 LOV查詢的實現使用LOV查詢,需要按照以下步驟實現:
 l創建PARAMETER,用於保存查詢變量
 l創建LOV,其返回值賦予上面定義的參數
 l創建BLOCK級的PRE-QUERY,將LOV返回的值賦予BLOCK中的對應字段
 l創建BLOCK級的QUERY-FIND。 添加如下代碼:
 APP_FIND.QUERY_FIND(’<LOV Name>’) ;
 QUERY-WINDOW查詢的實現使用QUERY-WINDOW查詢,需要按照以下步驟實現:
 l從APPSTAND中拷貝QUERY-FIND對象組,其中包括WIINDOW,BLOCK, CANVAS
 l更改WINDOW, BLOCK, CANVAS的名字
 l更改按鈕“NEW”的TRIGGER,編寫如下代碼:app_find.new(<塊名> )
 l更改按鈕“FIND”的TRIGGER,編寫如下代碼:app_find.find(<塊名> )
 l設置導航屬性。 設置查詢窗口的前導塊為查詢目標塊,但查詢窗口不能作為任何塊的前導塊或後續塊
 l編輯KEY–NXTBLK,使之功能同按鈕“FIND”
 l設置查詢窗口名
 l創建PRE-QUERY代碼,例如填寫查詢值,用APP_FIND.QUERY_RANGE設置查詢範圍等
 l創建QUERY-FIND代碼,其中代碼如下:
 APP_FIND.QUERY_FIND(’<塊所在窗口名>’,’<查詢窗口名>’,’<塊名>’);
方法2
 1要建一個查詢的數據塊在這個數據塊中,放置各個需要查詢的數據項然後,在FORM級的觸發器QUERY_FIND中,屏蔽掉標準的代碼,而寫為:go_block('你的查詢數據塊名稱');
這樣,當用戶點“手電筒”圖標時,系統就會自動轉到那個查詢數據塊的界面了。
 2查詢數據塊應該單獨放在一個畫布中,並且單獨放在一個WINDOWS中。
這樣,就可以顯示單獨的查詢窗口。
如果要實現"當點擊那個手電筒,出現我要查詢的數據的windows,當我選中後,他會自動顯示在另外一張windows"
則要在查詢數據塊中放一個查詢的按鈕,在按鈕中添加語句:go_block('要導向的結果數據塊');
execute_query;
這樣,用戶輸入好條件之後,點擊“查詢”按鈕,就可以轉到結果集窗口了。
兩句一起寫在按鈕事件下。
在查詢結果的數據塊中,你可以在where條件那裡直接引用查詢數據塊的各數據項的數據,
寫在where條件中限制結果集。
方法3
 1要建一個查詢的數據塊在這個數據塊中,放置各個需要查詢的數據項然後,在FORM級的觸發器QUERY_FIND中,屏蔽掉標準的代碼,而寫為如:
 app_window.set_window_position('QUERY','CASCADE','MAIN' );--CASCADE',層疊的方式,就是把query窗口層疊在main之上
 app_find.QUERY_FIND('MAIN','QUERY','QUERY');--APP_FIND.QUERY_FIND(’<塊所在窗口名>’,’<查詢窗口名>’,’<塊名>’);
 2查詢數據塊應該單獨放在一個畫布中,並且單獨放在一個WINDOWS中。
則要在查詢數據塊中放一個查詢的按鈕,在按鈕中添加語句:go_block('要導向的結果數據塊');
execute_query;

arrow
arrow
    全站熱搜

    oracleD2K 發表在 痞客邦 留言(1) 人氣()