原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
因为标准事务代码SM36调度的后台作业功能相对比较简单.项目中需要针对后台作业做很多特殊的处理,这些处理有些可以通过标准功能实现,
有些无法通过标准功能实现.
为了简化后台作业的定义及丰富后台作业的控制,开发了这个后台作业二次调度程序 ZBC_IF_JOB_SCHEDULE
**本文主要介绍增强后台作业调度的定时调度功能**
二
详细介绍
> 详见链接1 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 增强后台作业调度程序详解(一)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486087&idx=1&sn=00f1e8e36c0a61963f1cbd0339999283&chksm=cf5dd7b1f82a5ea70775ceefa267996dc71f0344faadb5495b06a984b76745e33805d061881e&token=1630584820&lang=zh_CN#rd)
> 详见链接2 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 增强后台作业调度程序详解(二)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486102&idx=1&sn=129eed336411020cc80864b1160acd61&chksm=cf5dd7a0f82a5eb693f6be2e685fd2b0583435253354f3edc78dbbf6f7c840bf35aae54420fc&cur_album_id=1841167070126784519&scene=189#wechat_redirect)
三
思维缺陷
前期的调度思路是基于配置表中的时间间隔. 当调度程序在后台定时执行时, 判断配置表ZTIF002BJ中的每个作业距离上次调度时间是否已经超过了时间间隔,
如果超过则创建这个作业并立即执行.
由于思维局限在了这个时间间隔,对于每天定时调度的也是基于这个时间间隔来计算,后来添加了一些定时的优化逻辑.但效果不太好.
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 增强后台作业调度改进-准点调度
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247488292&idx=1&sn=e33e4816fda5611a418ce3c75102f6f5&chksm=cf5dce12f82a4704ee1a72a3fe0105df04187febd02611a93528b50c570f75d19141fc967e96&cur_album_id=1841167070126784519&scene=189#wechat_redirect)
四
突破
后来无意中看到作业调度的函数也可以限定开始执行日期/时间,才恍然大悟. 同时感慨于个体思维的局限性.
**感悟**
**SPRING**
大脑会给自己的思维画个框框(这个框取决于个人的学识,经历,阅读量等等因素).
很多时候思考问题时都会被局限在这个框中. 学习的目的应该不是记住多少东西(尤其在这个的AI快速发展的年代), 而是不断的通过学习或阅历拓展思维局限的框.
让大脑思考问题的方式有更多的可能性.
五
改进
后台作业配置表中增加了两个控制字段
作业调度控制
• I 通过间隔控制 调度器执行时,通过间隔判断是否立即调用一个新的作业
• T 通过指定时间控制 调度器执行时,为当前条目检查并定义当天的定时作业
六
多时间限制
该限制同时作用于上述两种作业调度方式
对于通过间隔调度的作业, 这里可以限制调度时间段. 这个限制和 后台作业的允许期间控制 同时生效
对于通过指定时间控制的, 这里限定执行的时间
改字段可以通过搜索帮助给定内容
七
搜索效果
单值效果(用于指定时间控制)
字段存储
读取时间区间控制
比如限定 20:00:00 -> 22:00:00 并排除 20:10:00->20:20:00
存储效果
八
逻辑实现
在程序中通过传递指定的时间. 来判断是立即调度作业, 还是在指定的时间调度作业. 这样就实现了精确控制的基于指定时间的后台作业调度.
再次调度时, 需要检查指定时间的作业是否已经调度, 如果已经调度,则忽略.
九
优缺点
**优点:**
比如期望于每天在上午8:00 9:00 10:00 下午 14:00 15:00 16:00 执行作业. 这种无法通过周期定义来实现.
用SM36需要定义6次. 并且改动执行时间也会很麻烦. 用ZBC_IF_JOB_SCHEDULE 程序仅需要简单的指定一行记录. 即可完成.调整也很方便.
**缺陷:**
ZBC_IF_JOB_SCHEDULE 每次仅调度当天的后续指定日期的作业, 如果当天的作业调整执行时间. 对于当天已经调度的, 可能需要手工删除.
后续可以考虑优化:在调度时同时检查那些已经调度且无效的,自动删除.
十
总结
增强后台作业调度程序ZBC_IF_JOB_SCHEDULE 在项目中存在一定的价值.
赋予它越多的功能. 它的价值也就越大.
目前基本上可以代替SM36来实现定时作业的控制: **简单,快捷,方便**
当然,这个程序本身要通过SM36定义成后台作业
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论