ABAP Cloud - Jobs
Wie sieht es eigentlich bei ABAP Cloud mit den Jobs aus und wie werden sie in der neuen Welt erstellt und verwendet? Mehr dazu erfährst du in diesem Artikel.
Inhaltsverzeichnis
Fast jeder User in SAP sollte Batch-Jobs kennen oder zumindest einmal einen verwendet haben. Sie sind wichtig für die Nacht und verteilen Arbeitslast im System auf die Nachtzeiten. In diesem Artikel schauen wir uns einmal die Änderungen im Bereich der Jobs an und was ABAP Cloud für Auswirkungen darauf hat.
Einleitung
Jobs sind ein zentraler Bestandteil des ABAP Systems, da sie die Last der Verarbeitung auf die Nacht übertragen und verschiedene Aufgaben ohne den Eingriff des Users übernehmen. Ob es der Aufbau von Statistiken ist, die Verarbeitung neuer Daten oder einfach nur das System bereinigen. Das Konzept der Jobs gibt es seit Ewigkeiten im System und bisher hatte diese immer gleich funktioniert. Mit ABAP Cloud wird dieses Konzept einmal über den Haufen geworfen und mit etwas Neuem angereichert.
Klassisches ABAP
Im ABAP basierten Jobs vor allem auf Reports, über die Transaktion SM36 konnte man neue Jobs im System erstellen und einplanen oder direkt über den betreffenden Report die Funktionalität ausführen. Über die Transaktion SM37 konnte man die Jobläufe auswerten, sich die Logs anschauen oder die Ausgaben überprüfen. Die Grundfunktionalität wurde über die GUI zur Verfügung gestellt und jeder konnte sich individuell seine Jobs anschauen.
Application Job
Der Nachfolger der klassischen Batch-Jobs ist nun der Application Job. Dieser basiert nicht mehr auf einem Report, da Reports kein ABAP Cloud sind, sondern auf Klassen. Diese Klassen werden durch den Application Job zur Verarbeitung aufgerufen und bilden die eigentliche Logik ab.
Die verschiedenen Artikel zum Thema findest du hier:
BTP - Application Jobs (Einführung)
BTP - Application Jobs (Anlage)
BTP - Application Job (Exit Check)
BTP - Application Job (Exit Notification)
BTP - Application Job (Interne API)
BTP - Application Job (Externe API)
Vergleich
Halten wir nun einmal die beiden Techniken gegenüber und vergleichen sie miteinander, um einen besseren Überblick über die Funktionen zu erhalten.
Einplanung (User)
Die Einplanung durch den User findet in der klassischen Welt über die Transaktion SM36 oder den Report selbst statt. Dabei besteht die Möglichkeit einen wiederkehrenden Job zu erstellen, der dann regelmäßig im System läuft.
In ABAP Cloud verwendest du die Fiori App "Application Jobs" (F1240), um einen neuen Job zu erstellen oder ein wiederkehrendes Pattern einzurichten.
User-Eingabe
Wie sieht es im Bereich user-Input aus? im klassischen ABAP kann der User von außen eine Variante setzen oder Variablen mitgeben, um die Verarbeitung zu beeinflussen.
In ABAP Cloud gibt es dafür die Parameter, diese werden bei der Einplanung des Jobs in Schritt 3 der App "Application Jobs" abgefragt.
Job mit Schritten
Weiterhin gibt es die Möglichkeit einen Job mit mehreren Schritten zu definieren, wenn zum Beispiel mehrere Reports in einer bestimmten Reihenfolge ausgeführt werden sollen oder man den gleichen Report mit unterschiedlichen Abgrenzungen starten möchte.
In ABAP Cloud gibt es die Möglichkeit weitere Templates über die App "Application Job Templates" (F2058) zu erstellen. Dabei kannst du Templates erstellen, die mehrere Schritte enthalten und so später in der "Application Jobs" App das Template für die Einplanung verwenden.
Einplanung (API)
Im klassischen ABAP System stehen verschiedene Funktionsbausteine (JOB_*) zur Verfügung, um Jobs maschinell bzw. aus der Verarbeitung im System einzuplanen.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = ld_jobname
IMPORTING
jobcount = ld_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
SUBMIT rs_aucv_runner
USING SELECTION-SET 'TEST'
USER sy-uname
VIA JOB ld_jobname NUMBER ld_jobcount
AND RETURN.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = ld_jobcount
jobname = ld_jobname
strtimmed = abap_true
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
ABAP Cloud stellt eine interne ABAP API zur Verfügung (CL_APJ_RT_API), aber auch eine externe OData API (BC_EXT_APPJOB_MANAGEMENT), um Jobs im System zu planen. Weitere Details zu den APIs kannst du den oben verlinkten Artikeln entnehmen.
DATA(ls_start) = VALUE cl_apj_rt_api=>ty_start_info( start_immediately = abap_true ).
cl_apj_rt_api=>schedule_job( EXPORTING iv_job_template_name = 'ZBS_DEMO_JOB_ADT_TEMPLATE'
iv_job_text = 'Single run from Code (Immediately)'
is_start_info = ls_start
it_job_parameter_value = mt_parameter
IMPORTING ev_jobname = DATA(ld_jobname)
ev_jobcount = DATA(ld_jobcount) ).
Auswertung
Ausgaben im Batch-Job finden zum einen in das Joblog statt, dazu werden erzeugte Meldungen (per MESSAGE) an den Job gehangen. Zum anderen werden alle WRITE Ausgaben in den Spool übernommen. So können unterschiedliche Arten von Protokollen und Ausgaben erzeugt werden, die später auch exportiert oder gedruckt werden können.
In ABAP Cloud können mehrere Application Logs an einen Job gehangen werden, um so alle Meldungen an den User zu übergeben. Eine Spool-Ausgabe gibt es nicht mehr Out-of-the-Box und muss manuell als Formular oder E-Mail (Beispiele) implementiert werden.
Hinweis: Je nach dem Stand deines Systems, werden mehr oder weniger Funktionen der Application Jobs im ABAP Cloud Umfeld zur Verfügung stehen. Ab S/4 HANA 2022 stehen so weit die meisten Funktionalitäten zur Verfügung.
Unterschied
Einen Unterschied kann es auf deinem System allerdings geben. Wenn ihr den Business Partner noch nicht verwendet, also auf den klassischen SU01 User setzt, dann wir die Berechtigung über die klassische PFCG Rolle zugewiesen. Damit sind keine Business Kataloge nötig und können auch nicht verwendet werden. Die Zukunft ist allerdings das Konzept des Business Partners im System (Employee/Business User).
Fazit
Das Konzept der Jobs ändert sich mit ABAP Cloud am umfassendsten, erlaubt damit aber eine saubere Abgrenzung von Job und Anwendung für den User und mischt die beiden Konzepte nicht mehr. Bei der Erstellung von Jobs sollte man einige Dinge beachten, vor allem aber auf eine robuste Entwicklung setzen, da sonst ein Finden der Fehler recht schwer wird.