EBS FORM 复选框 内存表方式实现
Form 开发
-
在需要多选的块中添加多选复选框 CHECKED_FLAG,并按以下属性设置:
Name CHECKED_FLAG
Item Type Check Box
Subclass Information CHECK BOX
Value when Checked Y
Value when Unchecked N
Check Box Mapping of other Values N
Data Type Char
Maximum Length 20
Initial Value N
Database Item N -
添加全选复选框 SELECT_ALL 并按以下属性设置:
Name SELECT_ALL
Item Type Check Box
Subclass Information CHECK BOX
Value when Checked Y
Value when Unchecked N
Check Box Mapping of other Values N
Data Type Char
Maximum Length 20
Initial Value N
Database Item N -
在 Block 级 pre_query 触发器事件中清除表变量:
cux_checked_public_pkg.delete_table; -
在 Block 级 post_query 触发器中调用 cux_choose_pkg.post_query,在查询时将每条记录主键信息
保存到表变量中,并判断全选是否勾选,如果勾选,则把记录的 checked_flag 标识位设置为’Y’
cux_choose_pkg.post_query(p_select_all_field => ‘全选框名称’,
p_source_block => ‘单选框所在块’,
p_object_item1 => ‘关键字 1’,–表id
p_object_item2 => ‘关键字 2’,
p_object_item3 => ‘关键字 3’,
p_object_item4 => ‘关键字 4’,
p_object_item5 => ‘关键字 5’
p_object_item6 => ‘关键字 6’,
p_object_item7 => ‘关键字 7’,
p_object_item8 => ‘关键字 8’); -
在 Block 级 KEY-CLRREC 触发器中调用 cux_choose_pkg.clear_record 清除一条记录,如果为 Folder
块则应在 App_Folder.event(‘KEY-CLRREC’));之后。
cux_choose_pkg.clear_record (p_source_block => ‘单选框所在块’,
p_select_all_field => ‘全选框名称’); -
在 Block 级 KEY-EXEQRY 触发器中
非 Folder 块
:parameter.g_query_find := upper(‘true’);
execute_query;
:parameter.g_query_find := upper(‘false’);
Folder 块
:parameter.g_query_find := upper(‘true’);
app_folder.event(‘KEY-EXEQRY’);
:parameter.g_query_find := upper(‘false’); -
在Checked_flag的Item级触发器
WHEN-CHECKBOX-CHANGED中调用
cux_choose_pkg.check_changed,如果勾选上则把当前的记录的 checked_flag 设置为’Y’,否则设置
为’N’,并把全选框设置为’N’。
cux_choose_pkg.check_changed( p_source_block => '单选框所在块',
p_select_all_field => '全选框名称' );
- 在全选框 select_all 的 WHEN-CHECKBOX-CHANGED 触发器中调用 cux_choose_pkg.selected_all,如果勾选全选框,则先清空表变量,并以 Query All Records 方式查询 SourceBlock(即查询出所有符合条件的数据)
cux_choose_pkg.selected_all (p_source_block => '单选框所在块');
- 复位,如果数据处理后需要把选中的复选框复位,则调用 cux_choose_pkg.reset_all 方法删除表变量,并把全选框设置为’N’,并重新查询 Source Block。
cux_choose_pkg.reset_all(p_source_block => '单选框所在块',
p_select_all_field => '全选框名称');
- 为了屏蔽 f11 查询功能,增加 Block 级的 key- entqry 事件,事件代码与块 query_find 一致,,如果是 Folder 块,则应在 App_Folder.event(‘KEY-ENTQRY’)之前。
- 如果需要处理勾选数据,则调用 cux_checked_public_pkg.get_checked_tbl(l_object_tbl_opt).把选中的记录返回到表变量中。其中l_object_tbl_opt类型定义为
cux_checked_public_pkg.object_tbl_opt。
(因为在 Oracle Form 6i 开发工具不支持定义以 VARCHAR2为索引的表变量,为了使用 Row_id 为索引,将数据在 Package 中进行处理)
cux_checked_public_pkg.get_checked_tbl(l_object_tbl_opt);
使用时比较简单:如下例
变量定义:
l_tbl_count NUMBER;
l_object_tbl_opt cux_checked_public_pkg.object_tbl_opt;
使用:
cux_checked_public_pkg.get_checked_tbl(l_object_tbl_opt);
-- 判断是否有选中的记录
l_tbl_count := l_object_tbl_opt.COUNT;
IF (l_tbl_count <= 0) THEN
fnd_message.set_name('CUX',
'CUX_NO_SELECT_WARING');
fnd_message.error;
RAISE form_trigger_failure;
END IF;
Cux_test_pkg.process(…
p_object_tbl => l_object_tbl_opt,
…);
– 处理后重置多选及全选状态
cux_choose_pkg.reset_all(p_source_block => ‘BLOCK NAME’,
p_select_all_field => ‘SELECT ALL FIELD’);
附录代码:
cux_choose_pkg
PACKAGE cux_choose_pkg IS
g_object_rec cux_checked_public_pkg.object_type;
PROCEDURE post_query(p_select_all_field VARCHAR2
,p_source_block VARCHAR2
,p_object_item1 VARCHAR2
,p_object_item2 VARCHAR2 DEFAULT NULL
,p_object_item3 VARCHAR2 DEFAULT NULL
,p_object_item4 VARCHAR2 DEFAULT NULL
,p_object_item5 VARCHAR2 DEFAULT NULL
,p_object_item6 VARCHAR2 DEFAULT NULL
,p_object_item7 VARCHAR2 DEFAULT NULL
,p_object_item8 VARCHAR2 DEFAULT NULL);
--全选
PROCEDURE selected_all(p_source_block VARCHAR2);
--复选框变化
PROCEDURE check_changed(p_source_block VARCHAR2
,p_select_all_field VARCHAR2);
--清除记录
PROCEDURE clear_record(p_source_block VARCHAR2
,p_select_all_field VARCHAR2);
--重置并查询
PROCEDURE reset_all(p_source_block VARCHAR2
,p_select_all_field VARCHAR2);
END;
/
PACKAGE BODY cux_choose_pkg IS
PROCEDURE post_query(p_select_all_field VARCHAR2
,p_source_block VARCHAR2
,