Ajax + apex 4.2 =apex.server. process api
Det kräver att du har en process vid beställningsprocesspunkten på sidan eller en ansökningsprocess. I den måste du anropa din funktion och ange parametrarna, som kan vara sidobjekten. För att ge en retur, skriv värden till http-bufferten med anrop till 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;
Du kan enkelt tillhandahålla apex.server.process
med sidobjekt. Ytterligare hantering är allt i javascript.
Varning:datatypen är som standard inställd på JSON, och om du inte anger någon annan standarddatatyp och inte returnerar en json-sträng kommer du att få ett analysfel. Så om du returnerar en text inom din on-demand-process, såsom INVALID, se till att ställa in datatypen på 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');
};
}
} );
Jag skulle inte dela upp det här i mer dynamiska handlingar än nödvändigt, även om det kanske är möjligt. Jag personligen är inte förtjust i att försöka använda en PLSQL block dynamisk sann action, bara för att det är mer obskyrt att agera på om du vill hantera returvärden.
Sätt bara din knapp så att den inte skickar sidan, utan action definieras av dynamisk handling. Sedan i den dynamiska handlingen skapa en sann handling av typen exekvera javascript, och använd ajax-anropet med callback(s) där.