【ABAP】获取后台Job相关状态
這一節主要對后臺作業(Batch JOB)中一些平時不怎么用到的內容做一下整理,有需要對后臺作業進行控制的同行可以學習參照,比如定時批量對一部分作業進行狀態的變更,控制運行中作業的數量等等。
1、SAP后臺JOB相關系統表:TBTC*
主要的有 :
- TBTCO - 作業狀態概述表
- TBTCP - 批作業步驟概述
2、JOB的狀態: 可以使用系統函數查看 ?BDL_READ_JOB_STATUS ?或者是自己去表?TBTCO 中查找(根據STATUS 字段判斷是否完成)。
JOB運行時間:TBTCO中有開始日期開始時間和結束日期結束時間,兩者直接相減就得出JOB運行的時間。
3、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.
4、Job狀態的更改:可以通過函數BP_JOB_MODIFY來修改。
*&---------------------------------------------------------------------* *& 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_NEW'.CALL FUNCTION 'BP_JOB_MODIFY'EXPORTINGdialog = 'N'jobcount = p_lv_jobnumjobname = p_gv_jobname *** new_jobhead = ls_jobheadopcode = '18'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.上面的函數中需要注意一個參數:opcode ,下面則是這個參數的具體對照解釋。
| ? btc_edit_btcctl_tbl? ?? ? LIKE btch0000-int4 VALUE??1, ??btc_show_btcctl_tbl? ?? ? LIKE btch0000-int4 VALUE??2, ??btc_edit_user_eventids? ? LIKE btch0000-int4 VALUE??3, ??btc_show_user_eventids? ? LIKE btch0000-int4 VALUE??4, ??btc_edit_system_eventids??LIKE btch0000-int4 VALUE??5, ??btc_show_system_eventids??LIKE btch0000-int4 VALUE??6, ??btc_edit_steplist? ?? ?? ?LIKE btch0000-int4 VALUE??7, ??btc_show_steplist? ?? ?? ?LIKE btch0000-int4 VALUE??8, ??btc_show_variantlist? ?? ?LIKE btch0000-int4 VALUE??9, ??btc_create_job? ?? ?? ?? ?LIKE btch0000-int4 VALUE 10, ??btc_edit_job? ?? ?? ?? ???LIKE btch0000-int4 VALUE 11, ??btc_show_job? ?? ?? ?? ???LIKE btch0000-int4 VALUE 12, ??btc_check_only? ?? ?? ?? ?LIKE btch0000-int4 VALUE 13, ??btc_edit_startdate? ?? ???LIKE btch0000-int4 VALUE 14, ??btc_show_startdate? ?? ???LIKE btch0000-int4 VALUE 15, ??btc_modify_whole_job? ?? ?LIKE btch0000-int4 VALUE 16, ??btc_release_job? ?? ?? ???LIKE btch0000-int4 VALUE 17, ??btc_derelease_job? ?? ?? ?LIKE btch0000-int4 VALUE 18, ??btc_read_jobhead_only? ???LIKE btch0000-int4 VALUE 19, ??btc_read_all_jobdata? ?? ?LIKE btch0000-int4 VALUE 20, ??btc_joblist_edit? ?? ?? ? LIKE btch0000-int4 VALUE 21, ??btc_joblist_show? ?? ?? ? LIKE btch0000-int4 VALUE 22, ??btc_joblist_select? ?? ???LIKE btch0000-int4 VALUE 23, ??btc_joblog_show? ?? ?? ???LIKE btch0000-int4 VALUE 24, ??btc_edit_omset? ?? ?? ?? ?LIKE btch0000-int4 VALUE 25, ??btc_show_omset? ?? ?? ?? ?LIKE btch0000-int4 VALUE 26, ??btc_show_oms_sdl_tbl? ?? ?LIKE btch0000-int4 VALUE 27, ??btc_show_xpgm_list? ?? ???LIKE btch0000-int4 VALUE 28, ??btc_close_job? ?? ?? ?? ? LIKE btch0000-int4 VALUE 29, ??btc_varjoblist_select? ???LIKE btch0000-int4 VALUE 30, ??btc_varlist_select? ?? ???LIKE btch0000-int4 VALUE 31, ??btc_performance_list? ?? ?LIKE btch0000-int4 VALUE 32, ??btc_performance_info? ?? ?LIKE btch0000-int4 VALUE 33, ??btc_batchproces_list? ?? ?LIKE btch0000-int4 VALUE 34, ??BTC_DONT_READ_PRIPARAMS? ?LIKE BTCH0000-INT4 VALUE 35,? ??btc_xbp_all_jobdata? ?? ? LIKE btch0000-int4 VALUE 36,? ??btc_xbp_jobhead_only? ?? ?LIKE btch0000-int4 VALUE 37.?? |
5、ABAP后臺JOB數量控制。
FORM?SUB_CHECK_JOB.
??DATA:?BEGIN?OF?LT_JOBS?OCCURS?0?,
??????????JOBNAME??TYPE?BTCJOB,
??????????STRTDATE?TYPE?BTCXDATE,
??????????STRTTIME?TYPE?BTCXTIME,
??????????ENDDATE??TYPE?BTCXDATE,
??????????ENDTIME??TYPE?BTCXTIME,
????????END?OF?LT_JOBS.
??DATA:?F_JOBNAME?TYPE?STRING?VALUE?'Z_%'.
??DATA:?V_ACTIVE?TYPE?INT1.
??SELECT?JOBNAME
??INTO?TABLE?LT_JOBS
??FROM?TBTCO
??WHERE?(?JOBNAME?LIKE?F_JOBNAME?)
??AND?STATUS?EQ?'R'.
??IF?SY-SUBRC?=?0?.
????DESCRIBE?TABLE?LT_JOBS?LINES?V_ACTIVE?.
????IF?V_ACTIVE?>=?5.
??????MESSAGE?'有正在運行的任務,此次任務取消。'?TYPE?'S'?DISPLAY?LIKE?'E'.
????ENDIF?.
??ENDIF.
ENDFORM.?"?SUB_CHECK_JOB
其他后續更新。
總結
以上是生活随笔為你收集整理的【ABAP】获取后台Job相关状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ABAP实例】SAP调用RESTful
- 下一篇: 【转载】IT新曙光——“遇事不决,量子力