Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Chamando uma função Oracle via Ajax para fins de validação no local no Oracle APEX v4.2.2


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á.