SAP PO IDOC开发上(SAP PO 开发十一)

开发环境: S4 HANA 1809,Process Orchestration 750,  SoapUI Pro 5.1.2.

SAP IDOC协议,很老的东西了,记得2001年项目上就听说过,在比较老的系统上,使用很广泛,一直没机会接触,这次终于开始深入的了解。

IDOC在协议中所处的位置:IDOC底层是基于RFC(SOCKET长连接),可以说,IDOC其实就是一种RFC的高级应用,SAP在RFC的基础上提供了一整套封装的功能,来实现用IDOC传输和处理数据。

计划实现下面的例子,IDOC入站,IDOC出站:

 

我们先开始第一个接口JKT001(入站,外围程序传数据给SAP)

一、IDOC在SAP端的配置如下

1WE31 定义

2WE30 定义的基本类型  BASIC TYPE

3WE81 定义message类型

4WE82  绑定上面的基本类型与消息类型

5建一个自己的处理函数

6BD51 设置一下这个函数

7WE57 绑定基本类型、消息类型、函数名称

8WE42 定义入站的处理逻辑(由自己的函数模块处理)

9WE20 设置错误消息

二、IDOC在SAP端的调试:

1、WE02中可以看到全部IDOC的消息记录

 

2、WE19中可以发起IDOC的数据包测试,输入这个ID,执行,改里面的报文数据,点“标准入站”测试。

三、IDOC入站方式中自己的函数:

在IDOC的配置中,在ABAP层,需要有一个自己的函数,处理接到的报文消息,我们看看这个自己函数的处理逻辑:

1、函数输入1IDOC_CONTRL内表,该表存放IDOC相关的控制信息(DOCNUM

2、函数输入2 IDOC_DATA内表,存放IDOC的数据DOCNUM

3、自己程序用上面的数据,保存到自己的表中

4、函数输出: IDOC_STATUS内表,存放这个函数调用完成后的状态和消息

这个函数入口参数的格式是SAP规定好了的,我们只要遵从这些数据格式就可以直接使用,我们仔细看看这个函数的入口和出口参数:

*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD
*"     VALUE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC
*"  EXPORTING
*"     VALUE(WORKFLOW_RESULT) LIKE  BDWF_PARAM-RESULT
*"     VALUE(APPLICATION_VARIABLE) LIKE  BDWF_PARAM-APPL_VAR
*"     VALUE(IN_UPDATE_TASK) LIKE  BDWFAP_PAR-UPDATETASK
*"     VALUE(CALL_TRANSACTION_DONE) LIKE  BDWFAP_PAR-CALLTRANS
*"  TABLES
*"      IDOC_CONTRL STRUCTURE  EDIDC
*"      IDOC_DATA STRUCTURE  EDIDD
*"      IDOC_STATUS STRUCTURE  BDIDOCSTAT
*"      RETURN_VARIABLES STRUCTURE  BDWFRETVAR
*"      SERIALIZATION_INFO STRUCTURE  BDI_SER
*"  EXCEPTIONS
*"      WRONG_FUNCTION_CALLED

为了便于理解,我把何喜同学的标准函数改了一个最简化版的IDOC入站函数,把传入系统的数据(物料和物料描述2个字段,放到自己的表里):

TABLES ZJKT001T.
DATA GS_ZJKT001T LIKE ZJKT001T.


LOOP AT IDOC_DATA.

GS_ZJKT001T = IDOC_DATA-SDATA.
INSERT ZJKT001T FROM GS_ZJKT001T.

 IF SY-SUBRC EQ 0.
      COMMIT WORK AND WAIT .
      IDOC_STATUS-DOCNUM = IDOC_DATA-DOCNUM.
      IDOC_STATUS-STATUS = '53'.
      IDOC_STATUS-MSGTY = 'S'.
      IDOC_STATUS-MSGV1 = '保存数据成功'.
    ELSE.
      ROLLBACK WORK .
      IDOC_STATUS-DOCNUM = IDOC_DATA-DOCNUM.
      IDOC_STATUS-STATUS = '51'.
      IDOC_STATUS-MSGTY = 'E'.
      IDOC_STATUS-MSGV1 = '保存数据错误'.
    ENDIF.

  APPEND IDOC_STATUS TO IDOC_STATUS.

ENDLOOP.

OK,用WE19发一条测试数据,哦,保存到了自己的透明表里。

以上 S4端的IDOC配置完毕。

 

下面我们开始PO上的配置,这是我们的概念图,IDOC是单向的,异步模式,所以我们在常规的同步双向配置中,可以省略好多配置。

有了基本概念,实际配置其实比较简单,我是参考的网上文章:PI-AAE-IDOC(SOAP2IDOC)EC.pdf :

第一步,把S4里的IDOC函数导入进来(这是S4方的数据)

第二步,建DT、MT、SI(这是外围系统方的数据定义):

注意这个outbound概念,我理解了一年时间,终于画出了上面的概念图,至此PO无惑。

第三步,建一个MM、一个OM:

MM这里就是IDOC最麻烦的地方了,参考的网上文章:PI-AAE-IDOC(SOAP2IDOC)EC.pdf,十几个IDOC的控制字段全部要赋值。

OM单向的,这里也要注意,何喜同学配了一天没通也是在这里,注意右边的Target, 需要把从S4引用的IDOC对象,拖过来:

最后在IB里的配置:

S4方的CC接收通道参数:

外围系统方的CC发送通道参数,最节约人天的WebSercice SOAP协议:

最后的IC配置:

全部完成,我们测试一下数据,S4收到了数据,并存到了我们的自定义表中:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘欣的博客

你将成为第一个打赏博主的人!

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

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

打赏作者

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

抵扣说明:

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

余额充值