This is a test message to test the length of the message box.
Login
BTP Application Job
Erstellt von Software-Heroes

BTP - Application Job (Exit Notification)

144

Wofür kann man die Exits im Application Job verwenden und wie werden diese ausgeprägt? In diesem Artikel erfährst du mehr dazu.

Werbung


Im letzten Artikel hatten wir uns mit der Anlage des Application Jobs beschäftigt und unseren ersten lauffähigen Job gebaut. Dabei sind uns bereits die ersten Exits im Job-Catalog aufgefallen. Diese wollen wir uns in diesem Artikel einmal genauer ansehen und was wir damit machen können.

 

Einleitung

Nach der Anlage des Job-Katalogs landen wir im Formular und das Objekt steht in den ABAP Development Tools zur Verfügung. Im oberen Abschnitt finden wir unsere Ausführungsklasse, in der die Parameter und die Ausführung definiert ist.

 

Im unteren Abschnitt stehen drei Exits zur Verfügung für Prüfungen, Wertehilfen und Benachrichtigungen. In diesem Artikel werden wir dir die Prüfungen näher vorstellen.

 

Implementierung

Wie bereits für die Prüfungen, können wir die Klasse mit einem Klick auf den Link im Job-Katalog anlegen und erhalten den Standard Wizard für Klassen.

 

Leider wird auch in diesem Fall kein Interface vorbelegt und wir müssen das Interface IF_APJ_RT_JOB_NOTIF_EXIT selbst hinterlegen und per Quick Fix (STRG + 1) die Methoden anlegen. Anders als bei den Prüfungen, sind die Methoden im Interface nicht per DEFAULT implementiert, sodass der Quick Fix funktioniert.

CLASS zcl_bs_demo_job_adt_ntf DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES IF_APJ_RT_JOB_NOTIF_EXIT.
ENDCLASS.


CLASS zcl_bs_demo_job_adt_ntf IMPLEMENTATION.
  METHOD if_apj_rt_job_notif_exit~notify_jt_start.
  ENDMETHOD.


  METHOD if_apj_rt_job_notif_exit~notify_jt_end.
  ENDMETHOD.
ENDCLASS.

 

Methoden

Im folgenden Abschnitt beschreiben wir nun die einzelnen Methoden aus dem Interface und wann sie aufgerufen werden, leider ist die Dokumentation dafür nicht mehr ganz so umfangreich.

 

NOTIFY_JT_START

Die Methode wird aktuell noch nicht aufgerufen oder unterstützt, leider bekommt man den Hinweis nur über die Outlines. Da das Interface scheinbar über die SE24 angelegt wurde (Parameter mit ! und Texte in den Outlines), fehlen auch noch die ABAP Docs, die wahrscheinlich mit den nächsten Releases ausgeliefert werden.

 

Hinweis: Getestet hatten wir den Aufruf, indem wir einen Dump erzeugen, wenn die Methode aufgerufen wird, dies war aktuell noch nicht der Fall.

 

NOTIFY_JT_END

Nach etwas Testen wird die Methode nur dann aufgerufen, wenn der Job auf Fehler läuft. Wird der Job ohne Fehler beendet, dann wird der Exit nicht angesteuert. Um in der Ausführungsklasse einen Fehler zu provozieren, muss nur die Ausnahme der Methode EXECUTE ausgelöst werden, dann wird der Job automatisch auf Fehler gestellt und unser Exit wird aufgerufen.

RAISE EXCEPTION NEW cx_apj_rt_content( ).

 

Wir erhalten in der Methode verschiedene Informationen zum Job, dem Schritt dem Job-Katalog und die Job-Info, die aber nur Name und Count enthält.

 

Damit wir nun eine Benachrichtigung erzeugen können, benötigen wir noch weitere Informationen zum Job. Dabei bedienen wir uns der freigegebenen API, um weitere Informationen zum Job zu lesen. Damit erhalten wir Zugriff auf den Job-Ersteller, Laufzeiten und Status.

DATA(ls_job_details) = cl_apj_rt_api=>get_job_details( iv_jobname  = is_job_info-job_name
                                                       iv_jobcount = is_job_info-job_count ).

 

Dazu lesen wir noch die Mail des Job-Erstellers nach, formatieren die Job-Info für die E-Mail und senden die Mail, um diese dann zu validieren.

 

Benachrichtigung

Planen wir nun den Job noch einmal ein, dann sollte dieser nun auf Fehler laufen und eine Benachrichtigung an uns versandt werden.

 

In der E-Mail finden wir nun die aufbereiteten Job-Informationen als JSON, um noch einmal zu validieren, welche Informationen vorhanden sind. Die eigentliche Implementierung funktioniert nun so weit.

 

Komplettes Beispiel

