Additional Blog Posts by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
1,214

Follow these easy steps to get status of (long running) background job(s) on your iPhone (inbox).

Steps

  1. Create ABAP Program to Send out Job Status via email
  2. Create & schedule a periodic process chain
  3. Change process chain variant to point to a background job

Step 1.

Copy paste the code to create an ABAP program in SE38.

Code

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

*& Report  Z_BW_JOB_MONITOR_V2

*&

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

*&

*&

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

*& ABAP Name   : Z_BW_PROCESS_CHECK                                   &*

*& Changed By  : Rahul R Nair                                         &*

*& Created On  : 08/10/2011                                           &*

*& Version     : 1.0                                                  &*

*& Description : This program can be used to monitor jobs displayed   &*

*&               in sm 37. Program variants can be set up to send     &*

*&               email notification when a job fails/completes.       &*

*&               It can also be used to send notication independt of  &*

*&               current status of job.                               &*

*&                                                                    &*

*&               Steps :                                              &*

*&               1.Enter job name(s) ; job id(s) along with the email&*

*&                 addresses and save it as a program variant.        &*

*&               2.Create a process chain containing program and      &*

*&                 the variant.                                       &*

*&               3.Make PC to run every 15 mins with start type as    &*

*&                 'Direct scheduling' with a priodic value (15 min)  &*

*&               4.Excute the PC. PC will execute every 15 min and    &*

*&                 send mail when job completes/errors                &*

*&                                                                    &*

*&               NOTE :                                               &*

*&               To stop scheduling, change start variant to          &*

*&               immediate and uncheck periodic checkbox. Save and    &*

*&               reactivte PC. Execute once to stop cyclic trigger.   &*

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

REPORT  Z_BW_JOB_MONITOR_V2.

*$***********************************************************************

*$*$  TABLES

*$*$*********************************************************************

TABLES :

   TBTCO.

*$***********************************************************************

*$*$  DATA DECLARATION

*$*$*********************************************************************

