Oracle
 sql >> Database >  >> RDS >> Oracle

Chiamata di una funzione Oracle tramite Ajax per scopi di convalida in loco in Oracle APEX v4.2.2

Ajax + apex 4.2 =apex.server. API di processo
Richiede che tu disponga di un processo nel punto di elaborazione su richiesta della pagina o di un processo di candidatura. In esso devi chiamare la tua funzione e fornire i parametri, che possono essere gli elementi della pagina. Per fornire un ritorno, scrivi valori nel buffer http con chiamate a 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;

Puoi facilmente fornire apex.server.process con elementi di pagina. L'ulteriore gestione è tutta in javascript.
Nota di avviso:dataType è impostato per impostazione predefinita su JSON, quindi se non fornisci altri tipi di dati predefiniti e non restituisci una stringa json, otterrai un errore di analisi. Quindi, se restituisci un testo all'interno del tuo processo su richiesta come INVALID, assicurati di impostare il tipo di dati su testo!

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');
      };
    }
  } );

Non lo dividerei in azioni più dinamiche del necessario, anche se potrebbe essere possibile. Personalmente non mi piace provare a utilizzare una vera azione dinamica del blocco PLSQL, solo perché è più oscuro su cui agire se si desidera gestire i valori di ritorno.
Imposta il pulsante non per inviare la pagina, ma per l'azione definito da un'azione dinamica. Quindi nell'azione dinamica crea una vera azione di tipo esegui javascript e usa la chiamata ajax con i callback lì.