Hier findest du die vollständige Exit-Klasse mit den Hilfsmethoden zur Aufbereitung des Contents für die Mail und dem Lesen der Mail des Job-Erstellers. Wie man den E-Mail-Versand einrichtet und Mails verschickt, erklären wir in anderen Artikeln auf dem Blog. 

CLASS zcl_bs_demo_job_adt_ntf DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_apj_rt_job_notif_exit.

  PRIVATE SECTION.
    METHODS send_mail
      IMPORTING id_receiver TYPE cl_bcs_mail_message=>ty_address
                id_subject  TYPE string
                id_content  TYPE string.

    METHODS format_json_content
      IMPORTING is_job_details   TYPE cl_apj_rt_api=>ty_job_info
      RETURNING VALUE(rd_result) TYPE string.
ENDCLASS.


CLASS zcl_bs_demo_job_adt_ntf IMPLEMENTATION.
  METHOD if_apj_rt_job_notif_exit~notify_jt_start.
    " Currently not working
  ENDMETHOD.


  METHOD if_apj_rt_job_notif_exit~notify_jt_end.
    DATA(ls_job_details) = cl_apj_rt_api=>get_job_details( iv_jobname  = is_job_info-job_name
                                                           iv_jobcount = is_job_info-job_count ).

    SELECT SINGLE FROM I_BusinessUserVH
      FIELDS DefaultEmailAddress
      WHERE UserID = @ls_job_details-job_user
      INTO @DATA(ld_mail).

    DATA(ld_json_formatted) = format_json_content( ls_job_details ).

    send_mail( id_receiver = CONV #( ld_mail )
               id_subject  = |Error in Job: { is_job_info-job_name }|
               id_content  = ld_json_formatted ).
  ENDMETHOD.


  METHOD send_mail.
    TRY.
        DATA(lo_mail) = cl_bcs_mail_message=>create_instance( ).

        lo_mail->set_sender( 'BTP-noreply@CONNECT.com' ).
        lo_mail->add_recipient( id_receiver ).

        lo_mail->set_subject( CONV #( id_subject ) ).

        lo_mail->set_main( cl_bcs_mail_textpart=>create_instance( iv_content      = id_content
                                                                  iv_content_type = 'text/html' ) ).

        lo_mail->send( ).

      CATCH cx_bcs_mail INTO DATA(lo_error).
        RAISE SHORTDUMP lo_error.
    ENDTRY.
  ENDMETHOD.


  METHOD format_json_content.
    DATA(ld_content) = /ui2/cl_json=>serialize( data          = is_job_details
                                                format_output = abap_true ).

    rd_result = replace( val = ld_content sub = cl_abap_char_utilities=>cr_lf with = '<br>' occ = 0 ).
  ENDMETHOD.
ENDCLASS.

 

Anmerkungen

Ohne ABAP-Mittel kann auch über Cloud ALM eine E-Mail gesendet werden, wenn ein Job im ABAP Environment auf Fehler läuft. Mit ABAP hat man mehr Möglichkeiten auf Fehler zu reagieren, hier empfiehlt sich aber auch eine Re-Use Komponente, wenn du immer wieder Mails schicken möchtest, vor allem für die Verwaltung der Mail-Texte und Empfänger.

 

Fazit

Wenn ein Job im System abbricht, besitzt du nun eine einfache Möglichkeit eine E-Mail zu versenden, um über den Abbruch zu informieren. Anstatt einer E-Mail kann auch ein Re-Schedule angetriggert oder eine Nachverarbeitung durchgeführt werden.


Enthaltene Themen:
BTPApplication JobABAP EnvironmentNotification
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


BTP - HTTP Service

Kategorie - ABAP

Du brauchst einen generischen Endpunkt im ABAP Environment? In diesem Artikel schauen wir uns die Möglichkeit des HTTP Services an.

14.02.2025

BTP - ABAP Unit Runner

Kategorie - ABAP

Wie kannst du deine ABAP Unit Tests auf dem ABAP Environment regelmäßig ausführen und dir die Ergebnisse zukommen lassen? Aktuell gibt es dafür keinen Standard.

11.02.2025

BTP - Custom Data Browser

Kategorie - ABAP

Was hast du auf dem ABAP Environment für Alternativen für die SE16, um deinem Fachbereich einfach Zugriff auf Daten zu geben? In diesem Artikel gehen wir auf die Details ein.

31.01.2025

RAP - Popup Defaultwerte

Kategorie - ABAP

Wie kannst du im Popup einer Aktion in RAP dem User Defaultwerte zur Verfügung stellen? In diesem Artikel erweitern wir unsere Anwendung.

21.01.2025

RAP - Popup Pflichtfelder

Kategorie - ABAP

Wie kannst du eigentlich Pflichtfelder für ein Popup in RAP definieren? In diesem Artikel werden wir etwas genauer auf die Details eingehen.

14.01.2025