Job lesen in dem man ein Programm angibt welches in der Stepliste ist und Mail versenden

 

 

REPORT  z_job_lesen.

************************************************************************

************************************************************************

****************************             *******************************

***************************   @MREGOTZ    ******************************

****************************             *******************************

************************************************************************

*&H

*&H PROGRAMMNAME       : ZCHPGHR_IF_SAP_CHECK_JOB

*&H TRANSAKTIONSCODE   : Z_PTEXDIR

*&H PROGRAMMTITEL      : Prüfen ob Job erfolgreich war sonst Mail senden

*&H ZWECK              : Dieses Programm Prüft ob in der SM37 der Job

*&H                      erfolgreich ausgeführt wurde.

*&H                      Falls nicht sendet er eine E-MAIL.

*&H AUTOR              : Regotz Michel

*&H DATUM              : 27.05.2020

*&H VORAUSSETZUNGEN    : BODET im Einsatz

*&H SAP-MODUL          : HR PT

*&H

*&H Company/Department : Swisscom AG

*&H Phone              : +41 79 322 04 86 (Mobil)

*&H E-Mail             : Michel.Regotz@Swisscom.ch

*&H

************************************************************************

*&D

*&D Beschreibung       : Dieses Programm Prüft ob in der SM37 der Job

*&D                      erfolgreich ausgeführt wurde.

*&D                      Falls nicht sendet er eine E-MAIL.

*&D

*&D                      Er prüft die beiden Jobs

*&D                      - Z_BODET_ABSENZEN

*&D                      - Z_BODET_FERIENSALDI_JAHRESWECHSE

*&D

*&D                      Falls einer dieser beiden Jobs abgebrochen ist

*&D                      wird ein Mail versendet

*&D

*&D --------------------------------------------------------------------

*&D    Leistung        :   BODET

*&D --------------------------------------------------------------------

*&D    Tabellen        :   SM37 Job Resultate

*&D --------------------------------------------------------------------

*&D    Verarbeitung    :   -> Jobs lesen

*&D                        -> Job status abrfage

*&D                        -> Mail falls abgebrochen

*&D

************************************************************************

*&C Change history     :

*&C --------------------------------------------------------------------

*&C Developer           | Date                 | Description

*&C --------------------------------------------------------------------

*&C <Name>              | <Date>               | <Description>

*&C --------------------------------------------------------------------

*&C <Name>              | <Date>               | <Description>

*&C --------------------------------------------------------------------

*&C <Name>              | <Date>               | <Description>

*&C --------------------------------------------------------------------

*&C <Name>              | <Date>               | <Description>

************************************************************************

 

 

************************************************************************

* DATENDEKLARATION                                                     *

************************************************************************

INCLUDE lbtchdef. " Hintergrundverarbeitung der Definitionen.

INCLUDE <list>. " Ikonen, Zeilen u.a. Definitionen auflisten.

 

* Datendeklaration: BP_FIND_JOBS_WITH_PROGRAM

DATA sel_joblist LIKE tbtcjob OCCURS 100 WITH HEADER LINE.

" Interne Tabelle für gefundene Jobs.v

 

* Datendeklaration: SHOW_JOBSTATE

DATA: " Mögliche Jobstatus.

gf_aborted TYPE c,

gf_finished TYPE c,

gf_preliminary TYPE c,

gf_ready TYPE c,

gf_running TYPE c,

gf_scheduled TYPE c.

 

DATA: gf_status TYPE text20.

* Datendeklaration: Mailversand

DATA: gf_mail_senden TYPE c.

 

* Datendeklaration: Mailversand Form

DATA: gt_longtext TYPE tlinet.

Data: gs_longtext type tline.

DATA: gf_sdlstrtdt TYPE c LENGTH 10.

DATA: gf_strtdate  TYPE c LENGTH 10.

DATA: gf_strttime TYPE c LENGTH 8.

 

DATA: gf_header  TYPE so_obj_des. "VALUE 'Betreff mit CL_BCS erzeugen'.

*

DATA: gf_mlrec         TYPE so_obj_nam,

      gf_sent_to_all   TYPE os_boolean,

      gf_email         TYPE adr6-smtp_addr,

*      gf_subject       TYPE so_obj_des,

