涉及到兩個程序:
ZTEST_ZUMA02 (主程序)
ZTEST_ZUMA(被調用的程序,需要以后臺job執行)
"ztest_zuma 的代碼
DATA?col?TYPE?i?VALUE?0.
DO?8?TIMES.
MESSAGE?'JOB?HERE'?TYPE?'S'.
ENDDO.
程序ZTEST_ZUMA是在程序ZTEST_ZUMA02中以job的形式調用的,先來看看SM37里面ZTEST_ZUMA的執行日志,當然這些日志是ZTEST_ZUMA程序中通過message輸出的:

到這里你應該有一個初步的認識了,那么關鍵看看ZTEST_ZUMA02是通過什么方式實現以JOB的形式調用ZTEST_ZUMA的呢,看一下代碼的幾處關鍵位置,job_open,submit,job_close.
簡單解釋一下,代碼中也有注釋。
job_open :開啟一個后臺job,job名任意命名,會生產一個job id.
submit :調用需要設置為后臺執行的程序,使用via 參數設置job的相關參數.(這個時候可以看到SM37里面有一個job 狀態為schedule).
job_close :把之前創建的job release 并執行(參數strtimmed = 'X' 表示立即執行,設置某一個時間執行還沒有研究).
====================== REPORT ztest_zuma02. DATA: lv_jobnum TYPE btcjobcnt. DATA: gv_jobname TYPE btcjob VALUE 'ZUMATESTJOB'."Step1. open a job define a job_name(whatever you want), and return a jobnumber. CALL FUNCTION 'JOB_OPEN'EXPORTINGjobname = gv_jobnameIMPORTINGjobcount = lv_jobnumEXCEPTIONScant_create_job = 1invalid_job_data = 2jobname_missing = 3OTHERS = 4."Step2. Submit a program which you want to run in background as job. SUBMIT ztest_zuma VIA JOB gv_jobname NUMBER lv_jobnum AND RETURN. "ztest_zuma 的代碼 "DATA col TYPE i VALUE 0. "DO 8 TIMES. " MESSAGE 'JOB HERE' TYPE 'S'. "ENDDO."Step3-Option. This is option step, for some special requirment modify job name instead of sy-uname. " in this step first call BP_JOB_READ to read the job information and then call BP_JOB_MODIFY to modify " the user name. PERFORM modify_job_name USING lv_jobnum gv_jobname.IF sy-subrc = 0. "Step4. To release the job which you were opened in step1.CALL FUNCTION 'JOB_CLOSE'EXPORTINGjobcount = lv_jobnumjobname = gv_jobnamestrtimmed = 'X'EXCEPTIONScant_start_immediate = 1invalid_startdate = 2jobname_missing = 3job_close_failed = 4job_nosteps = 5job_notex = 6lock_failed = 7OTHERS = 8.IF sy-subrc NE 0.MESSAGE 'Job error' TYPE 'E'.ELSE.MESSAGE 'Job success' TYPE 'S'.ENDIF. ENDIF. *&---------------------------------------------------------------------* *& Form MODIFY_JOB_NAME *&---------------------------------------------------------------------* * Modify user name for job owner *----------------------------------------------------------------------* * -->P_LV_JOBNUM text * -->P_GV_JOBNAME text *----------------------------------------------------------------------* FORM modify_job_name USING p_lv_jobnump_gv_jobname.DATA: ls_jobhead TYPE tbtcjob,lt_jobstep TYPE STANDARD TABLE OF tbtcstep.CALL FUNCTION 'BP_JOB_READ'EXPORTINGjob_read_jobcount = p_lv_jobnumjob_read_jobname = p_gv_jobnamejob_read_opcode = '20'IMPORTINGjob_read_jobhead = ls_jobheadTABLESjob_read_steplist = lt_jobstepEXCEPTIONSinvalid_opcode = 1job_doesnt_exist = 2job_doesnt_have_steps = 3OTHERS = 4.IF sy-subrc <> 0.ENDIF.ls_jobhead-sdluname = 'BATCH_CM'.CALL FUNCTION 'BP_JOB_MODIFY'EXPORTINGdialog = 'N'jobcount = p_lv_jobnumjobname = p_gv_jobnamenew_jobhead = ls_jobheadopcode = '16'IMPORTINGmodified_jobhead = ls_jobheadTABLESnew_steplist = lt_jobstepEXCEPTIONScant_derelease_job = 1cant_enq_job = 2cant_read_jobdata = 3cant_release_job = 4cant_set_jobstatus_in_db = 5cant_start_job_immediately = 6cant_update_jobdata = 7eventcnt_generation_error = 8invalid_dialog_type = 9invalid_new_jobdata = 10invalid_new_jobstatus = 11invalid_opcode = 12invalid_startdate = 13job_edit_failed = 14job_modify_canceled = 15job_not_modifiable_anymore = 16nothing_to_do = 17no_batch_on_target_host = 18no_batch_server_found = 19no_batch_wp_for_jobclass = 20no_modify_privilege_given = 21no_release_privilege_given = 22no_startdate_no_release = 23target_host_not_defined = 24tgt_host_chk_has_failed = 25invalid_targetgroup = 26conflicting_targets = 27OTHERS = 28.IF sy-subrc <> 0.ENDIF. ENDFORM.
?
?
?