原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
如果程序执行耗时过长,一个优化方式是改造程序,添加并发执行功能
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ ABAP基础知识 并发执行(一 概念及相关知识)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487396&idx=1&sn=21a6bc63e1b4ef11e404ec9f0be270f9&chksm=cf5dd292f82a5b84a56473496884f3b989eebc66fb466dd1f6fca4bb4e96735766c0aee11bb7&token=1198722698&lang=zh_CN#rd)
或者参考标准DEMO程序 SPTA_PARA_DEMO_1
上述方式是由当前程序执行的进程,通过aRFC调用启动多个dialog进程完成任务的处理.
之前介绍过快速调度并发后台作业的方式.
但这种方式对于最终用户稍显复杂了. 因此考虑把这种方式通过最简单的改变嵌入到程序中.
用户只需要输入选择条件,简单点击按钮即可实现定义多个后台作业同时执行程序(按选择条件区分数据)
**本文主要介绍怎么把并发调度后台作业嵌入到原有程序中**
二
相关知识点
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 快速调度并发后台作业_2
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247489490&idx=1&sn=b26bd81fa63bcac32ce398a3115ad96c&chksm=cf5dcae4f82a43f2cb84abfda15df9ff4ef056751913d0746806e4cad6ae8facc39e0e308df9&token=1198722698&lang=zh_CN#rd)
三
达成的效果
程序改造后的效果如下
目标程序添加按钮 后台执行
用户输入限制条件点击后,弹窗补充并发后台执行的参数
如果标记了显示作业清单,跳转到显示后台作业界面
如果用户没有标记显示后台作业,提示已经调度的作业个数
四
实现方式
实现方式存在两部分逻辑
• 配置部分
• 源代码调整部分
_**01** _
**配置部分**
其中的分组方式
• 空 从配置表中维护的表,限制条件及程序传递的选择条件获取
• 1 从程序传递,示例程序ZTS_MUL_JOB_CREATE_2
• 2 从选择字段后两位获取(要求选择字段必须时数字字符型)
针对分组方式为空的情况,
需要配置分组字段内容来源的表,表字段名,特殊条件,及程序选择屏幕条件与表字段的映射关系(这些内容用来生成获取分组字段内容的动态SQL,查询出分组字段内容)
_**02** _
**源程序代码调整部分**
如果该程序未添加过选择屏幕的功能区按钮,在需要优化的程序中添加三个INCLUDE即可.
INCLUDE zbc_multi_job_01. "选择屏幕后,定义后台执行按钮INCLUDE zbc_multi_job_02."INITIALIZATION 初始化,设置按钮图标,描述INCLUDE zbc_multi_job_03. "AT SELECTION-
SCREEN,执行按钮功能
上述include 程序代码很简单
添加功能按钮
设置功能按钮描述
实现按钮功能
如果程序中已经添加过选择屏幕功能按钮. 上述INCLUDE 需要稍作调整 ,
在原来添加选择屏幕功能按钮的基础上,添加一个新的后台执行按钮,并在点击该按钮后执行后台处理功能即可
如下图. 程序中原本已经添加三个功能按钮. 则继续添加第4个功能按钮,响应的include 中处理第四个按钮的内容即可
五
核心逻辑
核心逻辑封装在类 ZCL_MUL_JOB中.
其中的MAIN方法包含如下步骤
• 获取源程序选择屏幕内容
• 创建程序的变式
• 根据配置表把选择条件字段及内容映射到表的动态选择字段中
• 弹窗让用户确认后台执行参数
• 根据分组方式,调用不同的程序完成后台作业定义
• ZBC_MULTI_JOB_ALL 针对指定程序创建多个后台作业-按号码后两位拆分
• ZBC_MULTI_JOB_ALL2 针对指定程序创建多个后台作业-按指定字段内容调度
六
比较
并发后台VS并发aRFC
比较点 | 并发后台 | 并发aRFC
---|---|---
源程序改造 | 较少 | 很多
并发分配均匀度 | 基于并发方式不同均匀度有所不同 尾号后两位方式均匀度依赖数据 , 较差 其它方式均匀度依赖配置逻辑或程序处理逻辑 , 较好 | 程序逻辑控制均匀度 , 较好
稳定性 | 依赖后台调度 , 较好 . 后台作业会自动排程 | 依赖并发调度 , 稍差 . 项目中发现调度失败的情况且不好重现
日志 | 后台作业日志 , 假脱机记录等作为日志 , 比较简单 | 可能需要自行开发日志 , 或启动 aRFC 的跟踪 , 相对比较麻烦
分组维度 | 基于选择条件分组 , 易于理解 | 代码逻辑设置分组维度
七
总结
整理分析了后台并发的相关思路及之前完成的通用程序.
为了方便的把这个功能嵌入到其它用户开发的程序中. 进一步归纳了后台并发的逻辑. 整合到类 ZCL_MUL_JOB . 并且通过简单INCLUDE
嵌入到其它程序中, 在对原有程序最小化调整的思路指导下,完成了本文涉及的代码.
其中按号码后两位并发后台的方式已经整合到了后台作业调度中.
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 增强后台作业调度程序详解(一)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486087&idx=1&sn=00f1e8e36c0a61963f1cbd0339999283&chksm=cf5dd7b1f82a5ea70775ceefa267996dc71f0344faadb5495b06a984b76745e33805d061881e&token=1198722698&lang=zh_CN#rd)
后续可以考虑把另外一种方式(配置表中配置数据源,选择条件等)也整合到后台作业调度中. 以便更好的调度并发后台作业.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论