Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aufrufen einer Oracle-Funktion über Ajax für Vor-Ort-Validierungszwecke in Oracle APEX v4.2.2

Ajax + Apex 4.2 =apex.server. Prozess-API
Es erfordert, dass Sie einen Prozess am On-Demand-Prozesspunkt der Seite oder einen Anwendungsprozess haben. Darin müssen Sie Ihre Funktion aufrufen und die Parameter angeben, die die Seitenelemente sein können. Um eine Rückgabe bereitzustellen, schreiben Sie Werte mit Aufrufen von htp.p in den http-Puffer .

DECLARE
  some_var1 VARCHAR2(50);
BEGIN
  some_var1 := my_package.my_function(:P1_EMPNO, :P1_DEPTNO);
  -- write values back
  htp.p(some_var1);
END;

Sie können einfach apex.server.process bereitstellen mit Seitenelementen. Die weitere Handhabung erfolgt ausschließlich in Javascript.
Hinweis zur Warnung:Der Datentyp ist standardmäßig auf JSON eingestellt. Wenn Sie also keinen anderen Standarddatentyp angeben und keinen JSON-String zurückgeben, erhalten Sie einen Parsing-Fehler. Wenn Sie also einen Text innerhalb Ihres On-Demand-Prozesses wie INVALID zurückgeben, stellen Sie sicher, dass Sie den Datentyp auf Text setzen!

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

Ich würde das nicht in mehr dynamische Aktionen als nötig aufteilen, auch wenn es möglich wäre. Ich persönlich versuche nicht gern, eine PLSQL-blockdynamische wahre Aktion zu verwenden, nur weil es obskurer ist, darauf zu reagieren, wenn Sie mit Rückgabewerten umgehen möchten.
Stellen Sie einfach Ihre Schaltfläche so ein, dass die Seite nicht gesendet wird, sondern Aktion definiert durch dynamisches Handeln. Erstellen Sie dann in der dynamischen Aktion eine echte Aktion vom Typ Javascript ausführen und verwenden Sie dort den Ajax-Aufruf mit Rückrufen.