Plan Report / Job in background programmatically

Tags: ABAP

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.