我将Oracle 11g与Oracle Apex v4.2.2一起使用,我想知道如何在Dynamic Action中通过ajax调用来调用Oracle函数的最佳方法。
我基本上有一个带有六个参数的函数,这些参数返回“ INVALID”或“ VALID”的结果。
在我的页面中,我希望能够接受用户输入的值,一旦他们按下按钮进行处理,我就需要通过ajax检查结果是“ INVALID”还是“ VALID”,并立即向用户显示一个对话框,通知他们有错误。
在Oracle APEX v4.2.2中,是否有一种新的方法来处理这种类型的ajax请求以调用函数?
Ajax + apex 4.2 = apex.server.process api
它要求您在页面或应用程序过程的按需过程点具有一个过程。在其中,您必须调用函数并提供参数,这些参数可以是页面项。要提供返回值,请通过调用将值写入http缓冲区htp.p
。
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),请确保将数据类型设置为text!
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调用。