ABAP-Background Job

ABAP后台作业设置过程:

1.变式校验

2.当前作业是否正在运行(加锁及防重)

3.后台作业提交

1.变式校验:

  SELECT SINGLE @abap_true
         FROM varid
         WHERE report = @lv_report
         AND   variant = @lv_vart
         INTO @DATA(lv_exists).

2.是否正在运行:

    SELECT SINGLE @abap_true
           FROM tbtco
           WHERE jobname = @lv_jobname
           AND status IN (@/isdfps/cl_const_abc_123=>gc_s,
                          @/isdfps/cl_const_abc_123=>gc_r,
                          @/isdfps/cl_const_abc_123=>gc_y)
           INTO @DATA(lv_true).

 上面只针对jobname名称进行校验,如果对当前执行程序进程进行校验,可参考https://www.cnblogs.com/ricoo/p/13846072.html

  call 'ThWpInfo' id 'OPCODE' field lc_opcode_wp_list
                  id 'TAB'    field lt_wpinfo-*sys*
                  id 'CPU'    field lv_with_cpu.

3.作业提交:

 作业提交过程中需注意并发及防重执行,尽量通过作业变式分开提交,相同作业名避免记录前后执行重复。

    CONCATENATE lv_report '_'lv_vart INTO lv_jobname.

    CALL FUNCTION 'ZFG0030_CRTJOB' EXPORTING jobname    = lv_jobname rept = lv_report jbnamclas    = /isdfps/cl_const_abc_123=>gc_b vart = lv_vart lang = '1' stdat = l_stdat sttim = l_sttim dirst = abap_true IMPORTING jbname  = l_jobname jbcount = l_jobcount.
FUNCTION ZFG0030_CRTJOB.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(JOBNAME) LIKE  TBTCJOB-JOBNAME
*"     VALUE(JBNAMCLAS) LIKE  TBTCJOB-JOBCLASS OPTIONAL
*"     VALUE(REPT) LIKE  SY-REPID
*"     VALUE(VART) LIKE  RALDB-VARIANT OPTIONAL
*"     VALUE(LANG) LIKE  SY-LANGU OPTIONAL
*"     VALUE(IMED) LIKE  BTCH0000-CHAR1 OPTIONAL
*"     VALUE(EVEID) LIKE  TBTCJOB-EVENTID OPTIONAL
*"     VALUE(EVEPA) LIKE  TBTCJOB-EVENTPARM OPTIONAL
*"     VALUE(EVEPER) LIKE  BTCH0000-CHAR1 OPTIONAL
*"     VALUE(PREST) LIKE  TBTCSTRT-CHECKSTAT OPTIONAL
*"     VALUE(PREJB) LIKE  TBTCJOB-JOBCOUNT OPTIONAL
*"     VALUE(PRJBN) LIKE  TBTCJOB-JOBNAME OPTIONAL
*"     VALUE(STDAT) LIKE  SY-DATUM OPTIONAL
*"     VALUE(STTIM) LIKE  SY-UZEIT OPTIONAL
*"     VALUE(TARSER) LIKE  BTCTGTSRVR-SRVNAME OPTIONAL
*"     VALUE(DIRST) LIKE  BTCH0000-CHAR1 OPTIONAL
*"  EXPORTING
*"     REFERENCE(JBNAME) LIKE  TBTCJOB-JOBNAME
*"     REFERENCE(JBCOUNT) LIKE  TBTCJOB-JOBCOUNT
*"     REFERENCE(ABORTED) LIKE  TBTCV-ABORT
*"     REFERENCE(FINISHED) LIKE  TBTCV-FIN
*"     REFERENCE(PRELIMINARY) LIKE  TBTCV-PRELIM
*"     REFERENCE(READY) LIKE  TBTCV-READY
*"     REFERENCE(RUNNING) LIKE  TBTCV-RUN
*"     REFERENCE(SCHEDULED) LIKE  TBTCV-SCHED
*"  EXCEPTIONS
*"      11CANT_CREATE_JOB
*"      12INVALID_JOB_DATA
*"      13JOBNAME_MISSING
*"      GENERAL_FAULT
*"      21BAD_PRIPARAMS
*"      22IBAD_XPGFLAGS
*"      23INVALID_JOBDATA
*"      24JOBNAME_MISSING
*"      25JOB_NOTEX
*"      26JOB_SUBMIT_FAILED
*"      27LOCK_FAILED
*"      28PROGRAM_MISSING
*"      29PROG_ABAP_AND_EXTPG_SET
*"      31CANT_START_IMMEDIATE
*"      32INVALID_STARTDATE
*"      33JOBNAME_MISSING
*"      34JOB_CLOSE_FAILED
*"      35JOB_NOSTEPS
*"      36JOB_NOTEX
*"      37LOCK_FAILED
*"      38INVALID_TARGET
*"----------------------------------------------------------------------

 DATA: JOBCOUNT LIKE TBTCJOB-JOBCOUNT.
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
*     DELANFREP        = ' '
*     JOBGROUP         = ' '
      JOBNAME          = JOBNAME
      JOBCLASS         = JBNAMCLAS
    IMPORTING
      JOBCOUNT         = JOBCOUNT
    EXCEPTIONS
      CANT_CREATE_JOB  = 1
      INVALID_JOB_DATA = 2
      JOBNAME_MISSING  = 3
      OTHERS           = 4.

  IF SY-SUBRC <> 0.
    CASE SY-SUBRC.
      WHEN 1.
        MESSAGE  'CANT_CREATE_JOB' TYPE 'E'                 "#EC NOTEXT
                        RAISING 11CANT_CREATE_JOB.
      WHEN 2.
        MESSAGE 'INVALID_JOB_DATA' TYPE 'E'
         RAISING 12INVALID_JOB_DATA.
      WHEN 3.
        MESSAGE 'JOBNAME_MISSING' TYPE 'E'
        RAISING 13JOBNAME_MISSING.
      WHEN 4.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
              RAISING GENERAL_FAULT.
    ENDCASE.

  ELSE.
    JBNAME = JOBNAME.
    JBCOUNT = JOBCOUNT.
    CALL FUNCTION 'JOB_SUBMIT'
      EXPORTING
        AUTHCKNAM               = SY-UNAME
        JOBCOUNT                = JOBCOUNT
        JOBNAME                 = JOBNAME
        LANGUAGE                = SY-LANGU
        REPORT                  = REPT
        VARIANT                 = VART
      EXCEPTIONS
        BAD_PRIPARAMS           = 1
        BAD_XPGFLAGS            = 2
        INVALID_JOBDATA         = 3
        JOBNAME_MISSING         = 4
        JOB_NOTEX               = 5
        JOB_SUBMIT_FAILED       = 6
        LOCK_FAILED             = 7
        PROGRAM_MISSING         = 8
        PROG_ABAP_AND_EXTPG_SET = 9
        OTHERS                  = 10.

    IF SY-SUBRC <> 0.

      CASE SY-SUBRC.
        WHEN 1.
          MESSAGE  'BAD_PRIPARAMS' TYPE 'E'                 "#EC NOTEXT
                          RAISING 21BAD_PRIPARAMS.
        WHEN 2.
          MESSAGE 'IBAD_XPGFLAGS' TYPE 'E'
           RAISING 22IBAD_XPGFLAGS.
        WHEN 3.
          MESSAGE 'INVALID_JOBDATA' TYPE 'E'
          RAISING 23INVALID_JOBDATA.
        WHEN 4.
          MESSAGE 'JOBNAME_MISSING' TYPE 'E'
          RAISING 24JOBNAME_MISSING.
        WHEN 5.
          MESSAGE 'JOB_NOTEX' TYPE 'E'
          RAISING 25JOB_NOTEX.
        WHEN 6.
          MESSAGE 'JOB_SUBMIT_FAILED' TYPE 'E'
         RAISING 26JOB_SUBMIT_FAILED.
        WHEN 7.
          MESSAGE 'LOCK_FAILED' TYPE 'E'
          RAISING 27LOCK_FAILED.
        WHEN 8.
          MESSAGE 'PROGRAM_MISSING ' TYPE 'E'
          RAISING 28PROGRAM_MISSING.
        WHEN 9.
          MESSAGE 'PROG_ABAP_AND_EXTPG_SET' TYPE 'E'
          RAISING 29PROG_ABAP_AND_EXTPG_SET.
        WHEN 10.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
                 RAISING GENERAL_FAULT.
      ENDCASE.

    ELSE.
      DATA:V_TIM TYPE SY-UZEIT.
      V_TIM = STTIM + 10.

