Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:apex_automations

Oracle Apex 20.2 - Mit den APEX Automations Feature Code im Hintergrund bei Bedarf starten

Mit dem APEX Automations Feature (Declarative asynchronous processes ) läßt sich gut Logik im Hinterrund der Applikation bei Bedarf ausführen.

 APEX Automations

PDF ⇒ APEX Connect 2021 - APEX 20.2 Automations Feature und der Oracle Scheduler im Einsatz - Mittwoch, 5. Mai, 14:00 - 14:40 Online

Typische Business Cases:

Workflows anstarten wenn bestimmte Daten in der Datenbank vorliegen

  • Wie: Sachbearbeiter A hat Vorgang bearbeitet und abgeschlossen, Kunde B erhält automatisch eine Mail das der Vorgang bearbeitet wurde
  • Wie: Bei Fehlern im Log Admin per Mail benachrichtigen

Regelmäßig im Hintergrund etwas starten

  • Wie: Logs aufräumen

Vorteil:

  • Voll in der APEX Welt integriert
  • Es werden kein Rechte für das Anlegen von Jobs benötigt
  • Nach einen Deployment sind die Aufgaben/Jobs einfach “da” !
    • Jobs müssen nicht jedesmal umständlich neu angelegt / angepasst werden

Anlegen

Ablauf

 Interner Ablauf APEX Automations Feature

Die Automation

 Oracle APEX Automations

Voraussetzung

Das Schema in der die APP läuft muss das Rechte „create Job“ besitzen!

# als SYS
 
GRANT CREATE job TO GPI;

Anlegen über die APEX Oberfläche

Anlegen in der Applikation unter “Shared Components” /  ” Application Logic - Automations“

 Oracle APEX Automations anlegen

Über die Oberfläche definieren:  Oracle APEX Automations anlegen}

Auf die STATIC ID achten, über diese wird der Automation Task später in der API angesprochen!

In der Query kann auf die letzte Ausführung der Automation referenziert werden:

SELECT * 
  FROM {TABLE}
 WHERE created_at > apex_automation.get_last_run;

Im den Aktionen der Automation kann per „:“ Notation auf die Spalten in der Automation Check Query zugegriffen werden, über die API können Log Einträge erstellt und die Ausführung der Aktion gesteuert werden.

Beispiel Action:

BEGIN
 
  apex_automation.log_info(         p_message     => 'Found '||:ENAME );
 
  IF :ENAME = 'Gunther' THEN
      apex_automation.skip_current_row( p_log_message => 'Gunther is found' );
      apex_automation.log_warn(         p_message     => 'Gunther is found' );
  END IF;
 
  IF :ENAME IS NULL THEN   
      apex_automation.exit(p_log_message => 'No Member Name found' );
  END IF;   
 
END;

Über die API Aufrufen

Referenziert wird der Automation Task über seine Static ID.

Siehe dazu ⇒ https://docs.oracle.com/en/database/oracle/application-express/20.2/aeapi/APEX_AUTOMATION.html

Zum Beispiel über Button mit PL/SQL aufrufen:

apex_automation.execute(
        p_static_id       =>  'new-emp-message'
);

Abfragen

Metadaten abfragen:

Was wurde angelegt:

  • APEX_APPL_AUTOMATION_ACTIONS
  • APEX_APPL_AUTOMATIONS

Monitoring

  • APEX_AUTOMATION_LOG
  • APEX_AUTOMATION_MSG_LOG

Intern

Was wird erzeugt? – Wer ruft das dann auf?

  • Pro Automation wird kein Job angelegt, sondern ein zentraler APEX Job unter dem APEX Schema Eigentümer fragt per Default alle 2 Minuten die definierten Automations ab.
  •  Oracle Apex Automations Job
  • Dieser Job ruf wwv_flow_automation.EXECUTE_DUE_AUTOMATIONS auf und prüft Tabelle “WWV_FLOW_AUTOMATIONS” auf notwendige Aufrufe.
  • Falls der Job laufen soll, wird ein einmaliger Job über den Oracle Scheduler angelegt mit der Methode “wwv_flow_automation.EXECUTE_AUTOMATION_ACTIONS” .
  • Diese starte den eigentliche Task Code im richtigen Scope der jeweiligen APEX Applikation über “WWV_FLOW_PLUGIN.EXECUTE_PROCESS“.

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
prog/apex_automations.txt · Zuletzt geändert: 2021/05/05 15:02 von gpipperr