Ajax + apex 4.2 =apex.server. API procesu
Wymaga posiadania procesu w punkcie procesu na żądanie strony lub procesu aplikacji. W nim musisz wywołać swoją funkcję i podać parametry, którymi mogą być elementy strony. Aby zapewnić zwrot, zapisz wartości do bufora http z wywołaniami 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;
Możesz łatwo dostarczyć apex.server.process
z elementami strony. Dalsza obsługa jest w całości w javascript.
Uwaga ostrzegawcza:dataType jest domyślnie ustawiony na JSON, a zatem jeśli nie podasz żadnego innego domyślnego typu danych i nie zwrócisz ciągu json, otrzymasz błąd parsowania. Jeśli więc zwracasz tekst w ramach procesu na żądanie, na przykład INVALID, ustaw typ danych na tekst!
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');
};
}
} );
Nie podzieliłbym tego na bardziej dynamiczne akcje niż to konieczne, nawet jeśli byłoby to możliwe. Osobiście nie lubię próbować używać dynamicznej prawdziwej akcji bloku PLSQL, tylko dlatego, że bardziej niejasne jest działanie, jeśli chcesz zajmować się zwracanymi wartościami.
Po prostu ustaw przycisk tak, aby nie przesyłał strony, ale akcję zdefiniowany przez dynamiczną akcję. Następnie w akcji dynamicznej stwórz jedną prawdziwą akcję typu execute javascript i użyj wywołania ajax z wywołaniami zwrotnymi.