====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.
{{ :prog:apex:apex_automations_apex_connect_2021.png?600 | APEX Automations }}
PDF => {{ :prog:apex-automation-oracle-scheduler-connect-2021_gunther_pipperr_v01.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
Nach einen erneuten Deployments prüfen ob die APEX-Automations noch nicht deaktiviert sind!
----
==== Anlegen====
=== Ablauf ===
{{ :prog:apex:apex_automation_architecture_overview.jpg | Interner Ablauf APEX Automations Feature}}
=== Die Automation ===
{{ :prog:apex:apex_automations_create_automations_uebersicht_v01.jpg?600 | 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“
{{ :prog:apex:apex_automations_create_automations.jpg?300 | Oracle APEX Automations anlegen}}
Über die Oberfläche definieren:
{{ :prog:apex_automations_create_automations_flows_v01.png | 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.
* {{ :prog:apex:oracle_apex_automations_background_job.jpg| 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 ====
Oracle Doku:
* https://docs.oracle.com/en/database/oracle/application-express/20.2/htmdb/about-automations.html#GUID-23FFD57A-D29A-482D-AA7D-4CBC348662AC
Web:
* https://blogs.oracle.com/apex/automate-your-business-process-in-oracle-apex-202