前言
概念解析:
假设现在有3个JOB:A、B、C,A执行完毕后执行B,B执行完后再执行C,那么A是B的前趋作业,C是B的后继作业。
前台设置方式
1. SM36先建一个JOB_A;
2. 然后再建一个JOB_B,在JOB_B的开始条件内,选择"作业后",在作业后的名称内填入JOB_A;
3\. 然后再建一个JOB_C,在JOB_C的开始条件内,选择"作业后",在作业
后的名称内填入JOB_B。
设置完毕后进入JOB_A,点击"后继作业",会显示JOB_B,在JOB_B中点击"前趋作业"会显示JOB_A。如下图所示
这样设置之后,当JOB_A执行完毕之后接着执行JOB_B,JOB_B执行完毕后接着执行JOB_C。
ABAP实现
在我的工具类ZCL_COMMON=>START_JOB方法中,支持设置JOB的前趋作业。参考示例代码如下:
TABLES: apqi.DATA: gt_qid TYPE STANDARD TABLE OF apqi-qid.DATA: gt_rsparams TYPE TABLE OF rsparams.DATA: gv_jobname TYPE tbtcjob-jobname.DATA: gv_jobcount TYPE tbtcjob-jobcount.DATA: gv_eventid TYPE tbtcjob-eventid.DATA: gv_eventparm TYPE tbtcjob-eventparm.DATA: gv_date LIKE sy-datum.DATA: gv_time LIKE sy-uzeit.*&---------------------------------------------------------------------**& 选择屏幕 / SELECTION SCREEN*&---------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: sgroupid FOR apqi-groupid."会话名称 SELECT-OPTIONS: sqid FOR apqi-qid."队列ID
SELECTION-SCREEN END OF BLOCK blk1.INITIALIZATION. APPEND 'IEQRPTSHF00' TO sgroupid.
START-OF-SELECTION. SELECT qid INTO TABLE @gt_qid FROM apqi WHERE datatyp = 'BDC' AND groupid IN @sgroupid AND qid IN @sqid. IF gt_qid[] IS INITIAL. MESSAGE '无数据' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF.
END-OF-SELECTION . LOOP AT gt_qid INTO DATA(ls_qid). gt_rsparams = VALUE #( ( selname = 'QUEUE_ID' kind = 'P' low = ls_qid ) ). IF sy-tabix = 1. gv_date = sy-datum. gv_time = sy-uzeit + 10."10秒后执行,只有已释放和已调度的JOB才能作为前驱作业 ELSE. CLEAR: gv_date, gv_time. ENDIF. DATA(ls_return) = zcl_common=>start_job( jobname = |SM35_{ ls_qid }| report = 'RSBDCBTC' params = gt_rsparams start_date = gv_date start_time = gv_time eventid = gv_eventid eventparm = gv_eventparm ). IF ls_return-return-type = 'S'. gv_jobname = ls_return-jobname. gv_jobcount = ls_return-jobcount. gv_eventid = `SAP_END_OF_JOB`. gv_eventparm = |{ ls_return-jobname WIDTH = 32 ALIGN = LEFT }{ ls_return-jobcount }|. ENDIF. ENDLOOP.重点在 eventid 和 eventparm 参数
总结
对于设置串行执行JOB序列,使用前趋作业和后继作业是一个非常不错的方法,有需求的朋友们动手试试吧^_^
GITHUB地址:https://github.com/a87b01c14/ZCL_COMMON