SAP接口设计-概览
接口的幂等性:
处理:
- 在接口中增加接口id字段,用作唯一标识接口数据,由调用方生成。
- 增加接口记录总表,在接口结束处记录每次接口id 对应调用记录的情况
- 在每次接口调用前校验该接口id是否成功执行过或者是否正在执行
在接口调用时对以接口id为主键的日志表进行锁表操作
接口id对应的数据已经成功调用接口时做出处理
- 在接口结束处记录接口调用情况
参考表结构:
接口日志记录
Webservice 日志可以通过SRT_UTIL查看,PI日志可以通过SXI_MONITOR查看,但是RFC及REST调用的接口则需要单独记录。
考虑到接口日志为运维人员查看,可以封装出来以function为基础的一套通用的接口日志记录及展示功能,不管sap调用外部系统还是外部系统调用sap均封装处理为function统一记录日志。
可参考表结构
MANDT | MANDT | CLNT | 3 | 0 | 集团 |
RELID | RELID | CHAR | 2 | 0 | 关系ID |
FUNCNAME | RS38L_FNAM | CHAR | 30 | 0 | 功能模块的名称 |
INTERFACE_ID | CHAR | 30 | 0 | 接口ID/外部单据号 | |
TIME_STAMP | TIMESTAMPL | DEC | 21 | 7 | 时间戳 |
FUNCPARA | RS38L_PAR_ | CHAR | 30 | 0 | 参数名称 |
SRTF2 | SRTF2 | INT4 | 10 | 0 | 连续标识 |
AREA | RS38L_AREA | CHAR | 26 | 0 | 函数组, 函数模块属于函数组 |
BUSINESS_NUM | CHAR | 30 | 0 | SAP单据号 | |
ERDAT | DATUM | DATS | 8 | 0 | 日期 |
ERZET | UZEIT | TIMS | 6 | 0 | 时间 |
ERNAM | UNAME | CHAR | 12 | 0 | 用户名 |
MSG_TYPE | BAPI_MTYPE | CHAR | 1 | 0 | 消息类型: S 成功,E 错误,W 警告,I 信息,A 中断 |
MSG_TEXT | BAPI_MSG | CHAR | 220 | 0 | 消息文本 |
CLUSTR | SYBIN2 | INT2 | 5 | 0 | SYST的BIN2数据元素 |
CLUSTD | CLUSTD | LRAW | 2886 | 0 | 应用日志:INDX 表数据簇 |
处理方式:
- 在接口调用结束处调用日志记录子例程
- 在子例程中通过栈获取接口名
- 通过指针访问的形式获取接口传入传出参数
- 使用簇表的特点存储接口参数值参考链接http://blog.chinaunix.net/uid-8527621-id-2029623.html
- 接口id,sap单据号,消息类型,消息文本等可以作为传入参数或者约定特定变量通过指针访问。
- 通过接口日志管理平台展示日志
- 展示日志表数据
- 以指针方式获取存储在簇表的参数值展示或者再次动态填充参数重新调用function,debug错误原因
可参考内容:
获取时间戳 GET TIME STAMP FIELD time_stamp.
获取接口对应函数组表:tfdir
获取接口参数名称:cl_fb_parameter_db=>read
数据簇存储 EXPORT <fs> TO DATABASE zlog(fl) ID ls_key FROM ls_interface_log.
参考链接http://blog.chinaunix.net/uid-8527621-id-2029623.html
数据交互方式
SAP发布的接口的数据格式一般为xml, 但是也有为了方便在接口参数中使用string字符作为实际数据的交互(常见的为json格式)。还有通过web服务发布rest接口,参数形式一般也为json格式。
SAP 调用外部接口可以直接生成abap格式调用,但是restful 调用则一般为json格式,还有一些比如银行接口以XML报文为主。
各种格式之间需要做数据转换
json 和abap 之间的转换使用方法/ui2/cl_json=>serialize及/ui2/cl_json=>deserialize 比较方便。
XML 和abap 之间的转换比较方便的是使用类CL_XML_DOCUMENT的方法。
transformation 可以实现三种格式之间的转换,只是相对麻烦一些。
一般发布接口时还是以string字符串做出传入传出参数传输json格式数据较为方便。
文章来自于网络,如果侵犯了您的权益,请联系站长删除!