SAP ABAP布置后台做业-sm36 sm37

(一)经过ABAP程序,布置后台Job通常步骤:ide

  1. 打开做业队列(JOB_OPEN)
  2. 调用(SUBMIT)想在此做业进程中,执行的程序
  3. 关闭做业进程(JOB_CLOSE)

   注意点:函数

  • 函数JOB_OPEN,须要传入Job名字(JOBNAME),函数返回Job编号(JOBCOUNT)
  • 调用(SUBMIT)程序时,经过(VIA JOB)和(NUMBER)关键字,告诉系统在哪一个Job下执行此程序
  • 关闭Job时,函数JOB_CLOSE需传入Job名字(JOBNAME)和Job编号(JOBCOUNT),告诉系统关闭哪一个Job
DATA:lv_name LIKE tbtcjob-jobname, lv_number TYPE tbtcjob-jobcount. MOVE 'JOB_NAME' TO lv_name. CALL FUNCTION 'JOB_OPEN'
  EXPORTING jobname = lv_name IMPORTING jobcount = lv_number EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3. IF sy-subrc EQ 0. SUBMIT z_xxxxxxx_prog WITH p_1 = p_1 WITH p_2 = p_2 USER sy-uname AND RETURN VIA JOB lv_name NUMBER lv_number. IF sy-subrc EQ 0. CALL FUNCTION 'JOB_CLOSE'
        EXPORTING jobcount = lv_number_fr jobname = lv_name strtimmed = 'X'.  "当即开始
  ENDIF. ENDIF.
示例1

(二)布置Job的起始时间spa

  正常,咱们前台SM36布置Job时,是能够控制Job开始时间的。code

  程序里是经过(JOB_CLOSE)的参数来实现的:blog

  • 参数STRTIMMED = 'X',表示当即执行此Job,默认为空
  • 参数SDLSTRTDT和SDLSTRTTM,能够传入Job执行的日期和时间
CALL FUNCTION 'JOB_CLOSE'
    EXPORTING jobcount = lv_number_fr jobname = lv_name SDLSTRTDT = '20180921' SDLSTRTTM = '180000'.
示例2

(三)实现前一个Job执行后,当前Job再执行队列

  有些业务场景,须要在上一个Job执行完毕或执行成功时,才执行下一个Job。前台SM36是可实现的。
进程

  程序里是经过(JOB_CLOSE)的参数和稍稍改变下步骤来实现:class

  1. 打开(JOB_OPEN)做业A
  2. 调用(SUBMIT)想在做业A中执行的程序
  3. 打开(JOB_OPEN)做业B,
  4. 调用(SUBMIT)想在做业B中执行的程序
  5. 关闭做业B(JOB_CLOSE)
  6. 关闭做业A(JOB_CLOSE)

  注意点:后台

  • 步骤3中,做业A与做业B的传入名字(JOBNAME)必定要相同,只是返回的编号(JOBCOUNT)不一样
  • 步骤5中,关闭做业B时,经过参数(PRED_JOBNAME)和(PRED_JOBCOUNT),传入A的做业名和编号,
  •                                         参数(PREDJOB_CHECKSTAT)可设置在A执行成功时,才执行B
  • 步骤6中,做业A并非直接调用(JOB_CLOSE)关闭的,而是中间布置了其余做业B(能够是多个),最后才关闭A

 

DATA:lv_name LIKE tbtcjob-jobname, lv_number_a TYPE tbtcjob-jobcount, lv_number_b TYPE tbtcjob-jobcount MOVE 'JOB_NAME' TO lv_name. * 布置初始JOB
CALL FUNCTION 'JOB_OPEN'
  EXPORTING jobname = lv_name IMPORTING jobcount = lv_number_a EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3. IF sy-subrc EQ 0. SUBMIT z_xxxxxxx_prog WITH p_1 = p_1 WITH p_2 = p_2 USER sy-uname AND RETURN VIA JOB lv_name NUMBER lv_number_a. ENDIF. * 布置后续JOB,并关闭
CALL FUNCTION 'JOB_OPEN'
  EXPORTING jobname = lv_name IMPORTING jobcount = lv_number_b EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3. IF sy-subrc EQ 0. SUBMIT z_xxxxxxx_prog WITH p_1 = p_1 WITH p_2 = p_2 USER sy-uname AND RETURN VIA JOB lv_name NUMBER lv_number_b. IF sy-subrc EQ 0. CALL FUNCTION 'JOB_CLOSE'
        EXPORTING jobcount = lv_number_b jobname = lv_name *     predjob_checkstat = 'X' pred_jobcount = lv_number_a pred_jobname = lv_name. ENDIF. ENDIF. * 关闭初始JOB
CALL FUNCTION 'JOB_CLOSE'
    EXPORTING jobcount = lv_number_a jobname = lv_name strtimmed = 'X'.
View Code
相关文章
相关标签/搜索