ABAP传输自定义IDOC实例 |
您所在的位置:网站首页 › abap语言开发报表 › ABAP传输自定义IDOC实例 |
首先确定出站方和入站方,本例中我使用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 |