我找到了一些方法来做到这一点,结合了 apex 和 jquery:
我根据emp 制作了一份报告(报告 1),其中包含您的查询(但省略了 where 子句)。
我在提交过程中获得选中的复选框(通过 apex_application,您只会得到选中的复选框!),并将它们保存在一个集合中。每次提交时都会创建或清空此集合。我离开了调试
消息,因此您可以跟踪它们。
哦,存储的值是 empno,因为您基于该列的复选框项目,而不是 1 或 0。
apex_debug_message.log_message('on submit point');
APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION('COLL_REPORT1');
FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP
apex_debug_message.log_message('loop chk: '||i||': '||TO_NUMBER(APEX_APPLICATION.G_F01(i)));
APEX_COLLECTION.ADD_MEMBER(p_collection_name => 'COLL_REPORT1',
p_n001 => TO_NUMBER(APEX_APPLICATION.G_F01(i))
);
END LOOP;
然后创建一个ajax回调过程:
我在这里创建了一个 json 数组,它只保存复选框的值,并帮助我在之后轻松解析这些值。集合在检索后被截断。
DECLARE
v_first BOOLEAN := TRUE;
v_json VARCHAR2(4000);
BEGIN
v_json := '[';
FOR r IN (SELECT n001 FROM APEX_collections
WHERE collection_name = 'COLL_REPORT1')
LOOP
apex_debug_message.log_message('stored value: '||r.n001);
IF NOT v_first THEN
v_json := v_json ||',';
ELSE
v_first := FALSE;
END IF;
v_json := v_json || r.n001;
END LOOP;
v_json := v_json || ']';
APEX_COLLECTION.TRUNCATE_COLLECTION('COLL_REPORT1');
htp.p(v_json);
END;
然后需要检索和设置值,这是通过动态操作完成的。
- 事件:刷新后
- 选择类型:地区
- 区域:(你的报告区域,我的是报告1)
- 无条件
代码:
var oDBGet = new htmldb_Get(null, &APP_ID., 'APPLICATION_PROCESS=get_checked_boxes', &APP_PAGE_ID.);
var arrBoxes = jQuery.parseJSON(oDBGet.get());
$.each(arrBoxes,
function( intIndex, objValue ){
$("input[name='f01'][value='"+objValue+"']").attr("checked","checked");
});
此代码只是调用 ajax 回调并将返回的字符串解析为 json 对象(由于 [value,value,value] 语法,它是一个数组)。
然后我循环遍历这个数组并在名称为f01 的输入元素上设置值(动态创建的复选框,这是基于给定 apex_item.checkbox 的 id),其中的值等于我们存储的值.通过attr 复选框被选中!
希望我没有做得过火 :)