2012-02-20 131 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

相關問題