FORM 相关技巧,copy from 余军明
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取得服务器端的时间环境