目录

1需求场景    4

2配置发送端IDOC    4

2.1定义段(WE31)    4

2.2定义基本类型(WE30)    4

2.3定义消息类型(WE81)    5

2.4定义传输结构    5

2.5创建RFC目标(SM59)    6

2.6创建接收端端口(WE21)    6

2.7配置发送端逻辑系统(SALE)    7

2.8分配逻辑系统    7

2.9维护分布模型和视图    8

2.10发送端程序    12

3配置接收端IDOC    14

3.1创建接收端RFC目标(SM59)    14

3.2创建接收端的端口(WE21)    14

3.3定义逻辑系统并分配集团(SALE)    14

3.4创建接收端程序    14

3.5注册入站处理函数(BD51)    16

3.6将入站函数与基本类型/消息类型关联(WE57)    16

3.7创建进站处理代码(WE42)    16

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

4测试IDOC    17

 1需求场景

可以通过配置IDOC,在相同系统不同客户端之间传输数据,也可以在不同SAP系统中传输数据。

2配置发送端IDOC

2.1定义段(WE31)

1.定义段类型,包含需要传输的字段

2.创建成功后设置批准

2.2定义基本类型(WE30)

1.创建开发对象

2.将段维护到基本类型

2.3定义消息类型(WE81)

1. 定义消息类型

2.WE82把基本类型分配给消息类型

2.4定义传输结构

1.定义一个表类型

2.定义行类型

2.5创建RFC目标(SM59)

1. 创建RFC目标连接

2输入目标系统账户名密码

2.6创建接收端端口(WE21)

2.7配置发送端逻辑系统(SALE)

1. 定义逻辑系统

2.8分配逻辑系统

1. 将逻辑系统分配到集团

在发送端不需要分配300逻辑系统到集团,但是300逻辑系统需要在接收端配置时分配

输入城市、逻辑系统、货币保存

2.9维护分布模型和视图

创建模型视图

双击检查该维护系统是否正确

添加消息类型

点击生成合作伙伴参数文件

生成成功

点击更改参数文件

2.10发送端程序

1. 创建一个接口,用于程序调用,发送IDOC数据到目标系统

2.源代码

FUNCTION zmakt_idoc_send.

*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" ZTMAKT TYPE ZTMAKT OPTIONAL
*" EXCEPTIONS
*" NO_IDOC
*" NO_MODEL
*"----------------------------------------------------------------------
*常规变量
DATA:
*IDoc的控制记录
idoc_control LIKE edidc,
*IDoc的数据记录
t_idoc_data LIKE edidd OCCURS WITH HEADER LINE,
*MASTER_IDOC_CONTROL创建的IDoc的表
t_comm_control LIKE edidc OCCURS WITH HEADER LINE,
*逻辑系统的伙伴类型
c_partner_type_logical_system LIKE edidc-rcvprt,
*帮助变量检查是否必须创建IDoc
h_create_idoc.
* 特定的变量
DATA:
* IDoc段结构
zsmakt TYPE zsmakt,
* 要输入控制记录的数据
c_message_type LIKE edidc-mestyp VALUE 'ZMAKTMAS',
c_base_idoc_type LIKE edidc-idoctp VALUE 'ZMAKT_TYPE',
* 段类型
c_header_segtyp LIKE edidd-segnam VALUE 'ZMAKT'. CLEAR:zsmakt.
zsmakt-matnr = ''.
zsmakt-maktx = '测试物料描述'.
APPEND zsmakt TO ztmakt. * 检查这个IDOC是否被创建,读取组件
CALL FUNCTION 'ALE_MODEL_DETERMINE_IF_TO_SEND'
EXPORTING
message_type = c_message_type
* SENDING_SYSTEM = ' '
* RECEIVING_SYSTEM = ' '
* VALIDDATE = SY-DATUM
IMPORTING
idoc_must_be_sent = h_create_idoc.
* exceptions
* own_system_not_defined = 1
* others = 2.
IF h_create_idoc IS INITIAL.
RAISE no_model.
* no message flow maintained in the model, nothing to do
EXIT.
ENDIF.
* 将表头放入IDOC
LOOP AT ztmakt.
MOVE-CORRESPONDING ztmakt TO zsmakt.
* 将记录添加到IDOC数据表
t_idoc_data-segnam = c_header_segtyp.
t_idoc_data-sdata = zsmakt.
APPEND t_idoc_data.
ENDLOOP.
idoc_control-mestyp = c_message_type.
idoc_control-idoctp = c_base_idoc_type.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
* 在更新任务中"如果应用程序文档在更新任务中发布
EXPORTING
master_idoc_control = idoc_control
TABLES
communication_idoc_control = t_comm_control
master_idoc_data = t_idoc_data
EXCEPTIONS
error_in_idoc_control =
error_writing_idoc_status =
error_in_idoc_data =
sending_logical_system_unknown =
OTHERS = .
COMMIT WORK.
READ TABLE t_comm_control INDEX .
IF sy-subrc <> .
RAISE no_idoc.
* no IDoc was created, you can react here, if neccessary
ENDIF.
ENDFUNCTION.