*      gf_text          TYPE bcsy_text,

      gt_mailtext      TYPE soli_tab,

      gr_mail          TYPE REF TO cl_bcs,

      gr_bcs_exception TYPE REF TO cx_bcs,

      gr_recipient     TYPE REF TO if_recipient_bcs,

      gr_sender        TYPE REF TO cl_sapuser_bcs,

      gf_body          TYPE string,

      gr_document      TYPE REF TO cl_document_bcs,

      gt_member        TYPE TABLE OF sodm1,

*      gs_member        TYPE sodm1,

      gt_objpara       TYPE TABLE OF selc,

      gt_objparb       TYPE TABLE OF soop1,

      gt_recipients    TYPE bcsy_re3,

      gs_recipient     TYPE bcss_re3.

 

FIELD-SYMBOLS: <gfs_verteiler> TYPE somlreci1,

               <gfs_member> TYPE sodm1.

 

************************************************************************

* SELEKTIONSPARAMETER                                                  *

************************************************************************

 

PARAMETERS: p_report TYPE sy-repid.

 

************************************************************************

* INITIALIZATION                                                       *

************************************************************************

 

************************************************************************

* AT SELECTION-SCREEN OUTPUT                                           *

************************************************************************

 

************************************************************************

* START-OF-SELECTION                                                   *

************************************************************************

 

START-OF-SELECTION.

 

* Jobs suchen, die das ABAP-Programm RSCRIDX4 enthalten.

* Programm- und Variantenname in Großbuchstaben. Es können auch

* Jobs gesucht werden, die ein externes Programm ausführen.

  CALL FUNCTION 'BP_FIND_JOBS_WITH_PROGRAM'

    EXPORTING

      abap_program_name             = p_report

      "'PFCG_TIME_DEPENDENCY'

      abap_variant_name             = ' '

      external_program_name         = ' '

      " Im nicht-interaktiven Modus kann mit einem

      " Programmnamen und/oder einem Variantennamen

      " gesucht werden. Nichtangabe dieser "Spezifikationen

      " führt zu "PROGRAM_SPECIFICATION_MISSING.

      dialog                        = btc_no

      " BTC_NO: Nicht-interaktiver Modus. Mindestens

      " einen Programmnamen im Aufruf angeben.

      " BTC_YES: Benutzer gibt Programmnamen

      " und Variante ein.

    TABLES

      joblist                       = sel_joblist

      " Interne Tabelle mit Format TBTCJOB, die alle

      " gefundenen Jobs enthält.

    EXCEPTIONS

      no_jobs_found                 = 1

      program_specification_missing = 2

      invalid_dialog_type           = 3

      job_find_canceled             = 4

      OTHERS                        = 5.

 

  IF sy-subrc <> 0.

*<Error handling>

  ENDIF.

 

 

* Listen-Header angeben.

  WRITE: / 'Status', 9 'Job Name', 50 'Job Nr.', 60 'Geplant', 72 'Ausgeführt', 85 'Zeit', 100 'Statustext'.

  ULINE AT /1(120).

 

  SORT sel_joblist BY sdlstrtdt ASCENDING.

 

 

* Schleife durch von BP_FIND_JOBS_WITH_PROGRAM gefundene Jobs.

  LOOP AT sel_joblist.

 

    CALL FUNCTION 'SHOW_JOBSTATE'

      EXPORTING

        jobcount         = sel_joblist-jobcount

        jobname          = sel_joblist-jobname

        " Zu prüfenden Job kennzeichnen. Name

        " und Nummer sind erforderlich.

      IMPORTING

        " Mögliche Status. Status des Jobs wird auf Wert ‘X’ festgelegt.

        aborted          = gf_aborted              " Job abnormal beendet.

        finished         = gf_finished             " Job erfolgreich abgeschlossen.

        preliminary      = gf_preliminary

        " Job kann nicht gestartet werden: Job

        " eingeplant, jedoch noch nicht freigegeben

        " oder Job ohne Startbedingung eingeplant.

        ready            = gf_ready

        " Job eingeplant, freigegeben, Startbedingung

        " erfüllt, Job jedoch noch nicht gestartet.

        running          = gf_running              " Job wird verarbeitet.

        scheduled        = gf_scheduled            " Job eingeplant und freigegeben, wartet auf

        " Erfüllung der Startbedingung.

      EXCEPTIONS

        jobcount_missing = 1

        jobname_missing  = 2

        job_notex        = 3

        OTHERS           = 4.

 

    IF sy-subrc <> 0.

*<Error handling>

    ENDIF.

 

* Den Status des Jobs bestimmen, der gerade von

* SHOW_JOBSTATE geprüft wurde. Statusikone zuordnen und in

