我有一个表格形式,显示提交处理的所有请求。提交者有机会随时取消请求。我希望通过简单地选中应取消的行的行选择器复选框并单击提交来完成此操作。
好的...我要创建的是一个表格,当检查[行选择器]复选框并提交表单时,该行中的“状态”列中的值设置为“取消”。
由于存在 [row selector] 复选框,我猜可能存在某种内置过程,可识别所选行并在所选行上运行操作。
有没有办法利用此功能并采取额外步骤将行的“状态”列的值设置为“已取消”?
我有一个表格形式,显示提交处理的所有请求。提交者有机会随时取消请求。我希望通过简单地选中应取消的行的行选择器复选框并单击提交来完成此操作。
好的...我要创建的是一个表格,当检查[行选择器]复选框并提交表单时,该行中的“状态”列中的值设置为“取消”。
由于存在 [row selector] 复选框,我猜可能存在某种内置过程,可识别所选行并在所选行上运行操作。
有没有办法利用此功能并采取额外步骤将行的“状态”列的值设置为“已取消”?
阅读我对汤姆回答的评论。流程示例代码:
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;
通常,添加的行选择器将存储在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 名员工。
这在我的调试中输出到:
row# selected: 2
Employee: ADAMS
row# selected: 3
Employee: JAMES
请注意,行选择器值是报表当前页面的行号。
如果您需要更新状态,则需要引用一个包含记录 ID 的数组。这样您就可以UPDATE
对这些记录执行一个。