я нашел способ сделать это, со смесью апекса и jquery:
В процессе отправки: получите состояние флажков (через apex_application ) и сохраните их через apex_collections
После обновления: получить значения с помощью обратного вызова ajax и установить их заново с помощью некоторого кода JavaScript.
Я сделал отчет (Отчет 1), основанный на emp
, с вашим запросом (но пропустил предложение 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), и где значение равно значению значения, которое мы сохранили , Через attr
флажок проверяется!
Вот надеюсь, что я не переусердствовал :) 1050 *