sql >> Base de Datos >  >> RDS >> Oracle

Llamar a una función de Oracle a través de Ajax para fines de validación en el lugar en Oracle APEX v4.2.2

Ajax + apex 4.2 =apex.server. API de proceso
Requiere que tenga un proceso en el punto de proceso bajo demanda de la página o un proceso de solicitud. En él, debe llamar a su función y proporcionar los parámetros, que pueden ser los elementos de la página. Para proporcionar un retorno, escriba valores en el búfer http con llamadas 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;

Puede proporcionar fácilmente apex.server.process con elementos de página. El manejo posterior está todo en javascript.
Nota de advertencia:el tipo de datos está configurado de forma predeterminada en JSON y, por lo tanto, si no proporciona ningún otro tipo de datos predeterminado y no devuelve una cadena json, obtendrá un error de análisis. Por lo tanto, si devuelve un mensaje de texto dentro de su proceso bajo demanda, como NO VÁLIDO, ¡asegúrese de establecer el tipo de datos en 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');
      };
    }
  } );

No dividiría esto en acciones más dinámicas de lo necesario, aunque podría ser posible. Personalmente, no me gusta intentar usar una acción real dinámica de bloque PLSQL, solo porque es más oscuro actuar si desea lidiar con los valores devueltos.
Simplemente configure su botón para que no envíe la página, sino la acción. definida por la acción dinámica. Luego, en la acción dinámica, cree una acción verdadera de tipo ejecutar javascript y use la llamada ajax con devolución de llamada allí.