一
前言
标准后台作业定义时,周期值最小设置为1分钟. 意味者最快每分钟调度一次.
当用户提出能否让后台执行的频率更快些, 比如30秒执行一次 . 此时作为一个SAP的拥趸者, 要坚决抵制用户的不良需求. 义正言辞的告诉用户:
作业不需要这么高的频率执行
万一上个作业没完成,下个作业又启动,会带来问题
SAP限制最低每分钟执行是有原因的
系统不支持(作为一个成熟的顾问, 这一点要排到最后)
一般情况下,用户会妥协的. 但如果碰到了较劲的用户, 就请他让顾问看见这篇文章
本文主要介绍怎么让后台作业执行周期低于一分钟
二
先看疗效
下图中的作业每秒执行一次
三
实现步骤
01
创建事件
创建一个后台处理事件(SM62)
02
定义作业
定义一个基于事件触发的作业
03
触发事件
定时触发事件
定时触发事件有几种方式. 最简单的方式是写一个程序. 程序中执行一个死循环,把该程序定义后台执行.该程序就可以每指定时间间隔触发一次事件 基于该事件的作业就会被执行一次.
缺点: 这个程序会一直占用一个后台进程.
问
杠精: 但是系统语句wait up to seconds 只能到秒的级别. 如果每半秒就要执行一次作业. 这个方法就不管用呀.
这种情况, 可以通过循环中获取时间戳,在时间戳中计算更精确的间隔 或者使用类cl_abap_timer_manager来管理更精确的时间间隔.
答
四
定时触发事件的升级版
通过ABAP守护进程实现
效果如下
指定进程名,时间间隔(毫秒). (后续可以把待触发的事件也放在屏幕上)
通过发送消息给守护进程 (START 启动触发后台作业 STOP 停止触发后台作业) 也能控制后台作业是否定时执行 (后续也可以优化在消息发送中控制作业频率)
执行后,会创建一个ABAP守护进程. 该进程可以通过事务代码SMDAEMON 管理
守护进程可以在指定的时间触发一下事件 ,让后台作业执行
SMDAEMON管理界面
五
了解更多
测试发现:守护进程中不允许执行submit语句,
守护进程也不支持 call function in backgroup task
ABAP daemon的介绍
https://blogs.sap.com/2018/10/18/abap-daemons-always-available-abap-sessions-to-handle-events/
Abap daemon的示例
https://developers.sap.com/tutorials/abap-connectivity-daemon-simple.html
六
话题讨论
请点击下面的链接参与话题讨论
【腾讯文档】ABAP守护进程能做什么
https://docs.qq.com/sheet/DZVhrSFF0TVlFWnVl?tab=BB08J2
ABAP守护进程能做什么
https://docs.qq.com/sheet/DZVhrSFF0TVlFWnVl?tab=BB08J2
七
总结
更快频率的后台作业在项目中,并没有太多实际的作用. 但是通过对这个问题的思考与尝试,可以了解更多SAP的后台机制
事件触发
守护进程
定时器
…
所以,当业务人员提出一个问题时, 不管这个问题看起来多愚蠢,多不可思议. 都不妨碍我们就这个问题展开思考一下, 或者转问一下AI .
在人工智能时代,提问也是个人综合能力的体现.
守护进程触发作业执行程序
ZBC_IF_JOB_SCHEDULE(增强后台作业管理),可以带给后台作业处理更多的可能性
增强后台作业管理详见
无峰,公众号:ABAP 技巧与实战SAP工具箱 增强后台作业调度程序详解(一)
详见
无峰,公众号:ABAP 技巧与实战SAP工具箱 增强后台作业调度程序详解(二)
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论