|
然后在form的pre-form trigger中调用FND_FUNCTION.TEST函数验证登录用户的权限:
IF (FND_FUNCTION.TEST('DEMVC_DEMVCEOR_PRINT_ORDER')) THEN
--处理代码;
END IF;
处理代码往往是激活或禁用一些窗体部件,比如buttons, windows, fields, alternative regions等。实际也是激活或禁用某些窗体功能。
此处我有个疑问,我定义的Function如果Type设置为subfunction,系统就会报错。设置为Form,其他不变,运行正常,百思不得其解。
Oracle EBS还允许客制化Form的菜单栏。
用户最多可以定义45个form-level 的trigger ,名称必须为SPECIALn,其中SPECIAL1 to SPECIAL15属于Tools菜单项,SPECIAL16 to SPECIAL30属于Reports菜单项, SPECIAL31 to SPECIAL45属于Actions菜单项, 其中Reports、Actions的名称可以被修改。
初始化示例:
IF (FND_FUNCTION.TEST('DEMVC_DEMVCEOR_PRINT_ORDER')) THEN
app_special.instantiate('SPECIAL1','&Print Order');
app_special.enable('SPECIAL1',PROPERTY_ON);
app_special.instantiate('SPECIAL2','Specia&l 2 Line', '',TRUE,'LINE');
app_special.instantiate('SPECIAL3_CHECKBOX','Spe&cial 3 Box w Line', '',TRUE,'LINE');
app_special.set_checkbox('SPECIAL3_CHECKBOX','TRUE');
app_special.instantiate('SPECIAL4_CHECKBOX','Special &4 Box');
app_special.set_checkbox('SPECIAL4_CHECKBOX','TRUE');
app_special.instantiate('SPECIAL18','Specia&l 18 Line SEP', separator=>'LINE');
app_special.instantiate('SPECIAL32','Specia&l 32 Line', '',TRUE,'LINE');
app_special.instantiate('SPECIAL33','Specia&l 33');
app_special.instantiate('SPECIAL30','Specia&l 30');
app_special.instantiate('SPECIAL31','Specia&l 31 Line','',TRUE,'LINE');
app_special.instantiate('SPECIAL45','Spe&cial 45');
/* and display a button on the form */
app_item_property.set_property('orders.print_order',
DISPLAYED, PROPERTY_ON);
ELSE
app_item_property.set_property('orders.print_order',
DISPLAYED, PROPERTY_OFF);
END IF;
app_special.instantiate设置菜单项的文字说明,app_special.enable设置菜单项是否可用,app_special.set_checkbox设置check_box菜单项的选定状态。
在form-level 的SPECIALn trigger中,定义了这些菜单项选中后的处理代码,如下所示:
Eg1:
demvceor.PRINT_ORDER('SPECIAL1');
Eg2:
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;
右键菜单也可以自定义,form-level PRE-POPUP-MENU trigger 引用APPSTAND.EVENT('PRE-POPUP-MENU')建立default menu;建立block /item level pre-pop-menu trigger须(Execution Hierarchy àAfter)。
从block /item level pre-pop-menu trigger(Execution Hierarchy àAfter)中调用 app_popup.instantate函数初始化右键菜单项:
procedure APP_POPUP.INSTANTIATE(
option_name varchar2,
txt varchar2,
initially_enabled boolean default true,
separator varchar2 default null);
Example
• This example results in a menu that has a line above the second custom entry and
has the third custom entry grayed out (disabled)
APP_POPUP.INSTANTIATE(
‘POPUP1’,’First Entry’);
APP_POPUP.INSTANTIATE(
‘POPUP2’,’Second Entry’, TRUE, ‘LINE’);
APP_POPUP.INSTANTIATE(
‘POPUP3’,’Third Entry’, FALSE);
右键菜单的处理函数写在名为POPUP1 through POPUP10 的trigger中,应该在正确的level上建立这些trigger (通常是block/item level)。 |
|