点击蓝字 关注我们
一
前言
接口是项目中的最重要的一类开发.一般优先级都会定义为高.
之前曾经写过一篇介绍接口框架的文章,有兴趣的可以看看
详见链接无峰,公众号:ABAP开发技巧SAP开发框架系列之 接口框架
接口程序逻辑相对简单,尤其是发出接口(ECC/S4的数据主动发送到外部系统),可以固化成同一种模式 .
本文主要介绍怎么通过代码生成器自动生成数据发出接口的程序
关于下传上传.
SPRING
一般情况下,ECC/S4系统是企业的核心系统.有时候习惯性的把ECC/S4发出数据称之为下传,把数据传入ECC/S4,成为上传. 这个称呼不太规范,同时隐含了ECC/S4系统的上位思想.更准确客观的称呼应该是ECC/S4发出和ECC/S4接收.后续截图中出现的下传字样都表示ECC/S4发出
二
发出接口特性
数据从ECC/S4通过PO发送到外部系统(也可以直接写入中间表或调用对方提供的WEB服务或http服务,只需要把写表或调用外部服务的部分封装的类中,二者从程序角度就没区别了)
发出接口行为可以归纳为以下两点
-
记录主键: 标记数据需要发送. 可以通过时间戳标记, 也可以通过待传送标识标记.
-
执行发送: 通过特定程序读取需要发出的数据主键,并关联上相关内容,调用PO接口,实现数据发出
根据数据的发送行为,区分为初始化发送或变化量发送及报错数据重发
-
初始化发送:发送所有符合业务条件的数据,不管该数据是否已经发送过,一般情况,第一次发送使用初始化发送.
-
变化量发送:只发送没有发送过的数据或上次发送后出现过变化的数据
-
错误数据重传:基于PO的反馈判断数据发送失败,对于失败的数据重新发送
关于异步接口PO反馈部分详见链接无峰,公众号:ABAP 技巧与实战PO系列之 消息的确认反馈
三
获取变化量
一般情况下,可以通过以下几种方式来标记变化量
-
时间戳标记: 主数据记录中补充一个时间戳字段(也可以使用change document中的时间戳,只是性能较差).每个接口分别记录该接口最后一次执行的时间戳.变化量就是该接口上次执行的时间戳和当前时间戳中所有符合条件的数据.
-
传送标识: 自定义传送控制表ZTIF*.比如商品主数据:ZTIFMARA,在商品保存时,通过商品特征判断该商品符合哪些接口的要求,写入商品编码+接口编号到ZTIFMARA中,同时清空下传标记.变化量就是ZTIFMARA中该接口编号中传送标识为空的商品编码.
-
内容比较: 全量数据和历史发送的数据比较,对于发生过变化的部分,作为变化量.适用于内容较少的配置表或码表
后文主要介绍传送标识获取变化量
如图一,商品主档的传送控制表.
如图二,一组接口特征配置表,在商品保存时,识别商品特性,记录到传送控制表中
图一
图二
四
变化量的严格定义
严格的讲,只有数据涉及到特定接口的字段发生了变化,才需要标记该接口该主键需要下传. 或者获取全量和历史发送数据进行内容比较,获取变化的数据.
只是这种严格的变化量定义实现的代价比较大.
所以往往会使用一种不严格的变化量定义: 只要数据发生改变, 不管改变的内容特定接口是否需要,都把该数据作为特定接口的变化量.毕竟,重复内容的传送并不会改变数据内容.
比如:接口 DEM001 只需要把商品编码+商品描述传递到目标系统. 严格的方式是判断商品为新增,或者商品只是描述字段发生了改变,才记录到传送控制表中(时间戳方式无法在记录环节实现严格变化量,如果详细到每个接口记录时间戳,本质上也就是传送控制表了). 这种判断并不困难, 但是如果接口字段增加到100个,要实现对100个特定字段的判断就比较麻烦了,并且耗费时间及性能.
综上所述,传送控制表记录主键改变时,无需明细到字段级别(但是可以明细到视图级别,比如商品的MARA视图改变才触发记录,MARC视图改变不触发记录).
五
发出程序实现
下文以商品主数据接口 DEM001为例来说明一下发出程序的自动生成过程.其它主数据或者单据生成过程类似, 差异只在于写入传送控制表的配置点及配置内容.
01
功能设计书
接口程序的功能设计文档可以用下图的EXCEL表格实现, 体现出表名,字段名及字段的获取逻辑. 根据这份设计文档, 可以完成后续的PO配置及传出程序配置.
02
配置商品记录传出控制表
通过后面的一组配置,建立商品和DEM001接口的关系.
配置接口和商品类型的关系
配置接口和商品视图的关系
配置接口和特定商品类目的关系
通过复杂配置,可以配置包含/排除,区间及通配符等
配置接口与商品任意属性字段的过滤条件
理论上,可以通过商品的任意属性来控制该商品是否需要通过特定接口发送.
配置完成后,当商品保存时,会根据配置识别该商品是否需要通过DEM001下传,如果需要,记录到下传控制表ZTIFMARA中.
03
PO定义接口
PO定义接口的过程不在本文讨论范围,只看PO配置后的结果. 通过SPROXY查看PO定义的接口
在PO定义时,需要遵从如下规则
-
对于单表结构,使用SHEET作为表节点 如图三
-
对于多表结构,使用 SHEET 作为主节点, 使用ITEMS作为次节点.
-
主节点和次节点可以是并列关系(写入中间表),如图四,
-
主节点和次节点可以是主从结构(调用对方的服务),如图五.
图三
图四
图五
04
配置产生传出程序
执行事务代码:ZBC122_CONFIG.按下图的步骤完成接口配置
配置通用清单报表
配置通用清单报表对应的表
配置表的关联关系
配置字段
检查配置
生成程序
创建TCODE
只能执行一次,并且需要填写开发包,请求后执行.执行后会创建TCODE : ZDEM001
命名规则 Z<接口编号>
生成对象写入对象清单及传输请求
此时需要输入一个开发包,及传输请求号. 这样自动生成程序的相关对象会写入到这个请求中.
在执行过程中,可能会多次弹窗确认对象的生成并写入请求.
确认后, 可以在传输请求中看到该接口编号的所有内容,如图六中包含了接口的配置部分及程序部分内容
图六
六
执行发出程序
执行TCODE ZDEM001 或程序ZBC122_DEM001 可以看到执行选择界面(所有生成的程序选择界面一致,关键字作为选择条件 附加信息都是一样的)图七
执行后,可以看到执行后write的日志内容. 图八
点击日志号,进入接口日志功能.图九
后台作业定义时,最好取消勾选WRITE日志,避免假脱机打印池被占满导致后台作业执行失败.
图七
图八
图九
七
传出程序的自动执行
通过后台作业定义执行每个接口程序的变化量发送即可.
之前介绍了一种便捷的后台作业管理方式.
参考链接.无峰,公众号:ABAP 技巧与实战SAP工具箱 增强后台作业调度程序详解(一)
参考链接无峰,公众号:ABAP 技巧与实战SAP工具箱 增强后台作业调度程序详解(二)
后台的发送是一种非及时的方式. (当然可以通过增加作业的频率让数据比较及时的发送出去,比如每分钟执行一次变化量的下发).但也是一种最有效的方式,
因为有独立的程序,发现问题可以手工执行下发.
八
接口的监控
执行ZIFLOG可以监控所有传出程序的日志信息
关键集中监控的话题
详见链接无峰,公众号:ABAP 技巧与实战SAP工具箱之 接口调用集中监控
九
总结
发出接口程序逻辑比较简单,可以通过上述配置实现.复杂的逻辑可以通过扩展程序中预留的include程序实现.
传送控制表写入的逻辑是在相应对象的保存增强中实现的. 该部分逻辑相对比较复杂,实现了数据到接口编号的关联.
通过配置生成代码无需ABAP开发经验, 如果项目中有大量的接口程序,可以通过简单培训让新手快速上手完成ECC/S4传出程序的开发.
实际项目中应用取得了很好的效果.
因为下传程序统一,规范,便于实现接口的集中监控.便于业务理解程序逻辑,监控数据传输情况.也便于发现接口程序问题.
传出接口配置在项目实践中碰到了很多异常情况,所有碰到的情况最终都归纳并整合到了配置表中.后文会详细介绍各配置项的作用及应对的情况.
THE
E
网友评论