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
相關文章
相關標籤/搜索