There are cases, when you need to plan reports programatically to run in background in ABAP – providing some selection parameters – such as cleanup reports, generations, data retrieval and storage from external resources and so on. You can react on your application specific events, and plan a job to be processed by a batch work process. If your report is designed to run in background only, you can evaluate the content of system field sy-batch (structure syst).

DATA:
  lv_jobcount     TYPE btcjobcnt,
  lv_jobcnumc     TYPE crmcount,
  lt_jobcount     TYPE STANDARD TABLE OF btcjobcnt,
  lv_dummy        TYPE string.                            "#EC NEEDED

SELECT jobcount FROM tbtco INTO TABLE lt_jobcount
  WHERE jobname = gc_jobname.

IF lt_jobcount IS NOT INITIAL.
  SORT lt_jobcount DESCENDING BY table_line.
  READ TABLE lt_jobcount INTO lv_jobcount INDEX 1.
  lv_jobcnumc = lv_jobcount.
ENDIF.
ADD 1 TO lv_jobcnumc.
lv_jobcount = lv_jobcnumc.

* Setup Job
CALL FUNCTION 'JOB_OPEN'
  EXPORTING
    jobname          = gc_jobname
  IMPORTING
    jobcount         = lv_jobcount
  EXCEPTIONS
    cant_create_job  = 1
    invalid_job_data = 2
    jobname_missing  = 3
    OTHERS           = 4.

IF sy-subrc NE 0.
  "handle / propagate exception
  RETURN.
ENDIF.

SUBMIT cleanup_saacont "<-name of the report
  VIA JOB gc_jobname
  NUMBER lv_jobcount AND RETURN
  WITH testrun EQ abap_true. "<-selection screen parameter

"Release Job
CALL FUNCTION 'JOB_CLOSE'
  EXPORTING
    jobcount             = lv_jobcount
    jobname              = gc_jobname
    strtimmed            = 'X'
  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.

IF sy-subrc NE 0.
  "handle / propagate exception
  RETURN.
ENDIF.

Share this content: