ABAP传输自定义IDOC实例

您所在的位置:网站首页 abap语言开发报表 ABAP传输自定义IDOC实例

ABAP传输自定义IDOC实例

2024-07-09 23:45| 来源: 网络整理| 查看: 265

首先确定出站方和入站方,本例中我使用150作为发送方将200作为接收方。

发送端系统配置 进入tcode-SALE,点击定义逻辑系统,这里我定义D01CLNT150为发送端,

      D01CLNT200为接收端

2,将逻辑系统分配给对应的client

3,进入tcode-WE31,创建IDOC开发段(segment)这里可以按照实际需求创建想要传输的结构,为求简单我创建了ZKNA1并选取了几个客户主数据的字段作为示例

4,进入tcode-WE30,创建Idoc Type命名为YKNTYPE

  

将上一步创建的segment添加到YKNTYPE下,这里可以为YKNTYPE添加多层结构,本文中仅使用单层结构

5,进入tcode-WE81创建Message Type,这里命名为YKNA1_METYPE

 6,进入tcode-WE82,创建Message Type 与 Idoc Type的对应关系,值得注意的是

Message Type 与 Idoc Type是多对多的关系

7,进入tcode-SM59,创建物理连接,因为出入站均为sap系统所以这里选择ABAP连接

这里创建一个与目的逻辑系统同名的RFC目标-D01CLNT200,依次设置好目标系统服务器和登陆账号后保存设置

测试一下连接是否可用

8,进入tcode-WE21,创建接收端的端口,选择事务性RFC,创建名为TO_CL200的端口

设置RFC目标-D01CLNT200

 9,进入tcode-WE20,创建合作伙伴参数,这一步需要将前面几个步骤的设置整合起来,

 选择逻辑系统类型,添入目标逻辑系统及代理人等参数

 保存后添加伙伴参数,由于目标系统为接收端所以要添加外向型参数

 依次分配目标逻辑系统,Message Type ,目标端口,Idoc Type

 10,创建一个发送程序,该程序通过调用函数MASTER_IDOC_DISTRIBUTE来实现发送IDOC

*&---------------------------------------------------------------------**& Report YN_IDOC_DEMO01*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT YN_IDOC_DEMO01.DATA: LV_ZKNA1 TYPE ZKNA1, "IDoc数据段      LV_EDIDC TYPE EDIDC, "IDoc的控制记录      GT_EDIDC TYPE TABLE OF EDIDC,      GT_EDIDD TYPE TABLE OF EDIDD WITH HEADER LINE. "IDoc的数据记录CLEAR LV_EDIDC.*系统根据下面4行即可与WE20(合作和伴配置文件)设置关联起来LV_EDIDC-MESTYP = 'YKNA1_METYPE'.  "Message TypeLV_EDIDC-IDOCTP = 'YKNTYPE'.       "IDOC TypeLV_EDIDC-RCVPRT = 'LS'.            "接收方类型为逻辑系统LV_EDIDC-RCVPRN = 'D01CLNT200'.    "接收方合作伙伴*添加IDOC节点CLEAR GT_EDIDD.GT_EDIDD-SEGNAM = 'ZKNA1'."段类型GT_EDIDD-DTINT2 = 0.LV_ZKNA1-KUNNR = 'Y000001'."客户LV_ZKNA1-LAND1 = 'CN'.     "国家/地区LV_ZKNA1-ORT01 = 'BEIJING'."城市LV_ZKNA1-NAME1 = '公司A'.  "名称GT_EDIDD-SDATA = LV_ZKNA1. "节点内容APPEND GT_EDIDD.*添加IDOC节点CLEAR GT_EDIDD.GT_EDIDD-SEGNAM = 'ZKNA1'.  "段类型GT_EDIDD-DTINT2 = 0.LV_ZKNA1-KUNNR = 'Y000002'. "客户LV_ZKNA1-LAND1 = 'CN'.      "国家/地区LV_ZKNA1-ORT01 = 'HANGZHOU'."城市LV_ZKNA1-NAME1 = '公司B'.   "名称GT_EDIDD-SDATA = LV_ZKNA1. "节点内容APPEND GT_EDIDD.*添加IDOC节点CLEAR GT_EDIDD.GT_EDIDD-SEGNAM = 'ZKNA1'.  "段类型GT_EDIDD-DTINT2 = 0.LV_ZKNA1-KUNNR = 'Y000003'. "客户LV_ZKNA1-LAND1 = 'CN'.      "国家/地区LV_ZKNA1-ORT01 = 'SHANGHAI'."城市LV_ZKNA1-NAME1 = '公司C'.   "名称GT_EDIDD-SDATA = LV_ZKNA1. "节点内容APPEND GT_EDIDD.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' "发送IDoc   EXPORTING    MASTER_IDOC_CONTROL            = LV_EDIDC "IDoc控制记录   TABLES    COMMUNICATION_IDOC_CONTROL     = GT_EDIDC "接收:用来接收IDoc发送情况    MASTER_IDOC_DATA               = GT_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.   COMMIT WORK.ENDIF.

