2011-05-18 62 views
3

我遇到了一個問題,並且不確定使用Oracle ApEx解決此問題的最佳方法。如何在Oracle ApEx表單中維護狀態

基本上我有一個基於表1的表單,但同時這個表單中的一個部分/區域分支到另一個頁面,然後它將詳細信息添加到表2中。

爲了更好地展示這個例子,假設我有一個名爲CUSTOMER的表,其中包含客戶的個人詳細信息,例如CUST_ID,FIRSTNAME,SURNAME,DOB,然後我還有另一個名爲PURCHASES的表以下列,PURCHASE_ID,CUST_ID,ITEM,ITEM_DESCR,COST,其中CUST_ID是CUSTOMERS表的外鍵。

我現在想創建一個基於表CUSTOMER的Oracle Apex表單,但在這個表單中,在用戶提交表單並將其提交到數據庫之前,我還希望允許用戶將所有購買顧客通過某種方式在商店購買。一旦用戶輸入了客戶詳細資料以及5個購買記錄(以某種方式),所有提交併提交給CUSTOMER和PURCHASES表的數據庫。

任何人都可以請圍繞這種情況或可能的其他替代方法提出一種解決方案圍繞這種情況。

謝謝。

+0

爲了進一步闡明,當你說「基於表格CUSTOMER的表單」時,你的意思是創建一個客戶的簡單數據輸入表單嗎? – 2011-05-18 15:34:47

+0

是的託尼,但在同樣的形式,我想有一個類型的區域允許用戶輸入一個或多個客戶可能有的購買,但我希望這些信息始終顯示在客戶表單中的該區域內,然後用戶通過捕獲CUSTOMER和PURCHASES表提交/提交一次。希望這是有道理的。 – tonyf 2011-05-18 15:38:57

+0

看看http://apex.oracle.com/pls/otn/f?p=36342:6 - 這是你想要的嗎?第一頁只是顯示第7頁創建的數據(按Create按鈕去那裏)。第7頁是「你的」頁面。當你進入一個客戶和一些購買時,按提交。您應該看到您創建的新客戶;點擊他們的名字,購買將顯示在下面。 – 2011-05-18 16:22:34

回答

3

而不是重定向到第2頁進入表2的信息,你需要提交第1頁和分支第2頁。這將保存會話狀態爲第1頁你不希望第1頁數據更新到Table1中,因此請確保執行插入/更新的過程不會被此提交調用 - 例如使其保存按鈕或其他任何條件。

或者,像我的示例here一樣在一頁上完成。感興趣的頁面是通過創建按鈕到達的第7頁。雖然我沒有使用Apex嚮導來構建它 - 我不確定你是否可以,但我傾向於不使用嚮導和內置的表格工具工具在我的工作中,所以我不確定。

這是我做的第7頁:

1)創建一個空白頁

2)增加了一個HTML區域「新客戶」,並增加了對姓氏和文本項用於DOB日期項目。

3)創建的報告區域 「購買」 和以下SQL:

select apex_item.text(1,'') item_desc 
,  apex_item.text(2,'') cost 
from dual 
connect by level <= 5 

的CONNECT BY子句是生成從DUAL 5個虛設行的特技。 apex_item包生成表格形式的項目 - 在這種情況下,2個文本項目的item_desc和成本,與''作爲初始值。

4)創建2個按鈕: SUBMIT - 提交頁面 CANCEL - 重定向到創建一個PL/SQL過程上運行提交如下6頁

5):

declare 
    l_cust_id integer; 
begin 
    -- Insert the new customer 
    insert into so_customers (surname, dob) 
    values (:p7_surname, :p7_dob) 
    returning cust_id into l_cust_id; 

    -- Insert the purchases (if data has been entered) 
    for i in 1..apex_application.g_f01.count loop 
    if apex_application.g_f01(i) is not null then 
     insert into so_purchases (cust_id, item_desc, cost) 
     values (l_cust_id, 
       apex_application.g_f01(i), 
       apex_application.g_f02(i) 
      ); 
    end if; 
    end loop; 
end; 

我以SUBMIT按鈕爲條件進行處理。apex_application包中包含對應於表格形式列的數組變量g_f01,g_f02等。

6)當按下SUBMIT按鈕時,創建一個返回到第6頁的分支。

如果您希望功能偏離Apex的頁面和區域嚮導提供的「開箱即用」行爲,您必須編寫更復雜的代碼,如您所見。但是通過這種方式你可以做任何事情。

+0

Thansk @Tony爲您解答。我堅持的問題是,我還沒有提交第一頁的任何信息,因爲我想在所有信息都可用時保存/提交第一頁。你能提出一個不同的方法嗎? – tonyf 2011-05-18 11:36:57

+0

啊,我想我明白了 - 你正在失去Table1信息? – 2011-05-18 11:57:48

+0

我改寫了我的答案。 – 2011-05-18 12:00:33