ABAP程序带参调用后台作业


主要内容

带参调用后台作业


代码示例

  DATA:lv_job_name  TYPE btcjob,
       lv_joblike   TYPE btcjob,
       lv_name      TYPE progname,
       lv_subrc     TYPE i,
       lr_agr_rspar TYPE TABLE OF rsparams,
       ls_agr_line  LIKE LINE OF  lr_agr_rspar,
       w_jobid      TYPE tbtcjob-jobcount,
       w_stepnm     TYPE tbtcjob-stepcount.

* 查表  如果已存在执行中的后台 则报错退出

  lv_joblike = 'ZBJOB_TEST'.

  SELECT SINGLE jobname
    INTO lv_job_name
    FROM tbtco
    WHERE jobname EQ lv_joblike
*    AND ( status = 'R'  "Active
*    OR status = 'Z' ). "Released/Susp
    AND status EQ 'R'.

  IF sy-subrc NE 0.

    lv_job_name = 'ZBJOB_TEST'.

  ELSE.

    MESSAGE w147(zps) WITH '已存在活动后台作业' RAISING foreign_lockbg.
    RETURN.

  ENDIF.

* 唤起后台    有则报错退出
*1. using JOB_OPEN to open job
  CLEAR:w_jobid.
  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
*     DELANFREP        = ’ ’
*     JOBGROUP         = ’ ’
      jobname          = lv_job_name
*     SDLSTRTDT        = NO_DATE
*     SDLSTRTTM        = NO_TIME
*     JOBCLASS         =
    IMPORTING
      jobcount         = w_jobid
*   CHANGING
*     RET              =
    EXCEPTIONS
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      OTHERS           = 4.
  IF sy-subrc EQ 0.


  ls_agr_line-kind = 'S'.
  ls_agr_line-sign = 'I'.
  ls_agr_line-option = 'EQ'.

  IF it_agr_name IS NOT INITIAL.

    ls_agr_line-selname = 'S_AGR'.

*	S参数

    LOOP AT it_agr_name INTO ls_agr_name.

*    ls_agr-low = ls_agr_name-agr_name.
*    APPEND ls_agr TO lr_agr.

*    lv_agr_name = ls_agr_name-agr_name.

      ls_agr_line-low = ls_agr_name-agr_name.
      APPEND ls_agr_line TO lr_agr_rspar.

    ENDLOOP.

  ENDIF.

  IF it_agr_uname IS NOT INITIAL.

    ls_agr_line-selname = 'S_UNAME'.
*	单值
    LOOP AT it_agr_uname INTO ls_agr_uname.
      ls_agr_line-low = ls_agr_uname-uname.
      APPEND ls_agr_line TO lr_agr_rspar.
    ENDLOOP.

  ENDIF.

  ls_agr_line-selname = 'P_CHK'.
  ls_agr_line-kind = 'P'.   
  * 单选按钮类型
  ls_agr_line-sign = 'I'.
  ls_agr_line-option = 'EQ'.
  ls_agr_line-low = abap_true.
  APPEND ls_agr_line TO lr_agr_rspar.


*2. using JOB_SUMMIT to insert step
    SUBMIT ztest_bjob_01 WITH SELECTION-TABLE lr_agr_rspar
    VIA JOB lv_job_name
    NUMBER  w_jobid
    AND RETURN.

    CALL FUNCTION 'JOB_CLOSE'
      EXPORTING
*       AT_OPMODE            = ’ ’
*       AT_OPMODE_PERIODIC   = ’ ’
*       CALENDAR_ID          = ’ ’
*       EVENT_ID             = ’ ’
*       EVENT_PARAM          = ’ ’
*       EVENT_PERIODIC       = ’ ’
        jobcount             = w_jobid
        jobname              = lv_job_name
*       LASTSTRTDT           = NO_DATE
*       LASTSTRTTM           = NO_TIME
*       PRDDAYS              = 0
*       PRDHOURS             = 0
*       PRDMINS              = 0
*       PRDMONTHS            = 0
*       PRDWEEKS             = 0
*       PREDJOB_CHECKSTAT    = ’ ’
*       PRED_JOBCOUNT        = ’ ’
*       PRED_JOBNAME         = ’ ’
*       SDLSTRTDT            = NO_DATE
*       SDLSTRTTM            = NO_TIME
*       STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
        strtimmed            = 'X'
*       TARGETSYSTEM         = ’ ’
*       START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
*       START_ON_WORKDAY_NR  = 0
*       WORKDAY_COUNT_DIRECTION           = 0
*       RECIPIENT_OBJ        =
*       TARGETSERVER         = ’ ’
*       DONT_RELEASE         = ’ ’
*       TARGETGROUP          = ’ ’
        direct_start         = 'X'
*   IMPORTING
*       JOB_WAS_RELEASED     =
*   CHANGING
*       RET                  =
      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 EQ 0.

      WHILE lv_subrc EQ 0.   "当作业成功启动后才退出
      
        SELECT SINGLE jobname
          INTO lv_job_name
          FROM tbtco
          WHERE jobname EQ lv_joblike
          AND status EQ 'R'.
        IF sy-subrc EQ 0.
          lv_subrc = 2.
        ELSE.
          WAIT UP TO 1 SECONDS.
        ENDIF.

      ENDWHILE.
    ENDIF.
  ELSE.

    MESSAGE e147(zps) WITH '后台作业关闭失败' RAISING bg_job_fail.

  ENDIF.

注意事项

区分各个参数之间的类型(KIND)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ggreekn

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值