接收端系统配置

 1,进入tcode-SM59,创建到发送端的物理连接D01CLNT150(与发送端的逻辑系统同名)

2,进入tcode-WE21,创建发送端的端口,

3,创建一个入站处理函数,首先参考标准函数IDOC_INPUT_BBP_IV的参数

创建函数YN_IDOC_PROCESS01,为了看到效果可以直接在代码里打一个外部断点

FUNCTION YN_IDOC_PROCESS01.*"----------------------------------------------------------------------*"*"本地接口:*"  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*"      OTHERS*"----------------------------------------------------------------------*----------------------------------------------------------------------**  this function module is generated                                   **          never change it manually, please!        22.09.1999         **----------------------------------------------------------------------*   DATA: LV_ZKNA1 TYPE ZKNA1. "IDoc数据段   CLEAR IDOC_CONTRL.   READ TABLE IDOC_CONTRL INDEX 1.   IF IDOC_CONTRL-MESTYP  'YKNA1_METYPE'.     RAISE WRONG_FUNCTION_CALLED.   ENDIF.   LOOP AT IDOC_CONTRL.     LOOP AT IDOC_DATA WHERE DOCNUM = IDOC_CONTRL-DOCNUM.      LV_ZKNA1 = IDOC_DATA-SDATA.     ENDLOOP.     "根据数据处理情况设置当前IDoc处理的状态     IF SY-SUBRC = 0.       CLEAR IDOC_STATUS.      IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM."当前正处理的IDoc      IDOC_STATUS-STATUS = '53'. "IDOC处理成功       APPEND IDOC_STATUS.     ELSE.       CLEAR IDOC_STATUS.      IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.      IDOC_STATUS-STATUS = '51'. "IDOC不成功      IDOC_STATUS-MSGTY  = 'E'. "错误信息      IDOC_STATUS-MSGID  = 'YMSG'.      IDOC_STATUS-MSGNO  = '001'.       APPEND IDOC_STATUS.     ENDIF.   ENDLOOP.ENDFUNCTION.

4,进入tcode-BD51,添加入站处理函数,填入上一个步骤的函数名YN_IDOC_PROCESS01

输入类型设置为1

5,进入tcode-WE57,将Message Type和Idoc Type 分配给入站处理函数

6,进入tcode-WE42创建处理代码YCODE01

将入站处理函数分配给处理代码

7,进入tcode-WE20,创建发送端的伙伴参数文件

由于次为发送端的伙伴文件所以要添加内向参数

依次分配发送端的逻辑系统,Message Type,处理代码并保存

测试

 在发送端client进入程序YN_IDOC_DEMO01,如果你在入站处理函数中打了外部断点,执行后会进入断点中,我们可以查看发送过来的数据

也可以进入tcode-BD87跟踪Idoc的状态



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3