*if  PREJB ne space and prjbn ne space.
*     PERFORM build_predjob_event_name USING
*                                     PREJB
*                                     prjbn
*                                     job_head-eventid
*                                     job_head-eventparm
*                                     job_head-eventcount
*                                     rc.
*endif.

      CALL FUNCTION 'JOB_CLOSE'
        EXPORTING
          EVENT_ID             = EVEID
          EVENT_PARAM          = EVEPA
          EVENT_PERIODIC       = EVEPER
          JOBCOUNT             = JOBCOUNT
          JOBNAME              = JOBNAME
          PREDJOB_CHECKSTAT    = PREST
          PRED_JOBCOUNT        = PREJB
          PRED_JOBNAME         = PRJBN
          SDLSTRTDT            = STDAT
          SDLSTRTTM            = V_TIM
          TARGETSERVER         = TARSER
          STRTIMMED            = IMED
*         TARGETGROUP          = ' '
          DIRECT_START         = DIRST
        EXCEPTIONS
          CANT_START_IMMEDIATE = 1
          INVALID_STARTDATE    = 2
          JOBNAME_MISSING      = 3
          JOB_CLOSE_FAILED     = 4
          JOB_NOSTEPS          = 5
          JOB_NOTEX            = 6
          LOCK_FAILED          = 7
          INVALID_TARGET       = 8
          OTHERS               = 9.
      IF SY-SUBRC <> 0.

        CASE SY-SUBRC.
          WHEN 1.
            MESSAGE  'cant_start_immediate ' TYPE 'E'       "#EC NOTEXT
             RAISING 31CANT_START_IMMEDIATE .
          WHEN 2.
            MESSAGE 'invalid_startdate' TYPE 'E'
             RAISING 32INVALID_STARTDATE.
          WHEN 3.
            MESSAGE 'jobname_missing' TYPE 'E'
            RAISING 33JOBNAME_MISSING.
          WHEN 4.
            MESSAGE 'job_close_failed ' TYPE 'E'
            RAISING 34JOB_CLOSE_FAILED .
          WHEN 5.
            MESSAGE 'job_nosteps' TYPE 'E'
            RAISING 35JOB_NOSTEPS.
          WHEN 6.
            MESSAGE 'job_notex ' TYPE 'E'
           RAISING 36JOB_NOTEX .
          WHEN 7.
            MESSAGE 'LOCK_FAILED' TYPE 'E'
            RAISING 37LOCK_FAILED.
          WHEN 8.
            MESSAGE 'invalid_target ' TYPE 'E'
            RAISING 38INVALID_TARGET.
          WHEN OTHERS.
            MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                   WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
                   RAISING GENERAL_FAULT.
        ENDCASE.

      ENDIF.

    ENDIF.

  ENDIF.


ENDFUNCTION.
View Code

4.后台作业调试JDBG :

原文地址:https://www.cnblogs.com/ricoo/p/13845009.html