3配置接收端IDOC

以上配置都是在200系统(源系统)中配置,以下配置都是在300系统(目标系统)中配置

该文档记录的是在同一服务器的不通客户端传输数据,又由于段类型、基本类型、消息类型都是跨Client的,所以2.1 、2.2 、2.3不需要在300系统再次配置了(但如果不是在同一服务器上,则需要像上面那样进行配置)

3.1创建接收端RFC目标(SM59)

与发送端一致,可参考上边操作,关联上发送端的目标地址和实例号

3.2创建接收端的端口(WE21)

参照2.6

3.3定义逻辑系统并分配集团(SALE)

参照2.7 、2.8

3.4创建接收端程序

这个函数的参数接口是有规范的,可以从IDOC_INPUT_BBP_IV这些标准函数拷贝参数接口部分

源代码部分:

FUNCTION ZIDOC_PO_PROCESS.
*"----------------------------------------------------------------------
*"*"本地接口:
*" 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
*"----------------------------------------------------------------------
DATA: zsmakt TYPE zsmakt. CLEAR idoc_contrl.
READ TABLE idoc_contrl INDEX .
IF idoc_contrl-mestyp <> 'ZMAKTMAS'.
RAISE wrong_function_called.
ENDIF.
LOOP AT idoc_contrl.
LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.
"直接将字符赋值给结构,贬值过程中会按照结构中的字段长度来划分各字段
zsmakt = idoc_data-sdata.
WRITE: / 'Head',zsmakt. "此处直接把收到的数据打印出来
ENDLOOP.
"根据数据处理情况设置当前IDoc处理的状态
IF = .
CLEAR idoc_status.
idoc_status-docnum = idoc_contrl-docnum."当前正处理的IDoc
idoc_status-status = ''. "IDOC处理成功
APPEND idoc_status.
ELSE.
CLEAR idoc_status.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = ''. "IDOC不成功
idoc_status-msgty = 'E'. "错误信息
idoc_status-msgid = 'YMSG'.
idoc_status-msgno = ''.
APPEND idoc_status.
ENDIF.
ENDLOOP.
ENDFUNCTION.

3.5注册入站处理函数(BD51)

3.6将入站函数与基本类型/消息类型关联(WE57)

3.7创建进站处理代码(WE42)

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

1. 创建合作伙伴类型,添加进站消息类型

双击消息类型

4测试IDOC

1.运行程序,调用发送端接口,执行成功之后,运行事务代码BD87查看结果。如果未黄灯,可以点击处理,再次执行。

2.在接收程序里面打上断点,处理接收的IDOC,发现进入断点,数据也传输过去了

