IDOC 基本步骤(转)

原文链接:https://mp.weixin.qq.com/s/ANGqD3nIKVgQ5SxBbXKbjg

IDOC,配置需要分两部分:

配置发送方

第一步WE31创建段(SEGMENT):ZLM_SMT01

第二步WE30创建IDOC基本类型 :ZLM_IDOC_TYPE1

 

 

第三步WE81创建IDOC消息类型 :ZLM_IDOC_MSG1

第四步WE82关联基本类型和消息类型

第五步SM59创建远程连接     :19TO21

第六步WE21创建端口         :ZLM_PORT01(own port name)   A000000059(generate port name)

 

 

两种都可以,第一种自动生成端口号,第二种自己命名。这里采用第二种,填写端口号和远程连接地址

第七步BD54创建逻辑系统     :ZLM_DEV19  

第八步WE20配置接收方信息:

 

 

 

添加outbound partners后,回车会进入如下:

 

 

 

 到此发送端配置完成,进行接收系统去配置接收端

 

发送端程序:
REPORT  ZLM_IDOC_01.

*&---------------------------------------------------------------------*
*&IDOC控制变量和数据变量定义
*&---------------------------------------------------------------------*
DATA: g_idoc_ctl            LIKE edidc,
      gi_ret_ctl            LIKE edidc OCCURS 0 WITH HEADER LINE,
      gi_idoc_data          LIKE edidd OCCURS 0 WITH HEADER LINE,
      control_record_in     TYPE edidc.

DATA:
      idoc_status            TYPE string.

DATA:
      l_data                TYPE ZLM_SMT01.

*&---------------------------------------------------------------------*
*&控制数据
*&---------------------------------------------------------------------*
g_idoc_ctl-idoctp = 'ZLM_IDOC_TYPE1'. "IDOC TYPE
g_idoc_ctl-mestyp = 'ZLM_IDOC_MSG1'.  "MESSAGE TYPE
g_idoc_ctl-outmod = '2'.              "传输模式

"接收端配置
g_idoc_ctl-rcvprn = 'ZLM_DEV19'.      "接收方的合作伙伴编号
g_idoc_ctl-rcvprt = 'LS'.             "接收方伙伴类型
g_idoc_ctl-rcvpor = 'ZLM_PORT01'.     "接收者端口(SAP 系统,EDI 子系统)

"发送端配置
g_idoc_ctl-sndprt = 'LS'.             "发送方伙伴类型
g_idoc_ctl-sndprn = 'ZLM_DEV21'.      "发送方合作伙伴

*维护数据
gi_idoc_data-segnam = 'ZLM_SMT01'.
gi_idoc_data-dtint2 = 0.

l_data-CARRID       = '11'.
l_data-CONNID       = '12'.
l_data-COUNTRYFR    = '13'.
MOVE l_data TO gi_idoc_data-sdata.
APPEND gi_idoc_data.

*&---------------------------------------------------------------------*
*&分发程序
*&---------------------------------------------------------------------*
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
  EXPORTING
    master_idoc_control            = g_idoc_ctl
  TABLES
    communication_idoc_control     = gi_ret_ctl
    master_idoc_data               = gi_idoc_data
  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 'IDOC distribute error' TYPE 'I'.
ELSE.
  READ TABLE gi_ret_ctl INDEX 1.
  IF sy-subrc = 0.
    CONCATENATE 'STATUS' gi_ret_ctl-status INTO idoc_status.            "发送成功状态是30
    MESSAGE idoc_status TYPE 'I'.
    COMMIT WORK.
    CALL FUNCTION 'DEQUEUE_ALL'.
  ENDIF.
ENDIF. 

 

 

配置接收方

第一步WE31创建段(SEGMENT):ZLM_SMT01(field字段跟发送端一致)

第二步WE30创建IDOC基本类型 :ZLM_IDOC_TYPE1

 

 

 

 

第三步WE81创建IDOC消息类型 :ZLM_IDOC_MSG1

第四步WE82关联基本类型和消息类型

第五步WE37创建接受函数     :ZLM_IDOC_RECIVER01(输入输出参数是固定的,从任意一个接收函数copy下就行)

 

 

 

 

第六步BD51注册函数

第七步WE57关联函数和基本类型消息类型

第八步WE42创建inbound press code:ZLM_IDOC_PROCESS1

 

 

第九步BD54创建逻辑系统     :ZLM_DEV21

第十步WE20配置发送方信息:

 

 

 

 

 到此,接收端配置完成

接收端Function

FUNCTION ZLM_IDOC_RECIVER01.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD OPTIONAL
*"     VALUE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC OPTIONAL
*"  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 OPTIONAL
*"      IDOC_DATA STRUCTURE  EDIDD OPTIONAL
*"      IDOC_STATUS STRUCTURE  BDIDOCSTAT OPTIONAL
*"      RETURN_VARIABLES STRUCTURE  BDWFRETVAR OPTIONAL
*"      SERIALIZATION_INFO STRUCTURE  BDI_SER OPTIONAL
*"----------------------------------------------------------------------

  DATA:
        l_wa_idoc_data   like edidd.
  DATA:
        l_data           LIKE ZLM_SMT01.                                "WE31配置的那个机构 
 
  LOOP AT IDOC_CONTRL.
    LOOP AT IDOC_DATA into l_wa_idoc_data WHERE docnum = IDOC_CONTRL-docnum.
       "虽然l_wa_idoc_data-SDATA是没结构的,这样赋值后就成有结构的数据了
       l_data = l_wa_idoc_data-SDATA.
    ENDLOOP.

  ENDLOOP.


  COMMIT WORK.
  CLEAR IDOC_STATUS.
  IDOC_STATUS-docnum = IDOC_CONTRL-docnum.
  IDOC_STATUS-status = '53'.
  IDOC_STATUS-msgty  = 'S'.
  IDOC_STATUS-msgid  = '00'.
  IDOC_STATUS-msgno  = '398'.
  IDOC_STATUS-msgv1  = 'idoc'.
  IDOC_STATUS-msgv2  = 'successfully processed'.

  APPEND IDOC_STATUS.


ENDFUNCTION.

可以在这里打外部断点,然后在执行发送程序

 

 

查看发送状态:

WE05

接收方:

 

 

 发送方:

 

 原文链接:https://mp.weixin.qq.com/s/ANGqD3nIKVgQ5SxBbXKbjg

posted @ 2020-06-15 08:58  不渡之人  阅读(622)  评论(0)    收藏  举报