前言
Q: 为什么需要使用「后台作业」?
- 业务需求,需要周期性运行的任务
- 如果一个报表查询时间过长(比如客户服务器配置过于一般,程序代码优化过于 xxx),那么为了保证程序成功跑完,建议让程序在后台(服务器端)跑,然后将结果返回给我们
- etc.
创建作业
「SM36
」- 输入「作业名称」
「步骤」- 配置相关信息
完成后,如下图所示:
然后,F3
返回,点击「保存」当前作业
配置作业
这里以每日定时作业为例
配置完成后,「Ctrl + S」保存 即可
查看作业
「SM37
」- 填写 & 勾选相关信息,查询即可
PS: 也可以直接在「SM36
」页面点击「作业选择」进入查询页面
查询结果,如下图所示:
- 这里我们可以看到作业
ZWMR004_BJ_01
对应的状态是 已计划 ,说明我们的作业并没有被 释放(Release) 掉 - 这意味着我们在「配置时间 / 周期 / 保存」操作时出现了问题导致没有释放(只有已释放的作业才能进入后台作业队列,否则毫无意义)
如何释放参见下图即可:点击释放后,我们只需要根据弹出界面提示,进行周期配置并保存即可
这里给大家看一下,在正常的操作流程下,我们直接在「SM36」界面配置完成,并「Ctrl + S」保存后,作业 成功释放 后的消息提示效果
更改 / 删除作业
「选中作业」-「菜单栏」-「更改」/「删除」
注意:「已取消」和「已完成」的作业是 无法进行修改的
调试作业
选中 要调试的后台作业,TCode 输入:JDBG
然后 F7
一直跑,直到看到「熟悉的程序代码」即可自行调试
补充
创建后台作业还可以在程序选择屏幕界面 [ 选择好变式之后 ],选择后台执行,后续步骤相同
如果作业状态为「已取消」,且不是自己手动取消,那么就是 程序内部错误异常
双击当前作业,查看「作业日志」,可以看到错误日志信息,ST22
可以查看具体 DUMP 信息
如何在程序内部判断当前程序是否在进行后台作业?
- 使用系统参数
SY-BATCH
判断即可
IF sy-batch = 'X'.
" ...
ENDIF.