DATA: lv_job_name LIKE tbtco-jobname, "作业名
lv_job_nr LIKE tbtco-jobcount, "作业号
lv_job_released TYPE c,
lv_job_start_sofort TYPE c,
lv_print_parameters TYPE pri_params.
DATA:lt_rspar TYPE TABLE OF rsparams,
lw_line LIKE LINE OF lt_rspar.
"如果是要传给PARAMETER 根据需求设置屏幕参数
lw_line-selname = 'P_MONAT'.
lw_line-kind = 'P'.
lw_line-sign = 'I'.
lw_line-option = 'EQ'.
lw_line-low = p_monat.
APPEND lw_line TO lt_rspar.
"传值给 SELECT-OPTION
lw_line-selname = 'S_WERKS'.
lw_line-kind = 'S'.
lw_line-sign = 'I'.
lw_line-option = 'EQ'.
lw_line-low = '1000'.
APPEND lw_line TO lt_rspar.
APPEND lw_line TO lt_rspar.
"JOB 名称job_name = 'ZTESTYGQ'."被调用 或者要执行后台作业的程序名
lv_job_name = job_name .
"打开JOB 通过JOB name 获得JOB号
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_job_name
IMPORTING
jobcount = lv_job_nr
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF syst-subrc = 0.
"调用需要跑JOB的程序
SUBMIT (lv_job_name)
WITH SELECTION-TABLE lt_rspar
USER syst-uname " mandatory
VIA JOB lv_job_name NUMBER lv_job_nr AND RETURN.
"运行结束 关闭JOB
IF sy-subrc = 0.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_job_nr
jobname = lv_job_name
strtimmed = 'X'
IMPORTING
job_was_released = lv_job_released
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF syst-subrc <> 0.
MESSAGE '关闭后台作业出错' TYPE 'I'.
ELSE.
MESSAGE '后台JOB开始运行' TYPE 'I'.
ENDIF.
ENDIF.
ENDIF.
附:
JOB相关系统表:TBTC*
JOB的状态: 可以使用系统函数查看 BDL_READ_JOB_STATUS 或者是自己去表 TBTCO 中查找根据STATUS 字段判断是否完成 F 就是结束 A 出错终止 R 是运行中
JOB运行时间:TBTCO中有开始日期,开始时间和结束日期结束时间 两者直接相减就得出JOB运行的时间
JOB日志查看:系统中的日志好像是没有存放在系统表而是文件中,可以通过函数 BP_JOBLOG_READ 获取,传入JOB名和JOB编号就可以获得日志信息。
"获取失败日志
DATA:lt_log TYPE TABLE OF tbtc5 WITH HEADER LINE.
CALL FUNCTION 'BP_JOBLOG_READ'
EXPORTING
client = sy-mandt
jobcount = lw_job-jobcount
jobname = lw_job-jobname
TABLES
joblogtbl = lt_log
EXCEPTIONS
cant_read_joblog = 1
jobcount_missing = 2
joblog_does_not_exist = 3
joblog_is_empty = 4
joblog_name_missing = 5
jobname_missing = 6
job_does_not_exist = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.