Табличная форма APEX с помощью [селектора строк]: как установить значение столбца в выбранных строках при отправке - PullRequest
4 голосов
/ 21 февраля 2012

У меня есть табличная форма, в которой отображаются все запросы, отправленные на обработку.Отправители имеют возможность отменить запросы в любое время.Я хотел бы, чтобы это было достигнуто, просто установив флажок селектора строк для строки (ей), которые должны быть отменены, и нажав «Отправить».

Хорошо ... Я пытаюсь создать табличную форму, в которой при установке флажка [Выбор строки] и отправке формы устанавливается значение в столбце «Статус» строки.как 'Отменено'.

Поскольку флажки [выбор строки] существуют, я предполагаю, что, вероятно, существует какой-то встроенный процесс, который идентифицирует выбранные строки и выполняет действие с выбранными строками.

Есть ли способ задействовать эту функцию и сделать дополнительный шаг, чтобы установить для столбца «Статус» строки значение «Отменено»?

Ответы [ 2 ]

3 голосов
/ 08 июня 2013

Прочитайте мой комментарий к ответу Тома.Пример кода процесса:

declare 
  l_map apex_application_global.vc_map;
  l_region_id number;
begin
  if :APEX$ROW_SELECTOR = 'X' then
    select t.region_id
     into l_region_id
     from APEX_040100.APEX_APPLICATION_PAGE_RPT t
     where t.application_id = :APP_ID
       and t.page_id = :APP_PAGE_ID
       and t.source_type = 'Tabular Form';

    l_map := apex_040100.wwv_flow_tabular_form.get_row_values(
      p_tabular_form_region_id => l_region_id,
      p_row_num => :APEX$ROW_NUM
    );

    update my_table
     set status = 'Cancelled'
     where id = l_map('ID');
  end if;
end;
1 голос
/ 21 февраля 2012

Как правило, добавленный селектор строк будет сохранен в массиве apex_application.g_f01 (дополнительную информацию об этих массивах, см. В apex api doc ). Проверьте это, посмотрев на HTML-вывод вашей страницы. После html вашей табличной формы вы можете найти входные данные для отображения массива (я использовал табличную форму на основе таблицы EMP):

<input type="hidden" name="fhdr" value="Select Row" id="fhdr_001" />
<input type="hidden" name="fmap" value="EMPNO" id="fmap_002" />
<input type="hidden" name="fhdr" value="Empno" id="fhdr_002" />
<input type="hidden" name="fmap" value="ENAME" id="fmap_003" />
<input type="hidden" name="fhdr" value="Ename" id="fhdr_003" />
<input type="hidden" name="fmap" value="JOB" id="fmap_004" />
<input type="hidden" name="fhdr" value="Job" id="fhdr_004" />
<input type="hidden" name="fmap" value="MGR" id="fmap_005" />
<input type="hidden" name="fhdr" value="Mgr" id="fhdr_005" />
<input type="hidden" name="fmap" value="HIREDATE" id="fmap_006" />
<input type="hidden" name="fhdr" value="Hiredate" id="fhdr_006" />
<input type="hidden" name="fmap" value="DEPTNO" id="fmap_007" />
<input type="hidden" name="fhdr" value="Deptno" id="fhdr_007" />

Вам понадобится селектор строк (массив f01) и любое другое значение, которое вам нужно. Например, я использовал массив 3: ENAME.

DECLARE
   v_rowno NUMBER;
BEGIN
   for i in 1..apex_application.g_f01.count
   loop
      v_rowno := apex_application.g_f01(i);
      apex_debug_message.log_message('row# selected: '||v_rowno);
      apex_debug_message.log_message('Employee: '||apex_application.g_f03(v_rowno));
   end loop;
END;

В моей табличной форме я перешел на страницу 2 и выбрал 2 сотрудников. selected employees

Это выводит в моей отладке:

row# selected: 2
Employee: ADAMS
row# selected: 3
Employee: JAMES

Обратите внимание, что значением селектора строк является округленное число для текущей страницы отчета.

Если вам нужно обновить статус, вам нужно сослаться на массив, содержащий идентификатор записи. Таким образом, вы сможете выполнить UPDATE для этих записей.

...