ABAP IDOC

IDoc(intermediate(媒介)document)是一种系统间通用的数据交换格式,通过IDoc接口可以实现SAP系统之间以及SAP系统与其他系统之间的数据交换。

IDoc(Intermediate Document,中转文档)是SAP提供的系统整合专用的数据/消息格式,它通过ALE方式来进行交换,而SAP就是IDoc提供了EDI的支持,你也可以把IDoc认为是EDI的一个实现。

 

基于IDoc的应用技术有:

ALE:多用于同一个企业中不同SAP系统之间的数据交换,通过IDoc格式的数据创建分布式系统

ALE(Application Link and Enabling)是SAP专门为SAP与SAP之间所设计的整合中间件。ALE从SAP 3.0版本开始就作为SAP整个应用体系的一部分,分布式数据交换提供了可靠安全的通讯机制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务,使SAP与SAP的业务流程之间数据能够有效的交换,为两个独立的SAP系统提供整合服务。不过随着应用的发展,ALE接口机制也成为了其它非SAP系统的标准整合方式。

EDI(electronic data exchange,电子数据交换):用于实现不同企业间的电子数据交换

EDI(Electronic Document Interchange,电子数据交换)其实就是采用标准格式的电子数据,用于在通讯网络中在业务伙伴间交换业务文档所用。你可这样理解EDI,就是大家都按相同的排列放置数据到一个数据文档中,并按相同的排列解析此文档以得到所需的内容。 EDI又被叫做无纸化交换。

 

SAP提供了一个事务码列出IDoc相关的事务码,即wedi

IDOC的开发包含几个部分:idoc basic type的开发、message type的开发,他们之间的关联,然后还有各种配置

首先是端口配置,端口配置好,数据才能通过端口传输出去。

1.创建发送端接口配置(Logical System)(SALE)

2.分配逻辑系统

同理为接收端创建对应的逻辑系统并分配到集团(逻辑系统一般不用自己创建,因为系统间有自带的IDOC,所以可以用系统的逻辑系统)

 

IDOC开发

1、idoc basic type的开发:      

首先要WE31去创建idoc segment(一般还是去参考原来标准的字段类型)

填入相关信息后保存

 

保存后会在系统中创建该段对应的结构(SE11)

同理创建明细数据段

创建segment之后(一般建议使用标准的segment)WE30创建idoc type:

同样操作追加明细数据(明细数据可以有多,所以传输数据条数就不要设定为1了)(当然头数据也可以一次传输多条,这里只是以一条为实例)

2、段和IDOC类型完成后,进行message type的开发:       WE81去创建message type:

并不是一个消息类型对应一个idoc类型,只要合适,多个idoc类型可以共用一个消息类型

3、idoc type和message type关联:  把上面创建的idoc type或者是idoc extension  和创建的message type通过WE82去链接起来:

释放:参考系统的填写就行。

4.在发送端创建接收端物理连接配置信息RFC Destination(SM59)

同理也需要在接收端创建发送端的物理连接配置信息

5.创建接收端端口信息(WE21)

同理需要在接收端创建发送端的端口信息

4.创建接收端合作伙伴配置文件(WE20)

伙伴角色可不填(此处填上只是试一试区别)

创建IDOC程序(此处引用大神的)

REPORT ZWGRE0001.


DATA: ls_pohead TYPE zpohead,"IDoc数据段:头
      ls_poitem TYPE zpoitem,"IDoc数据段:Item
      ls_edidc TYPE edidc,"IDoc的控制记录
      lt_edidc TYPE TABLE OF edidc,
      lt_edidd TYPE TABLE OF edidd WITH HEADER LINE."IDoc的数据记录
CLEAR ls_edidc.
*系统根据下面4行即可与WE20(合作和伴配置文件)设置关联起来
ls_edidc-mestyp = 'YZ_PO_MSG_TYP'. "Message Type
ls_edidc-idoctp = 'ZPOID001'. "IDOC Type
ls_edidc-rcvprn = 'Z800LS'. "partner Number of Recipient接收方合作伙伴
ls_edidc-rcvprt = 'LS'.      "partner Type of Receiver接收方类型为逻辑系统

*添加IDOC节点
CLEAR lt_edidd.
lt_edidd-segnam = 'YZHEAD'."头节点
lt_edidd-dtint2 = 0.
CLEAR ls_pohead.
ls_pohead-ebeln = '4001122334'."采购单号
ls_pohead-bukrs = '1000'."公司代码
ls_pohead-bedat = '20090630'."日期
lt_edidd-sdata = ls_pohead. "节点内容:ls_pohead结构中的数据最后被拼接成字符串再赋值给lt_edidd-sdata,最大长度不能超过1000
APPEND lt_edidd.

CLEAR lt_edidd.
lt_edidd-segnam = 'YZITEM'."Item节点
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'."采购单号
ls_poitem-ebelp = '0001'."Item行号
ls_poitem-matnr = '000000000000004527'."物料号
ls_poitem-menge = '3'."数量
ls_poitem-meins = 'ST'."单位
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd.

CLEAR lt_edidd.
lt_edidd-segnam = 'YZITEM'."Item节点
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'."采购单号
ls_poitem-ebelp = '0002'."Item行号
ls_poitem-matnr = '000000000000009289'."物料号
ls_poitem-menge = '5'."数量
ls_poitem-meins = 'M'."单位
lt_edidd-sdata = ls_poitem.
APPEND lt_edidd.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'"发送IDoc
  EXPORTING
    master_idoc_control            = ls_edidc "IDoc控制记录
  TABLES
    communication_idoc_control     = lt_edidc "接收:用来接收IDoc发送情况
    master_idoc_data               = lt_edidd "IDoc数据记录
  EXCEPTIONS"
    error_in_idoc_control          = 1
    error_writing_idoc_status      = 2
    error_in_idoc_data             = 3
    sending_logical_system_unknown = 4
    OTHERS                         = 5.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.

  CALL FUNCTION 'DB_COMMIT'.
  CALL FUNCTION 'DEQUEUE_ALL'.
  COMMIT WORK AND WAIT.

  CALL FUNCTION 'EDI_DOCUMENT_DEQUEUE_LATER'
    EXPORTING
      DOCNUM                       = ls_edidc-docnum
*     SYNCHRON                     = ' '
*   EXCEPTIONS
*     IDOC_IS_NOT_TO_DEQUEUE       = 1
*     OTHERS                       = 2
            .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

  WRITE: 'Idoc sent:'.
  LOOP AT lt_edidc INTO ls_edidc.
    NEW-LINE.
    WRITE: 'Idoc number is', ls_edidc-docnum,
           '; receiver partner is', ls_edidc-rcvprn,
           '; sender partner',ls_edidc-sndprn.
  ENDLOOP.
ENDIF.

创建入站处理函数RFC

 

注册入站处理函数(BD51)

将入站函数与IDOC Type/Message Type关联(WE57)

创建入站函数CODE(WE42)

创建发送端合作伙伴配置文件(WE20)

 

  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值