2012-02-20 19 views
3

我有一个表格形式,显示提交处理的所有请求。提交者有机会随时取消请求。我希望通过简单地检查应该取消的行的选择器复选框并点击提交来完成。带有[行选择符]的APEX表格形式:如何在提交的选定行中设置列的值

好吧......我想创建的是一个表格形式,当[行选择器]复选框被选中并且表单被提交时,行的'状态'列中的值被设置为'取消'。

由于[行选择器]复选框存在,我猜测可能是某种内置的进程,它标识选定的行并在选定的行上运行一个操作。

有没有办法利用这个功能,并采取额外的步骤来设置该行'状态'列的值为'取消'?

回答

1

通常,添加的行选择器将存储在apex_application.g_f01数组中(有关这些数组的更多信息,请参阅see the 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 

,请注意该行选择器值是报告的当前页的ROWNUMBER。

如果您需要更新状态,则需要引用包含记录ID的数组。这样你就可以在这些记录上执行UPDATE

+1

APEX 4.1具有新功能。您可以将流程与表格形式相关联,将其范围设置为“对于创建和修改的行”。该过程将针对每个修改的行执行。因此,您可以使用APEX $ ROW_SELECTOR变量来测试是否选中了行选择器(如果选中,则返回X,否则返回null)。它也有变量APEX $ ROW_NUM和APEX $ ROW_STATUS来获取当前行的rownum和状态。另外我使用apex_040100.wwv_flow_tabular_form.get_row_values函数来获取按列名索引的行值的关联数组。所以你可以在没有丑陋的“apex_application.g_fXX”结构的情况下获得列值。 – NoGotnu 2013-06-08 11:03:02

3

阅读我对汤姆的答案的评论。过程代码示例:

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; 
+0

非常有趣。我不知道那件事。但是,这不是一个真正的记录功能,是吗? – Tom 2013-06-09 20:52:14

+0

新项目(APEX $ ROW_SELECTOR等...)记录功能http://docs.oracle.com/cd/E37097_01/doc/doc.42/e35125/concept_sub.htm#HTMDB28714。 wwv_flow_tabular_form.get_row_values - 不,我在文档中找不到。 – NoGotnu 2013-06-10 06:47:22

+0

该链接已过期,请使用新的链接https://docs.oracle.com/database/121/HTMDB/concept_sub.htm#CHDGJFII – Nidheesh 2018-03-07 10:04:55

相关问题