Ajax + apex 4.2 =apex.server. API de processo
Requer que você tenha um processo no ponto de processo sob demanda da página ou um processo de inscrição. Nele você tem que chamar sua função e fornecer os parâmetros, que podem ser os itens da página. Para fornecer um retorno, escreva valores no buffer http com chamadas para
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;
Você pode fornecer facilmente
apex.server.process
com itens de página. O tratamento adicional está todo em javascript.Nota de aviso:o dataType é por padrão definido como JSON e, portanto, se você não fornecer outro tipo de dados padrão e não retornar uma string json, receberá um erro de análise. Portanto, se você retornar um texto em seu processo sob demanda, como INVÁLIDO, certifique-se de definir o tipo de dados como texto!
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');
};
}
} );
Eu não dividiria isso em ações mais dinâmicas do que o necessário, mesmo que seja possível. Eu pessoalmente não gosto de tentar usar uma ação verdadeira dinâmica de bloco PLSQL, apenas porque é mais obscuro agir se você quiser lidar com valores de retorno.
Basta definir seu botão para não enviar a página, mas a ação definida pela ação dinâmica. Em seguida, na ação dinâmica, crie uma ação verdadeira do tipo execute javascript e use a chamada ajax com callback(s) lá.