(一)經過ABAP程序,佈置後臺Job通常步驟:ide
- 打開做業隊列(JOB_OPEN)
- 調用(SUBMIT)想在此做業進程中,執行的程序
- 關閉做業進程(JOB_CLOSE)
注意點:函數
- 函數JOB_OPEN,須要傳入Job名字(JOBNAME),函數返回Job編號(JOBCOUNT)
- 調用(SUBMIT)程序時,經過(VIA JOB)和(NUMBER)關鍵字,告訴系統在哪一個Job下執行此程序
- 關閉Job時,函數JOB_CLOSE需傳入Job名字(JOBNAME)和Job編號(JOBCOUNT),告訴系統關閉哪一個Job
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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.
(二)佈置Job的起始時間spa
正常,咱們前臺SM36佈置Job時,是能夠控制Job開始時間的。code
程序裏是經過(JOB_CLOSE)的參數來實現的:blog
- 參數STRTIMMED = 'X',表示當即執行此Job,默認爲空
- 參數SDLSTRTDT和SDLSTRTTM,能夠傳入Job執行的日期和時間
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
CALL FUNCTION 'JOB_CLOSE' EXPORTING jobcount = lv_number_fr jobname = lv_name SDLSTRTDT = '20180921' SDLSTRTTM = '180000'.
(三)實現前一個Job執行後,當前Job再執行隊列
有些業務場景,須要在上一個Job執行完畢或執行成功時,才執行下一個Job。前臺SM36是可實現的。
進程
程序裏是經過(JOB_CLOSE)的參數和稍稍改變下步驟來實現:class
- 打開(JOB_OPEN)做業A
- 調用(SUBMIT)想在做業A中執行的程序
- 打開(JOB_OPEN)做業B,
- 調用(SUBMIT)想在做業B中執行的程序
- 關閉做業B(JOB_CLOSE)
- 關閉做業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
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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'.