SAP接口设计-概览

接口的幂等性:

处理:

  • 在接口中增加接口id字段,用作唯一标识接口数据,由调用方生成。
  • 增加接口记录总表,在接口结束处记录每次接口id 对应调用记录的情况
  • 在每次接口调用前校验该接口id是否成功执行过或者是否正在执行

在接口调用时对以接口id为主键的日志表进行锁表操作

接口id对应的数据已经成功调用接口时做出处理

  • 在接口结束处记录接口调用情况

参考表结构:

SAP接口设计-概览_第1张图片

接口日志记录

       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 表数据簇

处理方式:

  1. 在接口调用结束处调用日志记录子例程
    1. 在子例程中通过栈获取接口名
    2. 通过指针访问的形式获取接口传入传出参数
    3. 使用簇表的特点存储接口参数值参考链接http://blog.chinaunix.net/uid-8527621-id-2029623.html
    4. 接口id,sap单据号,消息类型,消息文本等可以作为传入参数或者约定特定变量通过指针访问。
  2. 通过接口日志管理平台展示日志
    1. 展示日志表数据
    2. 以指针方式获取存储在簇表的参数值展示或者再次动态填充参数重新调用function,debug错误原因

可参考内容:

获取时间戳  GET TIME STAMP FIELD time_stamp.

获取接口对应函数组表:tfdir

获取接口参数名称:cl_fb_parameter_db=>read

数据簇存储  EXPORT  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格式数据较为方便。

 

 

你可能感兴趣的:(接口,ABAP,接口,sap)