DATA :

   JOB_CNT(50) TYPE    C,

   EMAIL(100TYPE    C.

DATA :

   IT_TBTCO    TYPE STANDARD TABLE OF  TBTCO,

   WA_TBTCO    TYPE                    TBTCO,

   IT_JOBSTAT  TYPE STANDARD TABLE OF  TBTCO,

   WA_JOBSTAT  TYPE                    TBTCO.

TYPES :

   BEGIN OF TY_JOB_CNT,

     JOBNAME   TYPE TBTCO-JOBNAME,

     JOBCOUNT  TYPE TBTCO-JOBCOUNT,

   END   OF TY_JOB_CNT.

DATA :

   IT_JOB_CNT  TYPE STANDARD TABLE OF  TY_JOB_CNT,

   WA_JOB_CNT  TYPE                    TY_JOB_CNT.

DATA :

   LV_JOBNAME  TYPE C LENGTH 50,

   LV_JOBCOUNT TYPE C LENGTH 50,

   LV_ERR_MSG  TYPE STRING,

   LV_JOBSTAT  TYPE STRING.

DATA :

   WA_DATA     type                    sodocchgi1,

   IT_TXT      type table of           solisti1    with header line,

   IT_REC      type table of           somlrec90   with header line.

*$***********************************************************************

*$*$  SELECTION SCREENS

*$*$*********************************************************************

SELECTION-SCREEN BEGIN OF BLOCK SB1 WITH FRAME TITLE TEXT-T01.

SELECT-OPTIONS :

   SO_JOB1     FOR     (JOB_CNT) NO INTERVALS.

SELECTION-SCREEN END   OF BLOCK SB1.

SELECTION-SCREEN BEGIN OF BLOCK SB2 WITH FRAME TITLE TEXT-T02.

   SELECTION-SCREEN COMMENT /1(50) TEXT-T03.

   SELECTION-SCREEN COMMENT /1(50) TEXT-T04.

   SELECTION-SCREEN COMMENT /1(70) TEXT-T05.

SELECTION-SCREEN END   OF BLOCK SB2.

SELECTION-SCREEN BEGIN OF BLOCK SB3 WITH FRAME TITLE TEXT-T31.

SELECT-OPTIONS :

   SO_MAIL     FOR     (EMAIL) NO INTERVALS.

PARAMETERS  :

   CH_STAT     TYPE    C DEFAULT 'X' AS CHECKBOX.

SELECTION-SCREEN END   OF BLOCK SB3.

*$***********************************************************************

*$*$  SELECTION SCREEN HOW TO

*$*$*********************************************************************

SELECTION-SCREEN : BEGIN OF BLOCK SB4 WITH FRAME TITLE TEXT-T40.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T41.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T42.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T43.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T44.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T45.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T46.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T47.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T48.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T49.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T50.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T51.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T52.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T53.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T54.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T55.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T56.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T57.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T58.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T59.

   SELECTION-SCREEN COMMENT /1(79) TEXT-T60.

SELECTION-SCREEN END OF BLOCK SB4 .

*$***********************************************************************

*$*$  DATA PROCESSING

*$*$*********************************************************************

LOOP AT SO_JOB1.

   CONDENSE SO_JOB1-LOW.

   CLEAR :

     WA_JOB_CNT,

     LV_JOBNAME,

     LV_JOBCOUNT.

   SPLIT SO_JOB1-LOW

     AT ';'

     INTO  LV_JOBNAME

           LV_JOBCOUNT.

   CONDENSE :

     LV_JOBNAME,

     LV_JOBCOUNT.

   WA_JOB_CNT-JOBNAME  = LV_JOBNAME.

   WA_JOB_CNT-JOBCOUNT = LV_JOBCOUNT.

   APPEND WA_JOB_CNT

     TO   IT_JOB_CNT.

ENDLOOP.

IF IT_JOB_CNT[] IS NOT INITIAL.

   SELECT *

     FROM TBTCO

     INTO TABLE IT_TBTCO

     FOR ALL ENTRIES IN IT_JOB_CNT

     WHERE JOBNAME   EQ IT_JOB_CNT-JOBNAME

      AND  JOBCOUNT  EQ IT_JOB_CNT-JOBCOUNT.

   SORT IT_TBTCO

     BY  JOBNAME   ASCENDING

         JOBCOUNT  ASCENDING.

   DELETE ADJACENT DUPLICATES

     FROM IT_TBTCO

     COMPARING JOBNAME

               JOBCOUNT.

ENDIF.

LOOP AT IT_TBTCO INTO WA_TBTCO.

   IF CH_STAT EQ 'X'.

     "Send Mails only When

     "1. Job is cancelled

     "2. Job is finished

     IF WA_TBTCO-STATUS EQ 'A' "Cancelled

       OR WA_TBTCO-STATUS EQ 'F'. "Finished

       "'R' - Active

       APPEND WA_TBTCO TO IT_JOBSTAT.

     ENDIF.

   ELSE.

     "Send Status email independent of Job Status

     APPEND WA_TBTCO TO IT_JOBSTAT.

   ENDIF.

ENDLOOP.

IF IT_JOBSTAT[] IS NOT INITIAL

   AND SO_MAIL IS NOT INITIAL.

   "Send email

   WA_DATA-obj_name  = 'Job Monitor Log'.

   WA_DATA-obj_descr = 'Job Monitor Log'.

   WA_DATA-obj_langu = sy-langu.

   "Body of email based on job Status

   LOOP AT IT_JOBSTAT INTO WA_JOBSTAT.

     CLEAR LV_JOBSTAT.

     IF WA_JOBSTAT-STATUS EQ 'A'.

       LV_JOBSTAT = 'JOB CANCELLED : '.

     ELSEIF WA_JOBSTAT-STATUS EQ 'F'.

       LV_JOBSTAT = 'JOB FINISHED : '.

     ELSEIF WA_JOBSTAT-STATUS EQ 'R'.

       LV_JOBSTAT = 'JOB ACTIVE : '.

     ELSE.

       LV_JOBSTAT = 'JOB STATUS UNKNOWN : '.

     ENDIF.

     CLEAR LV_ERR_MSG.

     CONCATENATE LV_JOBSTAT

                 'Job name :  '

                 WA_JOBSTAT-JOBNAME

                 '- Job id : '

                 WA_JOBSTAT-JOBCOUNT

                 '- Status : '

                 WA_JOBSTAT-STATUS

            INTO LV_ERR_MSG.

     WRITE : / LV_ERR_MSG.

     MESSAGE LV_ERR_MSG TYPE 'S'. "S Status Message, E Error Message

     IT_TXT-line = LV_ERR_MSG.

     append IT_TXT.

   ENDLOOP.

   "Email recepients

   LOOP AT SO_MAIL.

     IT_REC-receiver = SO_MAIL-LOW.

     IT_REC-rec_type = 'U'.

     append IT_REC.

     CLEAR LV_ERR_MSG.

     CONCATENATE 'Sending mail to : '

                 IT_REC-receiver

            INTO LV_ERR_MSG.

     WRITE : / LV_ERR_MSG.

     MESSAGE LV_ERR_MSG TYPE 'S'. "S Status Message, E Error Message

   ENDLOOP.

   call function 'SO_NEW_DOCUMENT_SEND_API1'

     exporting

       document_data   = WA_DATA

       document_type   = 'RAW'

       put_in_outbox   = 'X'

     tables

       object_header   = IT_TXT

       object_content  = IT_TXT

       receivers       = IT_REC

     exceptions

       too_many_receivers          = 1

       document_not_sent           = 2

       document_type_not_exist     = 3

       operation_no_authorization  = 4

       parameter_error             = 5

       x_error                     = 6

       enqueue_error               = 7

       others                      = 8

       .

   if sy-subrc = 0.

     COMMIT WORK.

*   Push mail out from SAP outbox

     SUBMIT RSCONN01 WITH MODE = 'INT' AND RETURN.

     CLEAR LV_ERR_MSG.

     CONCATENATE 'Emails Sent '

                 ' '

            INTO LV_ERR_MSG.

     WRITE : / LV_ERR_MSG.

     MESSAGE LV_ERR_MSG TYPE 'S'. "S Status Message, E Error Message

   else.

     CLEAR LV_ERR_MSG.

     CONCATENATE 'Error Sending mails.'

                 ' '

            INTO LV_ERR_MSG.

     WRITE : / LV_ERR_MSG.

     MESSAGE LV_ERR_MSG TYPE 'S'. "S Status Message, E Error Message

   endif.

ENDIF.

Text Elements

Selection Text:

NameText
CH_STATMail only when Job Finish/Err
SO_JOB1Job name & id :
SO_MAILEmail IDs

Text Symbols:

T01Job
T02Help
T03Enter Job name and Job id seperated by ';'.
T04e.g. BIDTPR_3010457_1 ; 15472500
T05Job name & id can be found at the top of Job Log in SM37.
T31Email Options
T40How to
T41This program can be used to monitor jobs displayed
T42in sm 37. Program variants can be set up to send
T43email notification when a job fails/completes.
T44It can also be used to send notication independt of
T45current status of job.
T46
T47Steps :
T481.Enter job name(s) ; job id(s) along with the email
T49  addresses and save it as a program variant.
T502.Create a process chain containing program and
T51  the variant.
T523.Make PC to run every 15 mins with start type as
T53  'Direct scheduling' with a priodic value (15 min)
T544.Excute the PC. PC will execute every 15 min and
T55  send mail when job completes/errors
T56
T57NOTE :
T58To stop scheduling, change start variant to
T59immediate and uncheck periodic checkbox. Save and
T60reactivte PC. Execute once to stop cyclic trigger.

User Interface:

Step 2

a. Create a process chain

b. Schedule the process chain

Step 3

Get details of background job(s) to be monitored.

Option A

Start sending job status when job is complete/cancelled.

Select Job

Get details

Update details in PC

Email notification on your iPhone

Job details

Option B

Send current job status.

Select Job & get details

Update details in PC

Email notification on your iPhone

Status emails every 15 mins.

Job details

Change in job status

Assumptions:

  1. The developer has intermediate level knowledge of BW process chains & ABAP programming.
  2. The SAP server is connected to the company's SMTP (email) server.
  3. The iphone is configured to the company's email server.

Help

Reach out to a BW developer for any process chain related queries, ABAP developer for program queries, Basis for SMTP queries, Company's infrastructure team for connectivity with iphone.

Note:

The idea behind making the title "catchy" was to get a developer's attention and prove how effective this simple tool can be.

Acknowledgement

This program is dedicated to Ramji, Ravi, Anuj, Tilak, Karthik, Ram, Prakash, Priya, Twinkle, Greg, Justin, Donna and all my wonderful team mates.

2 Comments