2014-01-31 43 views
1

我正在使用帶有Oracle Apex v4.2.2的Oracle 11g,我想知道如何通過ajax調用來調用Oracle函數的最佳方式,在動態行動中。當場通過Ajax調用Oracle函數Oracle APEX v4.2.2中的驗證目的

我基本上有一個函數,它需要六個參數來返回'INVALID'或'VALID'的結果。

在我的頁面中,我希望能夠接受用戶輸入的值,並且一旦他們按下按鈕進行處理,我需要通過ajax檢查結果是'INVALID'還是'VALID',並立即向用戶提供一個對話框,通知他們有錯誤。

在Oracle APEX v4.2.2中是否有處理這種類型的ajax請求來調用函數的新方法?

任何幫助/實現以上的例子的鏈接,將是偉大的。

謝謝。

回答

3

Ajax + apex 4.2 = apex.server.process api
它需要您在頁面或應用程序進程的按需處理點處有一個進程。在這裏你必須調用你的函數並提供參數,這些參數可以是頁面項目。要提供返回,請在調用htp.p時將值寫入http緩衝區。

DECLARE 
    some_var1 VARCHAR2(50); 
BEGIN 
    some_var1 := my_package.my_function(:P1_EMPNO, :P1_DEPTNO); 
    -- write values back 
    htp.p(some_var1); 
END; 

您可以輕鬆地爲apex.server.process提供頁面項目。進一步處理全部用javascript。
警告的提示:dataType默認設置爲JSON,因此如果您不提供其他默認數據類型並且不返回json字符串,則會得到解析錯誤。因此,如果您在按需過程(如INVALID)內返回文本,請確保將數據類型設置爲文本!

apex.server.process ("MY_PROCESS", { 
    pageItems: "#P1_DEPTNO,#P1_EMPNO" 
    }, { 
    dataType: "text" 
    , success: function(pData) { 
     //pData should contain VALID or INVALID - alert it 
     alert(pData); 
     if (pData === 'INVALID') { 
     // do something here when the result is invalid 
     // maybe you want to color something red for example 
     alert('The data you have entered is invalid'); 
     }; 
    } 
    }); 

我不會在比所需的更動態的動作中分割它,儘管它可能是可能的。我個人不喜歡試圖使用PLSQL塊動態真實行爲,僅僅是因爲如果你想處理返回值更加模糊行事。
只需設置您的按鈕不提交頁面,但動作定義的動作。然後在動態行爲中創建一個類型爲execute javascript的真正行爲,並在那裏使用帶有回調的ajax調用。

+0

嗨湯姆,再次感謝您的回覆,但只是有幾個查詢,因爲我從來沒有實際使用過apex.server.process:Q1)我假設你的點播頁面進程的名稱叫做「MY_PROCESS」。 Q2)根據上面的示例,pageItems排序是否必須與my_package.my_function(:P1_EMPNO,:P1_DEPTNO)中的參數的順序相匹配,這似乎不是這種情況? Q3)對不起,我沒有完全理解你的真實行動要點 - 你上面的最後一句話。請您詳細說明這一點,我是否也需要進行FALSE操作?謝謝湯姆。 – tonyf

+0

1)是的,這是正確的,名字必須匹配! 2)訂單根本不重要。只需在會話狀態中設置這些項目的值,以便它們在您的過程中可用3)通過按下按鈕來進行ajax調用,我假設使用動態操作對該按鈕的點擊作出反應最容易的。動態動作然後會有一個類型爲「execute javascript」的真正動作,並且在那個動作中你將執行ajax調用。 – Tom

+0

嘿湯姆,真的不知道發生了什麼,但它看起來像我的點播頁面進程正在從apex.server.process調用,因爲我有一個插入語句提交給我的結果。但事實是,實際的apex.server。過程成功部分沒有返回任何警報 - 具體來說,警報(pData)甚至沒有顯示任何內容或沒有觸發。我不認爲htp.p正在工作。無論如何,在Chrome檢查員看到實際結果?不知道我是否錯過了任何。謝謝。 – tonyf