IT干货网

ABAP-Background Job

itxm 2022年03月09日 SAP 165 0

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名称进行校验,如果对当前执行程序进程进行校验,可参考IT虾米网

  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 :


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

ABAP-SUSR_ZBV_CHECK_IF_ACTIVE Exception