后台 JOB 的前趋和后继

作者:ABAP三叔 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, WM, 仓库管理, 开发, 数据工程
后台 JOB 的前趋和后继 - 封面图
后台 JOB 的前趋和后继 - 封面图

前言

概念解析:

假设现在有3个JOB:A、B、C,A执行完毕后执行B,B执行完后再执行C,那么A是B的前趋作业,C是B的后继作业。

后台 JOB 的前趋和后继 - 封面图
后台 JOB 的前趋和后继 - 封面图

前台设置方式

1. SM36先建一个JOB_A;

2. 然后再建一个JOB_B,在JOB_B的开始条件内,选择"作业后",在作业后的名称内填入JOB_A;

后台 JOB 的前趋和后继 - 封面图
后台 JOB 的前趋和后继 - 封面图

3\. 然后再建一个JOB_C,在JOB_C的开始条件内,选择"作业后",在作业

后的名称内填入JOB_B。

设置完毕后进入JOB_A,点击"后继作业",会显示JOB_B,在JOB_B中点击"前趋作业"会显示JOB_A。如下图所示

后台 JOB 的前趋和后继 - 封面图
后台 JOB 的前趋和后继 - 封面图

这样设置之后,当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

ABAP三叔

关于作者:ABAP三叔

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「后台JOB的前趋和后继.md」整理生成,仅用于内部技术分享与学习交流。