SAP PO接口报文保存到内表中

有一个需求,接收PI传数据过来后,除整理数据保存到用户数据表外,在后期还需要把报文加工一下(要求报文内容与原接收报文一致,只是补加少量值),在发送到其它的系统。由于数据接收后已对数据加工到了用户表,已没有原报文内容(比如金额已累计),如从用户数据表中再取出数据整理加入发送出去,一是整理数据太麻烦,二是一些数据可能已丢失,并不能很好的还原接收到的报文。

所以考虑在接收到报文时,把接收到的报文(结构化数据)保存到内表中,然后在需要再次发送出去时,从内表中取出数据,并做必要的整理,然后再发送出去。

1.1.创建保存报文的内表,

可参考(复制)系统中的标准内表:INDX创建新的内表(比如我的ZSDT_XDATA),并加入自己必要的检索字段(比如业务数据的关键KEY值)。

2.2.把结构化对像结构存储到内表中

如下面的代码,主要使用  EXPORT TO DATABASE语句,把INPUT结构内容存入表透明表ZSDT_XDATA中,其中的01,表示表中的RELID字段的值,可用此值来区分不同的接口,

FUNCTION ZSD_0242_SAVE_DATA.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(INPUT) TYPE  ZPI_MT_SD242_RESP OPTIONAL
*"     VALUE(I_SRTFD) TYPE  ZINDX_SRTFD OPTIONAL
*"----------------------------------------------------------------------

  DATA: L_SRTFD           TYPE ZINDX_SRTFD.
  DATA: LS_XDATA          TYPE ZSDT_XDATA.

  CHECK INPUT IS NOT INITIAL.
  L_SRTFD = I_SRTFD."KEY
  IF L_SRTFD IS INITIAL.
    L_SRTFD = INPUT-MT_SD242_RESP-HEADER-MESSAGE_ID.
  ENDIF.

  LS_XDATA-AEDAT = SY-DATUM.
  LS_XDATA-USERA = SY-UNAME.

  LS_XDATA-ZKEY1 = INPUT-MT_SD242_RESP-I_GOODS_ITEM-ZXMLI.
  LS_XDATA-ZKEY2 = INPUT-MT_SD242_RESP-I_GOODS_ITEM-ZXMLD.
  LS_XDATA-ZKEY3 = INPUT-MT_SD242_RESP-I_GOODS_ITEM-CCODE.
  LS_XDATA-ZKEY4 = INPUT-MT_SD242_RESP-I_GOODS_ITEM-PCODE.

  EXPORT DATA = INPUT
    TO DATABASE ZSDT_XDATA(01)"01表示0242接口报文
    FROM LS_XDATA
    ID L_SRTFD.


  COMMIT WORK.

ENDFUNCTION.

 

3.3.从内表中读到数据到结构化的结构中。

其中I_SRTFD为表ZSDT_XDATA中的SRTFD关键字段值,也就业务中报文的主键值

  DATA: LS_INPUT TYPE ZPI_MT_SD242_RESP.                    "242接口传入数据。

  IMPORT DATA = LS_INPUT FROM DATABASE ZSDT_XDATA(01) ID I_SRTFD.
  CHECK SY-SUBRC = 0.

通过这种方式,就能把内表(多级内容嵌套),或者是结构(结构中可能还包含内表)保存到内表中,并且还保存的数据的结构化,也就是保存了结构化的数据,同时也相当于保存了报文的XML文件了,

此功能也可以用作长文件的的保存,比如,可以把EXEC,WORD等长文件文件导入文本内表中,然后把此内表附值给一个结构的字段,保存此结构到ZSDT_XDATA就行了。

4.注:此保存的是结构化的数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ᝰ随心ꦿེএ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值