一
前言
因为标准事务代码SM36调度的后台作业功能相对比较简单.项目中需要针对后台作业做很多特殊的处理,这些处理有些可以通过标准功能实现, 有些无法通过标准功能实现.
为了简化后台作业的定义及丰富后台作业的控制,开发了这个后台作业二次调度程序
ZBC_IF_JOB_SCHEDULE
二
介绍
详见链接
无峰,公众号:ABAP 技巧与实战SAP工具箱 增强后台作业调度程序详解(一)
详见链接
无峰,公众号:ABAP 技巧与实战SAP工具箱 增强后台作业调度程序详解(二)
三
改进点
在原有的存粹通过间隔调度的作业中. 该作业每次执行的时间可能因为调度器本身的延迟执行而导致作业的持续延迟执行
比如: 作业定义每小时执行一次, 间隔3600秒. 第一次执行 9:00 调度器每分钟执行一次,10:00执行时,会执行到这个作业, 但是如果10:00的调度器本身的作业被系统延迟, 则调度器调度的作业也会被延迟执行. 这个延迟存在滚动效应,逐渐的, 会发现原来的整点执行的作业会被推迟到整点半执行.
本来这种延迟没什么问题.
但是如果期望通过整单/半点 来控制多个相关作业的调度时间,这种延迟就会导致控制失效.
当然,如果作业有严格的顺序, 最好通过定义成同一个作业的步骤来实现. 本文只讲怎么确保作业正点执行.不考虑其它.
四
按天调度的改进
按天执行的作业,可以通过设置 作业允许期间控制 . 第一个期间控制开始执行的时间及允许延迟的时间. 这样在计算作业的间隔时,会减去这个结束时间和开始时间持续的秒.
如图所示. 当每天08:00:00调度器执行时会把昨天延迟的作业修正到准时执行.
五
按小时调度的改进
指定作业的定点时间. JOB_FIX_TIME
定点时间触发的前提条件:时间间隔必须是3600的整数倍.
作业是否调度取决于两个因素:
1.作业周期达到.当前时间戳-作业上次时间戳 > 作业间隔
2.定点达到,此时会检查当前时间戳-作业上次时间戳> 作业间隔/2 并且,当前时间是定点的时间(定点时间只到分钟,所以只比对时/分).
上述两条任意满足一个,则作业执行.
这样就可以确保作业在指定的定点执行.
比如作业
维护方式: hhmmss 时间格式 其中秒的部分无需关注
示例1(每个小时) 000000 表示每个小时整点执行
示例2(每两小时执行): 081000 (表示从08:10开始,系统考虑每两个小时的定点调度)
注意事项: 定点时间维护不全,并不会导致作业在未定点的时间内不执行. 因为作业周期达到也会被调度执行
但如果同时勾选JOB_TIME_CONTROL. 且维护了定点执行, 则作业将严格的按照定点时间执行. 可能的问题: 如果调度作业被延迟执行. 则可能导致定点作业无法执行
六
源码获取
后台作业调度旧版本的代码可以在之前的公众号文章中获取. 如果期望新版源码. 打赏文章200豆联系392077索取.
七
总结
ZBC_IF_JOB_SCHEDULE用于增强调度后台作业. 在标准调度基础上添加了很多实用功能. 管理人员可以通过SE16N维护表ZTIF002BJ,实现批量维护,调整后台作业.
在项目实践中,极大简化了的作业的定义,调整过程.并附加了很多实用功能.用于定义更复杂的作业.
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论