* Liste schreiben.

 

    "Status in Text umwandeln

    IF gf_aborted = 'X'.

      gf_status = 'abgebrochen'.

    ELSEIF gf_finished = 'X'.

      gf_status = 'fertig'.

    ELSEIF gf_preliminary = 'X'.

      gf_status = 'freigegeben'.

    ELSEIF gf_ready = 'X'.

      gf_status = 'bereit'.

    ELSEIF gf_running = 'X'.

      gf_status = 'aktiv'.

    ELSEIF gf_scheduled = 'X'.

      gf_status = 'geplant'.

    ENDIF.

 

    "Protokoll erestellen

    IF gf_finished = 'X'.

      WRITE: /3 icon_checked AS ICON,

      AT 9 sel_joblist-jobname,

      AT 50 sel_joblist-jobcount,

      AT 60 sel_joblist-sdlstrtdt,

      AT 72 sel_joblist-strtdate,

      AT 85 sel_joblist-strttime,

      AT 100 gf_status.

    ELSEIF gf_aborted = 'X'.

      WRITE: /3 icon_failure AS ICON,

      AT 9 sel_joblist-jobname,

      AT 50 sel_joblist-jobcount,

      AT 60 sel_joblist-sdlstrtdt,

      AT 72 sel_joblist-strtdate,

      AT 85 sel_joblist-strttime,

      AT 100 gf_status.

    ELSE.

      WRITE: /3 icon_incomplete AS ICON,

      AT 9 sel_joblist-jobname,

      AT 50 sel_joblist-jobcount,

      AT 60 sel_joblist-sdlstrtdt,

      AT 72 sel_joblist-strtdate,

      AT 85 sel_joblist-strttime,

      AT 100 gf_status.

    ENDIF.

 

    "Mailversandliste vorbereiten

    gf_sdlstrtdt = |{ sel_joblist-sdlstrtdt DATE = USER }|.

    gf_strtdate = |{ sel_joblist-strtdate DATE = USER }|.

 

    CONCATENATE sel_joblist-strttime(2)

                ':'

                sel_joblist-strttime+2(2)

                ':'

                sel_joblist-strttime+4(2)

                INTO gf_strttime.

 

    CONCATENATE '<tr><td>'

                sel_joblist-jobname

                sel_joblist-jobcount

                gf_sdlstrtdt

                gf_strtdate

                gf_strttime

                gf_status

                '</td></tr>'

                INTO gs_longtext-tdline SEPARATED BY space.

    Append gs_longtext to gt_longtext.

 

    IF sel_joblist-strtdate  = sy-datum AND gf_finished IS INITIAL.

      gf_mail_senden = 'X'."Mail versenden.

    ENDIF.

 

  ENDLOOP.

 

  IF gf_mail_senden = 'X'.

    PERFORM send_mail.

  ENDIF.

 

*&---------------------------------------------------------------------*

*&      Form  SEND_MAIL

*&---------------------------------------------------------------------*

