例如: PO_POXPOMPO_DELETE --用户函数命名如下: 例如:PURCHASE ORDERS:DELETE
------------------------------------------------------------------
2.添加选择到指定的菜单中
添加15个指定的form-specific entries到每一个指定的菜单中:tools,reports,actions
Create a Form-level, User-named Trigger for Each Entry
-- The form-level user-named trigger must be called SPECIALn, where n is a number from 1 to 45
-- Tools menu includes SPECIAL1 to SPECIAL15
-- Reports menu includes SPECIAL16 to SPECIAL30, and the menu name Reports can be changed
-- Actions menu includes SPECIAL31 to SPECIAL45, and the menu name Actions can be changed
当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’,’&Print Order’,’PRINTORD’);
在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;
----------------------------------------------
在你在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);
------------------------------------------------------------------
编辑鼠标右键菜单
调用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'); d) PRE-QUERY
--If you don't do this, whatever query criteria you may enter in -- the concatenated flex field, it is not taken into account. FND_FLEX.EVENT('PRE-QUERY' ); e)
KEY-LISTVAL
APP_STANDARD.EVENT('KEY-LISTVAL'); FND_FLEX.EVENT('KEY-LISTVAL' );
------------------------------------------------------------------ 关于 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 启动时测试函数的可用性,
对于‘INIT’的理解:
Examine current conditions and reset defaults and dynamic attributes as necessary.
Usually called by other handlers that affect this item.
validate(参数); 使form执行基于参数范围的有效的过程.参数为: default_scope,form_scope,record_scope,item_scope
------------------------------------------------------------------ 弹性域(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’); )
----------------------------------------------------------
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
弹性域说明: /*这里是原来的
FND_KEY_FLEX.DEFINE( BLOCK=>'LINES',
FIELD=>'ACCTG_FLEX_VALUES', ID=>'GL_ACCOUNT_CC_ID', APPL_SHORT_NAME=>'SQLGL', CODE=>'GL#', NUM=>'101'); */
/*按以下顺序*/
1.先创建一个外键字段, id(指‘Unique_ID_field’)
2.修改联合字段的LOV, database item , class properties属性.(指 description_field_name) 3.WHEN-NEW-FORM-INSTANCE
cursor get_cao is
select to_char(id_flex_num) from fnd_id_flex_structures
where id_flex_structure_code = 'ACCOUNTING_FLEXFIELD' and id_flex_code = 'GL#';
v_cao varchar2(1000);
...................
open get_cao;
fetch get_cao into v_cao; if get_cao%notfound then v_cao := '101'; end if;
close get_cao;
app_standard.event('WHEN-NEW-FORM-INSTANCE');
fnd_key_flex.define( BLOCK=>'COMBO',
FIELD=>'ACCOUNT_FLEXFIELD', APPL_SHORT_NAME=>'SQLGL', CODE=>'GL#', NUM=>v_cao,
ID=>'CODE_COMBINATION_ID', DESCRIPTION=>'', TITLE=>' OK ', VALIDATE=>'FULL', QBE_IN=>'Y',
DERIVE_ALWAYS=>'Y', updateable => '',
VRULE=>'\\\\nSUMMARY_FLAG\\\\nI\\\\nAPPL=SQLGL;NAME=GL_NO_PARENT_SEGMENT_ALLOWED\\\\nN',
where_clause => 'summary_flag != ''Y''', QUERY_SECURITY =>'Y');
4.在其他触发器中按如下处理 ‘WHEN-VALIDATE-ITEM’ ‘WHEN-NEW-ITEM-INSTANCE’ ‘POST-QUERY’ ‘PRE-QUERY ’ ‘KEY-LISTVAL’ a)
WHEN-VALIDATE-ITEM
if ( :system.mode = 'NORMAL' ) then
fnd_flex.event( 'WHEN-VALIDATE-ITEM' ); end if; b)
WHEN-NEW-ITEM-INSTANCE
app_standard.event('WHEN-NEW-ITEM-INSTANCE'); fnd_flex.event('WHEN-NEW-ITEM-INSTANCE' ); c)
POST-QUERY
FND_FLEX.EVENT('POST-QUERY');
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:= ;
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信息
设置Item-level和Item-instance-level属性时需特别的注意,
Item-level属性影响所有的记录,而Item-instance-level属性只影响特定的记录(当前行)。
------------------------------------------------------------------------------------
使用APP_ITEM_PROPERTY.SET_VISUAL_ATTRIBUTE设置属性
--------------------------------------------------------------------------
使用app_item_property.get_property取得item的属性 Use APP_ITEM_PROPERTY.GET_PROPERTY to get Oracle Applicationsspecific properties – DISPLAYED – ENABLED – ENTERABLE
– ALTERABLE (item instance level) – ALTERABLE_PLUS (item level) – REQUIRED
? APP_ITEM_PROPERTY.GET_PROPERTY returns PROPERTY_ON or PROPERTY_OFF
Use GET_ITEM_PROPERTY for Most Oracle Forms Properties Use native Oracle Forms GET_ITEM_PROPERTY for native properties that return a number value or character string
----------------------------------------------------------------------
Call user profiles routines at form startup to determine profiles settings.
procedure FND_PROFILE.GET (name IN varchar2,value OUT varchar2); fotmatting 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(:ORDE
RS.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取得服务器端的时间环境
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); 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
-------------------------------------------------------------- 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',PARAMETER.ORG_CODE); 其中ADJ_RECEIVE是window 的名字,用于设置window的title 常用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.
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个栏位赋新的值
--------------------------------------------------------------------------------------------------------- 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。 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); 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为\为\
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;
1 关于f60gen不能編譯Form ,f60gen XXXX.fmb app/apps 時不能通過提示bash f60gen command not found 的解决方法: 答:
指定完整的f60gen的路径就可以了.
格式为:完整的f60gen的路径+编译的form文件,+用户名/密码 例如:/data1/porcli/porduct/806/bin/f60gen person.form apps/apps 其中,data1为安装EBS的目录
2如何查找指定完整的f60gen的路径? 答
可以通过find / -name 'f60gen*' -print查找路径 取安装EBS的目录 注意,查抄文件名用单引号 在根目录下查找
fnd_request.submit_request('AR',--应用模块的名称缩写,可以在System Administrator -> Application -> Register 里面查到
'SVAINEX_P',--应用程序的名称缩写 Application -> Concurrent -> Program '', '',
FALSE,--默认为 FALSE
:parameter.invoice_store,输入参数,需为字符型
chr(0), '','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','',''); 1 关于f60gen不能編譯Form ,f60gen XXXX.fmb app/apps 時不能通過提示bash f60gen command not found 的解决方法: 答:
指定完整的f60gen的路径就可以了.
格式为:完整的f60gen的路径+编译的form文件,+用户名/密码 例如:/data1/porcli/porduct/806/bin/f60gen person.form apps/apps 其中,data1为安装EBS的目录
2如何查找指定完整的f60gen的路径? 答
可以通过find / -name 'f60gen*' -print查找路径 取安装EBS的目录 注意,查抄文件名用单引号 在根目录下查找
关于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
** Cursor for highest efficiency. */
OPEN lookup_area; FETCH lookup_area INTO :Employee.Area_Desc_Nondb; CLOSE lookup_area; END;
FORM如何在PLSQL中取出开始选定的组织ID
(1):首先在parameter中加上CHART_OF_ACCOUNTS_ID,ORG_NAME,ORG_CODE,ORG_ID四个参数 (2):在form level 的trigger中的pre_form中加上FND_ORG.CHOOSE_ORG; 显示ORG在Window Title上面
(3):在form level 的trigger中的when_new_form_instance中加上 APP_WINDOW.SET_TITLE('ADJ_RECEIVE',
ARAMETER.ORG_CODE);其中
ADJ_RECEIVE是window 的名字, 用于设置window的title
oracle 内置函数汇总
--------------------------------------------------------------------------------------------------------
ADD_LIST_ELEMENT :Adds a single element to a list item. 为一个列表项增加一个元素, Syntax
PROCEDURE ADD_LIST_ELEMENT (list_name VARCHAR2, list_index, NUMBER
list_label VARCHAR2, list_value NUMBER); PROCEDURE ADD_LIST_ELEMENT (list_id ITEM,
list_index VARCHAR2, list_label VARCHAR2, list_value NUMBER);
POPULATE_GROUP和POPULATE_LIST
group_id:=POPULATE_GROUP('VENDOR_RG');
POPULATE_LIST('QUERY_TEST.LIST_RECORD_GROUP','VENDOR_RG');
FND_MESSAGE
1 FND_MESSAGE.show 与 FND_MESSAGE.debug 效果相同,用于把信息以最基本的方式显示给用户。 2. FND_MESSAGE.hint
这种方式不会弹出对话框给用户,而是显示在左下脚的状态栏上面 3. FND_MESSAGE.error 以Error信息的方式显示给用户 4. FND_MESSAGE.warn
以选择信息的方式显示给用户,可以选择Ok或者Cancel,返回值分别是TRUE和FALSE
if FND_MESSAGE.warn then
fnd_message.debug('True'); else
fnd_message.debug('False'); end if;
执行效果如下:
点击OK会弹出 True 点击Cancel会弹出 False
5. FND_MESSAGE.question
function 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
调用: declare
v_result number; begin
APPS.XXFORM_ADIO_TEST_PKG.RETURN_MESSAGE; FND_MESSAGE.retrieve;
v_result:=FND_MESSAGE.QUESTION('Yes','No','Cancel',null,null,'Question');
fnd_message.debug(v_result); end;
本文来源:https://www.bwwdw.com/article/n34f.html