SAP ABAP-通过程序发起调度(背景执行)

有时候,处理某个功能,需要通过异步来执行。相对需要实时,但又不需要很实时,那可以考虑背景执行。以下是曾经某个项目上的真实案例。

REPORT ZPP_XXX_01.

DATA:C_VARIANT      LIKE RALDB-VARIANT VALUE 'ZPP_XXX_TASK',
     C_REPID        LIKE SY-REPID  VALUE 'ZPP_XXX',
     C_UNAME        LIKE SY-UNAME VALUE 'igor_admin'.

DATA:I_VALUTAB      LIKE RSPARAMS OCCURS 0 WITH HEADER LINE ,
     I_OBJECTS      LIKE VANZ     OCCURS 0 WITH HEADER LINE,
     W_VARID_DESC   LIKE VARID,
     W_JOB          LIKE TBTCJOB.

FORM CALL_BACK_MO_JOB TABLES TX_AUFNR STRUCTURE RNG_AUFNR.
IF TX_AUFNR[] IS NOT INITIAL.
  CALL FUNCTION 'RS_VARIANT_CONTENTS'
    EXPORTING
      REPORT               = C_REPID
      VARIANT              = C_VARIANT
    TABLES
      VALUTAB              = I_VALUTAB
      OBJECTS              = I_OBJECTS
    EXCEPTIONS
      VARIANT_NON_EXISTENT = 01
      VARIANT_OBSOLETE     = 02
      OTHERS               = 03.

  CLEAR I_VALUTAB[].

  LOOP AT TX_AUFNR.
    CLEAR  I_VALUTAB.
    I_VALUTAB-SELNAME = 'S_AUFNR'.
    I_VALUTAB-KIND   = 'S'        .
    I_VALUTAB-SIGN  =  TX_AUFNR-SIGN.
    I_VALUTAB-OPTION = TX_AUFNR-OPTION.
    I_VALUTAB-LOW    = TX_AUFNR-LOW.
    I_VALUTAB-HIGH   = TX_AUFNR-HIGH.
    APPEND I_VALUTAB.
  ENDLOOP.

  CLEAR  I_VALUTAB.
  I_VALUTAB-SELNAME = 'S_ERDAT'.
  I_VALUTAB-KIND   = 'S'        .
  I_VALUTAB-SIGN  =  'I'.
  I_VALUTAB-OPTION = 'EQ'.
  I_VALUTAB-LOW    = SY-DATUM.
  I_VALUTAB-HIGH   = ''.
  APPEND I_VALUTAB.

  CLEAR  I_VALUTAB.
  I_VALUTAB-SELNAME = 'R_JS'.
  I_VALUTAB-KIND   = 'P'        .
  I_VALUTAB-SIGN  =  ''.
  I_VALUTAB-OPTION = ''.
  I_VALUTAB-LOW    = 'X'.
  I_VALUTAB-HIGH   = ''.
  APPEND I_VALUTAB.

  W_VARID_DESC-MANDT = SY-MANDT.
  W_VARID_DESC-REPORT = C_REPID.
  W_VARID_DESC-VARIANT = C_VARIANT.

  CALL FUNCTION 'RS_CHANGE_CREATED_VARIANT'
    EXPORTING
      CURR_REPORT               = C_REPID
      CURR_VARIANT              = C_VARIANT
      VARI_DESC                 = W_VARID_DESC
    TABLES
      VARI_CONTENTS             = I_VALUTAB
      OBJECTS                   = I_OBJECTS
    EXCEPTIONS
      ILLEGAL_REPORT_OR_VARIANT = 01
      ILLEGAL_VARIANTNAME       = 02
      NOT_AUTHORIZED            = 03
      NOT_EXECUTED              = 04
      REPORT_NOT_EXISTENT       = 05
      REPORT_NOT_SUPPLIED       = 06
      VARIANT_DOESNT_EXIST      = 07
      VARIANT_LOCKED            = 08
      SELECTIONS_NO_MATCH       = 09
      others                    = 10.

  WAIT UP TO 1 SECONDS.

  W_JOB-JOBNAME                         = C_VARIANT.
*--------------------------------------------------------------
  "定义后台作业
*--------------------------------------------------------------
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      JOBNAME          = W_JOB-JOBNAME
      JOBCLASS         = 'B'
      SDLSTRTDT        = SY-DATUM
      SDLSTRTTM        = SY-UZEIT
    IMPORTING
      JOBCOUNT         = W_JOB-JOBCOUNT
    EXCEPTIONS
      CANT_CREATE_JOB  = 01
      INVALID_JOB_DATA = 02
      JOBNAME_MISSING  = 03.
*--------------------------------------------------------------
  "提交后台作业
*--------------------------------------------------------------
  IF SY-SUBRC EQ 0.
    CALL FUNCTION 'JOB_SUBMIT'
      EXPORTING
        AUTHCKNAM               = C_UNAME
        JOBCOUNT                = W_JOB-JOBCOUNT
        JOBNAME                 = W_JOB-JOBNAME
        REPORT                  = C_REPID
        VARIANT                 = C_VARIANT
      EXCEPTIONS
        BAD_PRIPARAMS           = 01
        BAD_XPGFLAGS            = 02
        INVALID_JOBDATA         = 03
        JOBNAME_MISSING         = 04
        JOB_NOTEX               = 05
        JOB_SUBMIT_FAILED       = 06
        LOCK_FAILED             = 07
        PROGRAM_MISSING         = 08
        PROG_ABAP_AND_EXTPG_SET = 09
        OTHERS                  = 10.
  ENDIF.
*--------------------------------------------------------------
  "释放后台作业,立即执行
*--------------------------------------------------------------
  IF SY-SUBRC EQ 0.
    CALL FUNCTION 'JOB_CLOSE'
      EXPORTING
        JOBCOUNT             = W_JOB-JOBCOUNT
        JOBNAME              = W_JOB-JOBNAME
        STRTIMMED            = 'X'
      EXCEPTIONS
        CANT_START_IMMEDIATE = 01
        INVALID_STARTDATE    = 02
        JOBNAME_MISSING      = 03
        JOB_CLOSE_FAILED     = 04
        JOB_NOSTEPS          = 05
        JOB_NOTEX            = 06
        LOCK_FAILED          = 07
        INVALID_TARGET       = 08.
  ENDIF.
ENDIF.
ENDFORM.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IGOR-MA

您的鼓励将激励我更大的动力前行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值