原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
前文介绍了自动生成发出接口程序相关的操作及配置表详情
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 自动生成发出接口程序(一)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486814&idx=1&sn=776ec5144823fd226b64caf7bad4b477&chksm=cf5dd068f82a597ee469a84d23b4c009720402203f05fe2b072e26496f6b699514e2f26404fb&token=2142941217&lang=zh_CN#rd)
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 自动生成发出接口程序(二 接口定义表)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486828&idx=1&sn=6fac56b114fa061e86cca150508e0a7f&chksm=cf5dd05af82a594c7e16ebe585f5ccb146227c7fb0601bd2d3c9ea26a959b7c9071195bb2770&token=2142941217&lang=zh_CN#rd)
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 自动生成发出接口程序(三 配置表)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486859&idx=1&sn=c73879514930d025b693ebabdbf0c079&chksm=cf5dd0bdf82a59ab5e37ccb64a5e749ba4991d1294c423f6f17e912f28c9555f1dd74735ee4a&token=2142941217&lang=zh_CN#rd)
**本文主要介绍生成的发出接口程序中预留的增强点**
大部分发出接口通过配置就可以完成逻辑了. 对于个别接口需要的特殊逻辑,可以 在 预留的增强点补充.
比如配置只支持一主表一丛表 . 对于一主表,多从表. 多出的从表需要通过增强代码赋值在91部分(示例: ZBC122_DEM001_91 ).
二
程序结构
所有通过ZBC122_CONFIG配置并生成的发出接口程序都包含了以下三组INCLUDE程序.
• ZBC122_<接口编号>_: 预留的出口位置.
• ZBC122_<接口编号>_AUTO_: 自动生成的区别于其它接口的代码部分
• ZBC_DL_: 所有接口共用的通用代码部分. 负责通用处理逻辑:比较,分组,日志等.
三
程序主体逻辑
• 定义变量
• 获取变化的主键(GT_IF)
• 加锁主键
• 获取数据(GT_ALL): 目前通过FOR ALL ENTRIES 实现,以后可以使用新语法:关联内表
• 加工数据(GT_DATA)
• 数据写入接口嵌套结构
• 调用接口
• 回写下传控制表
• 解锁数据
生成的代码负责处理不同接口在这些环节的差异部分内容. 随后的增强则用于预留给开发人员完成特定接口的特殊逻辑.
四
增强位置
根据发出接口程序的功能.把增强的位置与相应的生成的程序放到了一起.后面的位置按执行顺序排序,因为逻辑的调整,序号和代码执行顺序不太一致.
_**01** _
**10 变量定义**
选择屏幕,变量定义部分
其中 ZBC122_DEM001_AUTO_10是代码生成的选择屏幕定义部分 ZBC122_DEM001_10是预留的选择屏幕定义的出口.
这里主要完成选择屏幕定义及程序中使用的特定接口的变量定义.
三个重要的内表定义
• GT_IF 参考下传控制表定义的内表,获取变化的数据的主键
• GT_ALL 用于定义数据获取的内表
• GT_DATA 用于定义数据加工后的内表(单据类的会加工成嵌套内表结构,以便后续处理简介)
_**02** _
**20 选择屏幕字段描述**
这里主要生成了选择屏幕的选择字段描述,对于新增的选择条件, 可以在这里按特定的方式添加描述
_**03** _
**30 授权**
这里可以实现选择条件内容检查,包括授权检查等逻辑.
_**04** _
**40 初始化**
这里可以实现程序选择条件获取默认值.
通过配置已经可以完成选择条件默认值设置. 这里可以通过代码实现一些特殊的选择条件初始化.
_**05** _
**60 加锁部分**
读取变化的主键后, 对主键部分执行加锁操作, 避免下传脏数据
_**06** _
**51 重新数据获取逻辑**
在获取接口数据后, 可以在这里自定义逻辑补充数据或者重新获取数据.需要注意的是,获取的数据需要放入全局内表GT_DATA中.
_**07** _
**50 处理获取后的数据**
这里循环获取数据放入 中. 可以在这里增强特定字段得处理逻辑: 比如调用函数READ_TEXT 获取单据得长文本 (标准单据的长文本无法通过表关联获取).
增强代码能够处理的变量 里面包含了所有接口字段
下图是一个接口程序通过增强计算含税金额.
_**08** _
**70 处理嵌套内表**
生成的代码处理原始数据内表GT_ALL 放入嵌套结构的内表GT_DATA中. 这里预留的增强可以通过代码重新实现这个过程. 这里输入GT_ALL 输出
GT_DATA. 后续处理使用GT_DATA内表.
_**09** _
**80 调用对象定义部分**
预留出口允许用户定义更多的调用对象.
**_10_ **
**91 赋值接口**
把GT_DATA内容赋值到LT_SHEET 以便调用接口传递数据. 发出接口生成的程序只能处理单表/主从结构. 对于一主多从结构无法处理.
可以在这里增强处理处理多出的从表内容.
_**11** _
**92 主主结构特殊处理**
对于一个主表,一个从表的情况. 如果需要通过JDBC写入目标数据库的多个表. 需要把主从结构设置为主主结构.
这里可以增强代码实现一个主表,多个从表JDBC写入中间表的其它从表的接口内容写入逻辑.
**_12_ **
**90 数据解锁部分**
如果前面使用了特殊的加锁逻辑, 这里需要补充特殊的解锁逻辑
五
总结
自动生成发出接口程序把配置及通过配置生成的代码通过一个框架整合在一个生成的程序中.
这个程序把涉及到发出接口的逻辑肢解成几个部分. 分别通过生成的代码和预留的出口完成这些部分的逻辑.
• 因为使用了include 封装代码(因为生成代码方便). 会导致每个部分的输入,输出不太明确. 编写增强代码时需要阅读上下文及include的注释,以便理解在增强点能够实现的功能.
• 因为采用了配置与生成代码结合的方式. 有些配置的调整无需重新生成代码, 有些配置的修改需要重新生成代码. 这就会造成困惑, 解决的办法是无论如何,只要配置修改都重新生成代码并传输.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论