利用EXPORT IMPORT 轻松实现SAP通用接口日志程序 XML 和 JSON 格式

前言

实际项目实施中经常要与各种系统做接口集成,比如SAP,OA,CRM,MES等等。
接口多,系统多,这时接口日志程序必不可少。
本文介绍利用EXPORT IMPORT 轻松实现SAP通用接口日志程序的方法。


一、接口日志用什么格式保存?

可以参考系统标准的表:DEMO_INDX_TABLE,里面的CLUSTD字段的数据类型:LRAW。可以保存任意格式的文本,常用的有XML和JSON。

 DEMO_INDX_TABLE

二、实现步骤

1.EXPORT 、IMPORT 语句

EXPORT 语句语法

... {p1 = dobj1 p2 = dobj2 ...} 
  | {p1 FROM dobj1 p2 FROM dobj2 ...} 
  | (ptab) ... 

... { DATA BUFFER xstr } 
  | { INTERNAL TABLE itab } 
  | { MEMORY ID id } 
  | { DATABASE      dbtab(ar) [FROM wa] [CLIENT cl] ID id } 
  | { SHARED MEMORY dbtab(ar) [FROM wa] [CLIENT cl] ID id } 
  | { SHARED BUFFER dbtab(ar) [FROM wa] [CLIENT cl] ID id } ... 

  • {p1 = dobj1 p2 = dobj2 ...}与 {p1 FROM dobj1 p2 FROM dobj2 ...}的意义一样,只是写法不一样,dobj1、dobj2…变量将会以p1、p2…名称存储到内存或数据库中。p1、p2…名称随便取,如果p1、p2…与将要存储的变量名相同时,只需写变量名即可,即等号与 FROM 后面可以省略。p1、p2…这些名称必须与IMPORT语句中相一致,否则读取不出。
  •  (ptab):为动态指定需要存储的变量,ptab内表结构要求是这样的:只需要两列,列名任意,但类型需要是字符型;第一列存储如上面的p1、p2…名称,第二列为上面的dobj1、dobj2…变量,如果变量与名称相同,则也可以像上面一样,省略第二列的值。两列的值都必需要大写,实例如下:
  •  MEMORY ID:将变量存储到ABAP Memory内存中。
  • DATABASE:将变量存储到数据库中;dbtab为簇数据库表的名称(如系统提供的标准表INDX);ar的值为区域ID,它将数据库表的行分成若干区域,它必须被直接指定,且值是两位字符,被存储到簇数据库表中的RELID字段中;id 的值会存储到簇数据表中的RELID字段的下一用户自定义字段中:
  • SHARED MEMORY/BUFFER :将数据存储到SAP应用服务器上的SAP Memory中,可共同一服务上的所有程序访问。两种的作用是一样的,最大不同是在数据达到最大内存限制时的处理方式不同:最大内存限制值分别是通过rsdb/esm/buffersize_kb (SHARED MEMORY)、rsdb/obj/buffersize (SHARED BUFFER)来设置的,当内存占用快满时,SHARED MEMORY必须通过DELETE FROM SHARED MEMORY来手动清理,而SHARED BUFFER会自动删除很少被使用到的数据(当然也可以通过DELETE FROM SHARED BUFFER手动及时的删除不用的数据)。
  • FROM wa:wa工作区类型可以参照簇数据库dbtab类型,也可定义成只含有用户数据字段的结构,它是用来设置簇数据库表中SRTF2 与 CLUSTR两个字段之间的用户数据字段(参见簇数据表图中的编号为5的用户数据)的值,然后在Export时将相应的字段存储到SRTF2字段与CLUSTR字段间的相应字段中去。如果使用“TABLES dbtab.”定义语句,可以省略“[FROM wa]”,也会默认将其存储到数据库表中,但如果没有“TABLES dbtab.”这样的定义语句,也没有“[FROM wa]”选项时,将不会有数据存储到簇数据库表中的用户字段中去。
  • CLIENT cl:默认为当前客户端,存储到簇数据库表中的MANDT字段中。

IMPORT  语句语法

IMPORT parameter_list FROM medium [conversion_options]. 

... {p1 = dobj1 p2 = dobj2 ...} 
  | {p1 TO dobj1  p2 TO dobj2 ...} 
  | (ptab) ... 

... { DATA BUFFER xstr } 
  | { INTERNAL TABLE itab } 
  | { MEMORY ID id } 
  | { DATABASE      dbtab(ar) [TO wa] [CLIENT cl] ID id } 
  | { SHARED MEMORY dbtab(ar) [TO wa] [CLIENT cl] ID id } 
  | { SHARED BUFFER dbtab(ar) [TO wa] [CLIENT cl] ID id } ... 

EXPORT data1 = ev_strreq data2 = ev_strres TO DATABASE demo_indx_table(z1) FROM lw_indx ID iv_id.

IMPORT data1 = ev_strreq data2 = ev_strres FROM DATABASE demo_indx_table(z1) TO lw_indx ID iv_id.

ABAP示例代码

  cl_demo_output=>new(
    )->begin_section( `请求:`
    )->write_json( lv_strreq
    )->next_section( `响应:`
    )->write_json( lv_strres
    )->end_section(
    )->display( ).

  cl_demo_output=>new(
    )->begin_section( `请求:`
    )->write_xml( lv_strreq
    )->next_section( `响应:`
    )->write_xml( lv_strres
    )->end_section(
    )->display( ).

cl_demo_output 一次显示多个JSON

2.实现效果:


总结

提示:可以在日志表中加几个段保存接口重要业务信息,比如采购订单号,凭证号,物料号,接口成功,失败的标记,Http 状态码等信息,方便直接搜索表记录,快速定位接口日志。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值