====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 ---- ==== 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