*       @mregotz 09.06.2016

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM send_mail .

 

 

  TRY.

      "Create send request

      gr_mail = cl_bcs=>create_persistent( ).

 

      "Email Von...(Absender)

      gr_sender = cl_sapuser_bcs=>create( sy-uname ).

      "gr_sender = 'Support3rdLevel.SAP-HR@swisscom.com'.

 

      "Add sender to send request

      CALL METHOD gr_mail->set_sender

        EXPORTING

          i_sender = gr_sender.

 

      IF sy-sysid = 'CD1'.

        "Email An... (Empfänger)

        gf_email = 'michel.regotz@swisscom.com'. "'@hotmail.ch'

        "verwenden die hotmail Adresse, auf Swisscom Adressen kann man keine Mails schicken Security.

        gr_recipient = cl_cam_address_bcs=>create_internet_address( gf_email ).

        "Add recipient to send request

        CALL METHOD gr_mail->add_recipient

          EXPORTING

            i_recipient = gr_recipient

            i_express   = 'X'.

      ENDIF.

 

      "Lesen einer Verteiler Liste

      CALL FUNCTION 'SO_DLI_READ'

        EXPORTING

          distributionlist           = 'ZCH_BODET'

          system_dli                 = 'X'

        TABLES

          member                     = gt_member

          objpara                    = gt_objpara

          objparb                    = gt_objparb

        EXCEPTIONS

          active_user_not_exist      = 1

          communication_failure      = 2

          component_not_available    = 3

          dl_name_not_exist          = 4

          folder_not_exist           = 5

          folder_no_authorization    = 6

          forwarder_not_exist        = 7

          object_not_exist           = 8

          object_no_authorization    = 9

          operation_no_authorization = 10

          owner_not_exist            = 11

          parameter_error            = 12

          substitute_not_active      = 13

          substitute_not_defined     = 14

          system_failure             = 15

          user_not_exist             = 16

          x_error                    = 17

          OTHERS                     = 18.

      IF sy-subrc <> 0.

        " MESSAGE 'Es wude keine Empfängerliste gefunden' TYPE 'I' DISPLAY LIKE 'W'.

      ELSE.

        " Verteilerliste hinzufügen

        LOOP AT gt_member ASSIGNING <gfs_member>.

          CLEAR:  gf_email.

          gf_email = <gfs_member>-address.

          "Email An... (Empfänger)

          gr_recipient = cl_cam_address_bcs=>create_internet_address( gf_email ).

          "Vertilerliste Sendeauftrag hinzufügen

          CALL METHOD gr_mail->add_recipient

            EXPORTING

              i_recipient = gr_recipient

              i_express   = 'X'.

 

          CLEAR gs_recipient.

          gs_recipient-recipient = gr_recipient.

          APPEND gs_recipient TO gt_recipients.

 

 

        ENDLOOP.

      ENDIF.

 

      "Email Betreff

      IF sy-sysid = 'CD1'.

        CONCATENATE 'Testmail - BODET Jobabruch' p_report INTO gf_header SEPARATED BY space.

      ELSE.

        CONCATENATE 'BODET Jobabruch' p_report INTO gf_header SEPARATED BY space.

      ENDIF.

 

      "HTML-Formatierter Mailinhalt

      CONCATENATE gf_body

      `<table cellspacing="1" cellpadding="1"`

      ` width="600" border="0">` INTO gf_body.

      CONCATENATE gf_body `<tbody>` INTO gf_body.

      CONCATENATE gf_body `<tr><td valign="top"><strong>`

      `BODET Jobabruch!`

      `</strong></td></tr><tr><td><br>`

      `Der heutige Job für die Verbuchung der Absenzen oder Feriensaldi wurde im SAP abgebrochen. `

      `Bitte kontaktieren Sie ihren SAP Berater. </td></tr><br><br>`

 

      `<tr><td><strong> Kontakte </strong></td></tr>`

      `<tr><td> Jens Moerk </td></tr>`

      `<tr><td> Jens.Moerk@swisscom.com </td></tr>`

      `<tr><td> +41-58-221 12 81 </td></tr><br>`

      `<tr><td> Michel Regotz </td></tr>`

      `<tr><td> Michel.Regotz@swisscom.com </td></tr>`

      `<tr><td> +41-79-322 04 86 </td></tr><br><br>`

      `<tr><td><strong> Jobliste </strong></td></tr><br>`

      INTO gf_body.

 

      LOOP AT gt_longtext INTO gs_longtext.

        CONCATENATE gf_body gs_longtext-tdline INTO gf_body.

      ENDLOOP.

 

      CONCATENATE gf_body `</tbody></table>` INTO gf_body.

 

 

 

      gt_mailtext = cl_document_bcs=>string_to_soli( gf_body ).

 

      "Email BODY (Text)

      gr_document = cl_document_bcs=>create_document( i_type = 'HTM'

       i_text = gt_mailtext

       i_subject = gf_header ).

 

      "Inhalte dem Sendeauftrag zuordenen

      CALL METHOD gr_mail->set_document( gr_document ).

 

      "Mail direkt senden ohne das man dies in der SOST zum senden freigeben muss.

      "Sofort senden aktivieren, andernfalls versendet "SCOT" beim nächsten Joblauf

      CALL METHOD gr_mail->set_send_immediately

        EXPORTING

          i_send_immediately = 'X'.

 

      "Email senden

      CALL METHOD gr_mail->send(

        EXPORTING

          i_with_error_screen = 'X'

        RECEIVING

          result              = gf_sent_to_all ).

      IF gf_sent_to_all = 'X'.

        WRITE 'Email sent!'.

      ENDIF.

 

      "Commit damit das Email gesendet wird.

      COMMIT WORK.

 

      "Ausnahmen Behandlung

    CATCH cx_bcs INTO gr_bcs_exception.

      WRITE:

        'Error!',

        'Error type:',

        gr_bcs_exception->error_type.

  ENDTRY.

 

ENDFORM.                    "

        search this website

Regotz Michel