![SAP工具箱增强后台作业调度程序详解(一) SAP工具箱增强后台作业调度程序详解(一)](https://i-blog.csdnimg.cn/blog_migrate/ffcb53f7a77dfa146ee645c3d3092f21.png)
一
前言
因为标准事务代码SM36调度的后台作业功能相对比较简单.项目中需要针对后台作业做很多特殊的处理,这些处理有些可以通过标准功能实现, 有些无法通过标准功能实现.
为了简化后台作业的定义及丰富后台作业的控制,开发了这个后台作业二次调度程序
ZBC_IF_JOB_SCHEDULE
第一版的下载见链接 无峰,公众号:ABAP 技巧与实战SAP工具箱 批量后台作业定义和管控
二
使用方式
配置需要调度的的后台作业, 配置表ZTIF002BJ (图一)
使用标准后台作业定义方式把程序 ZBC_IF_JOB_SCHEDULE定义成每分钟执行的作业(图二)
可以添加后台作业重复校验,确保调度程序不同时执行(图三)
![]()
![]()
01
JIEKNO
JOB编号(接口编号或程序名称): 如果下传接口需要定义为作业,输入接口编号作为JOB编号,下传接口如果是ZBC122生成的程序,则作业名称,作业程序等可以不设置,程序根据接口编号自行识别.
详见接口框架的代码生成部分. 后续撰文详细讲解 无峰,公众号:ABAP 技巧与实战SAP开发框架系列之 接口框架
02
JOB_TEXT
作业备注,给作业定义详细描述.
03
JIEK_STEP
作业优先级(通过数字表达作业的优先关系,优先级高的接口会优先安排作业,相同作业名需要设置同一个优先级),允许为空
04
JOB_ACTIV
作业允许启动标记
用来控制JOB编号是否活动,标记为X的,才允许被调度.通过该字段的设置,可以快速的启停后台作业.
标准后台作业的批量挂起处理程序:
BTCTRNS1 传送: 移动有状态“由于升级而重新计划的”的作业
BTCTRNS2 传输:释放状态为“由于升级导致取消调度”的作业
05
JOB_NAME
后台作业名称(允许为空,默认按 ZIF_设置,也可以指定作业名,以便合并多个接口到一个作业中). 多个JOB编号可以设置成同一个后台作业名称, 这样调度作业时,会把相同作业名称的JOB编号设置为后台作业的不同步骤
06
JOB_REPORT
程序名称(如果为空,用ZBC122_作为程序名称),执行作业或步骤的程序名称.
07
JOB_STEP
同一个作业中的不同步骤的顺序(允许为空) 如果一个作业定义了多个步骤,则使用JOB_STEP区分步骤的处理顺序.
08
STEP_WAIT
步骤后等待时间(秒)
如果多行的JOB_NAME相同, 表示同一个后台作业中定义多个步骤,如果某个步骤后想等待一段时间再执行下面一个步骤,可以设置这个参数,该参数会在作业中定义一个额外的步骤(ZBC_JOB_WAIT), 用于等待一段时间
一般情况下同一个作业的多个步骤之间无需等待. 但是涉及到特定场景,如果担心前面的步骤没有完成数据提交或者没有完成接口处理, 后面一个步骤的执行强依赖于前一个步骤的结果. 设置一个等待时间有利于后面的步骤减少出错的可能
![]()
09
JOB_VARIANT
后台作业执行变式(允许为空)
允许输入一个作业变式集合,输入方式详见帮助文档, 具体处理时,读取程序符合变式集合的所有变式,按照变式处理方式的不同, 定义成不同的作业, 或者同一个作业的不同步骤.
![]()
10
NO_VARIANT
变式处理方式
如果变式中输入的变式集合能够获取多个变式, 变式处理方式确定了多变式的具体处理方式
X 无需变式标记(如果没有输入变式, 最好设置一下该标记)
A 多变式处理:在一个作业中(获取的多个变式,定义在同一个作业中的不同步骤执行)
B 多变式处理:在不同的作业中(获取的多个,每个变式创建一个作业,新的作业名= <原作业名>_<变式名>
空 单一变式
![]()
11
JOB_USER
后台作业执行用户,设定后台作业的执行用户, 建议对不同类的作业设置不同的后台作业, 比如 BJ_AUTO用来处理自动单据类的作业, BJ_IF 用来处理接口类的作业. 这样查询单据的创建用户可以快速知道单据是接口创建还是自动单据创建.
12
JOB_INTERVAL
作业间隔期间(秒),定义作业执行的周期,帮助中给出了常用的周期值.作业调度原理是计算出当前时间戳和上次执行的时间戳之间的间隔(秒) 与定义的作业间隔秒)比较, 如果计算的间隔>定义的间隔, 再判断一下其它情况,确定当前作业参与调度.
13
JOB_NODUP
作业不允许重复执行(如果作业活动,则不启动新的作业)
一般情况下,自行开发的程序对于读取的数据加锁,加锁成功的才参与后续单据处理,并设置处理标记. 如果多个进程同时执行,加锁会避免多个进程处理同一条记录,产生重复的单据. 但是实际情况往往会出现锁失效,单据重复产生的情况(即便是锁范围调整为3 _scope = '3',程序执行完成后才解锁). 通过禁止多个后台重复执行可以解决这个问题.
![]()
14
JOB_MULTI
作业并发执行个数
在作业的运行周期内, 如果未处理的数据过多,单个进程无法处理完成.将导致数据积压. 此时需要考虑通过特定的机制定义多个后台作业同时执行. 最简单的并发机制是通过单号的后两位区分单号,最大可以并发100个.
详见付费文章(无法链接,请自行在公众号中查找)
SAP工具箱之 快速调度并发后台作业
该参数和 JOB_MULTI_FIELD字段同时生效,用于后台作业的并发定义与执行.
15
JOB_MULTI_FIELD
并发作业需要的单号选择字段. ZBC_MULTI_JOB_ALL程序调度并发后台执行时,需要执行的单号选择字段, 程序根据该字段限定单号的最后2位限制每个作业处理的单据(并发调度作业的程序必须有一个单号选择条件,用来区分数据)
![]()
16
.INCLUDE ZSIF002BJ_QJ
后台作业的期间控制 标记了期间控制的后台作业,在指定的期间(目前设置了3个期间)内才允许执行.
JOB_TIME_CONTROL后台作业的允许期间控制(勾选后,后台作业只能在指定的期间执行)
JOB_UZEIT_F开始时间-作业执行的时间段的开始时间(指定时间段内才执行作业,没有维护则不检查)
JOB_UZEIT_T结束时间-作业执行的时间段的结束时间
JOB_UZEIT_F_2开始时间-作业执行的时间段的开始时间2(指定时间段内才执行作业,没有维护则不检查)
JOB_UZEIT_T_2结束时间-作业执行的时间段的结束时间2
JOB_UZEIT_F_3开始时间-作业执行的时间段的开始时间3(指定时间段内才执行作业,没有维护则不检查)
JOB_UZEIT_T_3结束时间-作业执行的时间段的结束时间3
17
JOB_LAST_PROC
作业最后一次启动的时间戳 记录作业最后一次执行的时间戳. 该时间戳用于和当前时间戳计算出时间间隔. 用于判断作业是否需要调度.
18
JOB_ALL_TIMES
作业总调度次数 统计后台作业总共调度的次数.
19
JOB_ERR_TIMES
作业调度的失败次数,最后一次报错的信息会记录在字段 ZMESSAGE 中
目前有四种情况会导致作业调度失败
程序的语法检查报错
定义的变式不存在
调度作业时出现了其它报错
调度作业超出了程序选择界面中设置的最大作业总数 如下图