属性名称 名称 画布类型 子类信息
视图端口的X轴位置 视图端口的Y轴位置 视图端口宽度 视图端口高度 宽度 高度 窗口
2.界面
属性值 MAIN_TAB_PAGE1 堆叠 CANVAS_STACKED 0.5+固定列区域宽度
MAIN_TAB视图端口的Y轴位置+0.5 窗口宽度-1
0.25+0.25*Line块显示的记录数 窗口宽度-1
0.25+0.25*Line块显示的记录数 MAIN
Line块的滚动条放置于FIX画布,参考坐标为:(窗口宽度-0.5,Header区域Y坐标+Header区域高度+1)。
注意点:Tab页folder的固定项如果存在与page项发生重叠的部分,那么光标进入固定项的时候会把page画布隐藏,因此一定要保证fix画布上的固定项不与page画布上的项交叉。
3.FORM同名PACKAGE
TAB页folder的form同名package头与非TAB页folder一致。 TAB页folder的form同名package体中需要以下代码:
PROCEDURE hide_main_tab(p_tab_name VARCHAR2) IS BEGIN
IF p_tab_name IN ('FOLDER_STACKED_CANVAS1', 'FOLDER_STACKED_CANVAS2',
'FOLDER_STACKED_CANVAS3') THEN hide_view(p_tab_name); END IF;
END hide_main_tab;
PROCEDURE go_tab_first_item(p_tab_name VARCHAR2) IS BEGIN
IF p_tab_name = 'FOLDER_STACKED_CANVAS1' THEN go_item('LINE_BLOCKNAME.CANVAS1_FIRST_ITEM'); ELSIF p_tab_name = 'FOLDER_STACKED_CANVAS2' THEN go_item('LINE_BLOCKNAME.CANVAS2_FIRST_ITEM'); ELSIF p_tab_name = 'FOLDER_STACKED_CANVAS3' THEN go_item('LINE_BLOCKNAME.CANVAS3_FIRST_ITEM'); END IF;
END go_tab_first_item;
PROCEDURE show_main_tab(p_tab_name VARCHAR2) IS BEGIN
IF p_tab_name IN ('FOLDER_STACKED_CANVAS1', 'FOLDER_STACKED_CANVAS2',
'FOLDER_STACKED_CANVAS3') THEN show_view(p_tab_name); END IF;
EBS Form开发总结
END show_main_tab;
PROCEDURE event_handler(event VARCHAR2) IS new_tab VARCHAR2(30) := :system.tab_new_page; prev_tab VARCHAR2(30) := :system.tab_previous_page; BEGIN
IF event = 'WHEN-NEW-FORM-INSTANCE' THEN app_folder.define_folder_block('FOLDER_NAME', 'LINE_BLOCKNAME',
'LINE_PROMPT_BLOCKNAME',
'FOLDER_STACKED_CANVAS1,FOLDER_STACKED_CANVAS2,FOLDER_STACKED_CANVAS3',
'MAIN',
'AUTOQUERY DISABLED_FUNCTION2 DISABLED_FUNCTION3', 'MAIN_TAB',
'MAIN_TAB_FIX'); app_folder.event('INSTANTIATE');
show_view('FOLDER_STACKED_CANVAS1'); ELSIF event = 'FOLDER_RETURN_ACTION' THEN
IF (:global.folder_action = 'CONFIRM-HIDE-FIELD') THEN IF :global.folder_field IN ('CANVAS1_FIRST_ITEM', 'CANVAS2_FIRST_ITEM',
'CANVAS3_FIRST_ITEM') THEN
:global.folder_action_allowed := 'FALSE'; END IF; END IF;
ELSIF event = 'WHEN-TAB-PAGE-CHANGED' THEN hide_main_tab(prev_tab); show_main_tab(new_tab); go_tab_first_item(new_tab); END IF;
END event_handler;
注意点:
1. 定义TAB页folder时,多个FOLDER_STACKED_CANVAS用英文逗号隔开,多个DISABLED_FUNCTION用空格隔开。
2. 在FOLDER_RETURN_ACTION事件中禁止隐藏每个TAB画布上的第一个项,主要是为了防止一个TAB页的项全被隐藏后该TAB页无法再出现的BUG。
DISABLED_FUNCTION常用可选参数如下:
名称 OPEN
ORDERBY NEW SAVE
AUTOQUERY DELETE SHOW HIDE MOVE WIDEN SHRINK AUTOSIZE
效果
禁止文件夹打开功能 禁止文件夹排序功能 禁止文件夹新建功能 禁止文件夹保存功能
TAB FOLDER用在Detail Block时应当禁止此功能
禁止文件夹删除功能 禁止显示隐藏ITEM 禁止隐藏ITEM 禁止移动ITEM 禁止加宽ITEM 禁止缩窄ITEM
禁止TAB画布跟随窗口大小变化
EBS Form开发总结
PROMPT
4.LINE块同名PACKAGE Package头中添加以下代码:
procedure event(p_event in varchar2);
Package体中添加以下代码:
禁止更改提示 PROCEDURE event(p_event IN VARCHAR2) IS
curr_canvas_name VARCHAR2(30) := get_item_property(name_in('SYSTEM.CURSOR_ITEM'), item_canvas);
current_tab VARCHAR2(30) := get_canvas_property('MAIN_TAB', topmost_tab_page);
tab_canvas_name VARCHAR2(30) := name_in('SYSTEM.EVENT_CANVAS'); BEGIN
IF p_event = 'WHEN-NEW-ITEM-INSTANCE' THEN
IF curr_canvas_name IN ('FOLDER_STACKED_CANVAS1', 'FOLDER_STACKED_CANVAS2',
'FOLDER_STACKED_CANVAS3') THEN IF curr_canvas_name != current_tab THEN
set_canvas_property('MAIN_TAB', topmost_tab_page, curr_canvas_name); END IF; END IF; END IF; END event;
5.FORM级触发器
与非TAB页folder相比,需要增加以下两个form级触发器:
名称
FOLDER_RETURN_ACTION
代码
Form_name.event_handler('FOLDER_RETURN_ACTION');
WHEN-TAB-PAGE-CHANGED Form_name.event_handler('WHEN-TAB-PAGE-CHANGED');
6.BLOCK级触发器
与非TAB页folder相比,需要在LINE块增加以下一个block级触发器:
名称 WHEN-NEW-ITEM-INSTANCE
代码 Line_blockname.event('WHEN-NEW-ITEM-INSTANCE'); 3.2 弹性域
1.描述性弹性域
EBS Form开发总结
Form的基表如果备有描述性弹性域字段则可在form中启用描述性弹性域。
注册表和表列
使用HAND_PLSQL_AUTOCREATE.REGIST_TABLE生成注册代码,需要填写的信息有表名、表用户名和应用简称。
复制注册代码至Command Window执行并提交。
注册描述性弹性域
在Oracle Application的以下路径注册描述性弹性域: 应用开发员?弹性域?描述性?注册
注意记下弹性域的名称,以下称DDF_NAME。
添加DF项
在启用描述性弹性域的数据块中追加一个名称为DF的ITEM,子类为
TEXT_ITEM_DESC_FLEX,画布和位置按实际情况调整。如果是在有folder功能的数据块中启用,还需要为DF项添加一个提示项。DF项的提示文字一般为“[ ]”。
添加DF项级触发器
名称
WHEN-NEW-ITEM-INSTANCE WHEN-VALIDATE-ITEM
代码
fnd_flex.event('WHEN-NEW-ITEM-INSTANCE');
fnd_flex.event('WHEN-VALIDATE-ITEM');
执行层次 之前
忽略
添加BLOCK级触发器代码
在启用描述性弹性域的数据块上添加以下触发器,如果块上已有该触发器,则在该触发器的最前面添加代码。
名称 PRE-QUERY POST-QUERY PRE-INSERT PRE-UPDATE
WHEN-VALIDATE-RECORD
FORM中定义描述性弹性域
代码 fnd_flex.event('PRE-QUERY'); fnd_flex.event('POST-QUERY'); fnd_flex.event('PRE-INSERT'); fnd_flex.event('PRE-UPDATE'); fnd_flex.event('WHEN-VALIDATE-RECORD');
EBS Form开发总结
3.3 LOV
在form同名package响应when-new-form-instance事件的程序中添加以下代码: fnd_descr_flex.define(BLOCK => 'BLOCKNAME', field => 'DF', appl_short_name => 'CUX', desc_flex_name => 'DDF_NAME'); 启用段
在Oracle Application的以下路径设置启用段: 应用开发员?弹性域?描述性?段
搜索出之前定义的弹性域,点击段进入段设置界面。定义段名,并选用后台数据库表中未被用到的列。在段设置界面点击打开,可以进入该段的详细设置,包括可用性、大小和提示。
设置完毕后要冻结该弹性域使其生效。
2.键弹性域LOV 尚待补充。
1.LOV向导
一般使用LOV向导创建或修改LOV,子类为LOV。以下黑体字为LOV向导中的选项卡名称。 查询
LOV所基于的记录组的SQL。 列
确定所需字段及顺序。 列显示
确定字段标题、宽度及返回项。设置字段宽度为0隐藏该字段。用户在使用时输入的值将对第一个显示的字段进行限制。
LOV显示
EBS Form开发总结