自定义IDOC的更多相关文章

  1. IDoc

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. [SAP ABAP开发技术总结]IDoc

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. ABAP开发顾问必备:SAP ABAP开发技术总结

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. ABAP-IDOC配置

    转载路径: http://www.cnblogs.com/jiangzhengjun/p/4292135.html#_Toc411677431 https://wenku.baidu.com/view ...

  5. ABAP开发顾问必备:SAP ABAP开发技术总结[转载]

    转载自SAP师太技术博客,原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 在原文上增加了链接,此文及此文的链接版权都归SAP师太所有. ...

  6. UI与开发的必备神器!— iDoc一键适配不同平台尺寸(iDoc201902-2新功能)

    一.自动换算不同平台尺寸在一个项目从设计到开发的过程中,为了适配不同设备,一份设计稿,UI需要花大量的时间去制作各种尺寸的切图,耗时耗力. 那有没有一种高效的办法,让UI只需要设计一份设计稿就可以了呢 ...

  7. 摹客 iDoc 12月上半月新功能点评

    转眼就到了2018年的最后一个月,小伙伴们是不是都在奋力拼搏做年底的冲刺呢?摹客也没有放慢脚步,不断地优化,给大家带来一个又一个的惊喜.那么,让小摹来带大家看看12月摹客iDoc更新了哪些特色功能: ...

  8. java 文档自动生成的神器 idoc

    写文档 作为一名开发者,每个人都要写代码. 工作中,几乎每一位开发者都要写文档. 因为工作是人和人的协作,产品要写需求文档,开发要写详细设计文档,接口文档. 可是,作为一个懒人,平时最讨厌的一件事情就 ...

  9. 关于Unity3D自定义编辑器的学习

    被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做).  刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...

随机推荐

  1. stand up meeting 1/15/2016 && work of weekend 1/16/2016~1/17/2016

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  组内对生词卡片又重新进行了讨论:准备最后的发布和整个开发的整理 ...

  2. [转]PHP利用PCRE回溯次数限制绕过某些安全限制

    这次Code-Breaking Puzzles中我出了一道看似很简单的题目pcrewaf,将其代码简化如下: <?php function is_php($data){ return preg_ ...

  3. [PHP][thinkphp5] 学习三:函数助手实例说明

    来源:http://blog.csdn.net/lunsunhuan1825/article/details/71086487 load_trait:快速导入Traits,PHP5.5以上无需调用 / ...

  4. [PHP] 文件创建、写入、读取

    创建$p = fopen('text.txt','a+b'); 写入第一种方式//var_export方式存储数组到文件中 //这中方式存浮点型数据,存储后会多很多数字!只适合简单的存储吧!我感觉! ...

  5. Spring5:控制反转

    二.Spring IOC控制反转 1:IOC推导 >传统业务调用编程 定义一个userDao接口:UserDao package com.spring; public interface Use ...

  6. 痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法. 痞子衡最近在深耕i.MXRT1170这颗划时代的 ...

  7. xpath爬虫实战-爬取小说斗罗大陆第四部

    爬取思路 用到的第三方库文件 lxml,requests,fake_agent 用fake_agent里的UserAgent修饰爬虫 用requests进行基本的请求 用lxml进行html的分析 用 ...

  8. thinkphp5 csv格式导入导出(多数据处理)

    关于csv文件格式的导出导入个人见解 先上代码: <?php namespace think; class Csv { /** * 导出csv文件 * @param $list 数据源 * @p ...

  9. [函数] PHP取二进制文件头快速判断文件类型

    一般我们都是按照文件扩展名来判断文件类型,但其实不太靠谱,因为可以通过修改扩展名来伪装文件类型.其实我们可以通过读取文件信息来识别,比如 PHP扩展中提供了类似 exif_imagetype 这样的函 ...

  10. MySQL系列(二)

    查看\创建\使用\删除 数据库 用户管理及授权实战 局域网远程连接法 查看\创建\使用\删除\清空\修改 数据库表(是否可空,默认值,主键,自增,外键) 表内容的增删改查 where条件.通配符_%. ...