IDOC实例, Outbound IDOC

2024-02-26 01:08
文章标签 实例 idoc outbound

本文主要是介绍IDOC实例, Outbound IDOC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简而言之,IDOC是类似XML的一种SAP系统与其他系统的一种集成工具。
假设I04和I02是同一个集团下两个不同子公司的SAP系统,I04需要将其采购订单信息及时发送给I02。下面简单介绍IDOC的设置步骤,为了避免混淆,我的命名都比较特别。
1,设置IDOC Type.
(1) WE31,创建segment,类似于创建XML的结点及结点属性。
这里先输入YPOHEAD,点击创建,在接下来的屏幕中,录入EBELN, BUKRS, BEDAT等字段及他们对应的data element;接着创建YPOITEM,输入EBELN, EBELP, MATNR, MENGE, MEINS等字段及他们对应的data element。
保存后用SE12查看你将发现,系统自动添加了YPOHEAD和YPOITEM两个结构,每个字段都成了CHAR类型,长度就是WE31中的EXPORT LENG。
(2) WE30, 创建IDOC Type,定义结点间的相互逻辑关系.
先输入YPOIDOC,然后点击创建,紧跟着点击create new进入。在主界面中,先点击创建按钮,将YPOHEAD添加,设置Mandatory seg打勾,min = 1, max = 1,代表我们每个IDOC仅包含一张采购订单。然后在YPOHEAD下添加YPOITEM,同样的Mandatory seg打勾,min = 1, max = 99999.
2,创建Message Type.
(1) WE81,创建Message Type.
先切换到编辑状态,然后点击New Entries,输入YPO即可。
(2) WE82,,关联Message Type和IDOC Type.
3,创建到I02的端口.
首先确保系统内已经有到I02的R/3 Connection(SM59),如果没有则先创建一个名为I02001。
接着WE21创建Port,类型TRANSACTIONAL RFC,名为I02PORT,RFC destination则填写I02001。
4,SALE,创建Logical System.
SALE, Sending and Receiving Systems,Logical Systems, define logical systems,新增一个logical system,名为I02LS,这将作为下一步的Partner。
Define logical systems下方,有Assign Client to logical system,这里可针对本系统(I04)定义logical system,作为发送IDOC时的发送方标识,我对Client 001的定义是I04LS.
5,WE20,定义我们的Partner profile.
在PARTNER TYPE为logical system下,创建一个patner no为I02LS的partner,type填写LS。
下面的Permitted agent,填写US(User),Agent为你自己的用户名或某basis人员用户名。
然后,点击outbound下方的加号,创建一个outbound parameter。Message Type为YPO,receiver port为I02PORT,output mode选择transfer idoc immed.,Basic Type填写YPOIDOC,保存即可。
6,编程发送IDOC
设置了这么多,真累啊,总算可以写程序了,是不是很开心呢?
程序的思路就是,把每个IDOC结点按字符串形式逐个添加,而字符串的添加次序自然也体现了IDOC结点间的逻辑关系。代码如下,
DATA: ls_pohead TYPE ypohead,
      ls_poitem TYPE ypoitem,
      ls_edidc TYPE edidc,
      lt_edidc TYPE TABLE OF edidc,
      lt_edidd TYPE TABLE OF edidd WITH HEADER LINE.
CLEAR ls_edidc.
*系统根据下面4行即可与WE20设置关联起来
ls_edidc-mestyp = 'YPO'. "Message Type
ls_edidc-idoctp = 'YPOIDOC'. "IDOC Type
ls_edidc-rcvprn = 'I02LS'. "Partner Number of Recipient
ls_edidc-rcvprt = 'LS'. "Partner Type of Receiver
*添加IDOC结点
CLEAR lt_edidd.
lt_edidd-segnam = 'YPOHEAD'."结点名称
lt_edidd-dtint2 = 0.
CLEAR ls_pohead.
ls_pohead-ebeln = '4001122334'.
ls_pohead-bukrs = '0400'.
ls_pohead-bedat = '20090630'.
lt_edidd-sdata = ls_pohead. "结点内容
APPEND lt_edidd.
CLEAR lt_edidd.
lt_edidd-segnam = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0001'.
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 = 'YPOITEM'.
lt_edidd-dtint2 = 0.
CLEAR ls_poitem.
ls_poitem-ebeln = '4001122334'.
ls_poitem-ebelp = '0002'.
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'
  EXPORTING
    master_idoc_control            = ls_edidc "Export
  TABLES
    communication_idoc_control     = lt_edidc "Import
    master_idoc_data               = lt_edidd "Export
  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.
  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.
7,查看IDOC.

WE05可以查看我们刚刚发送的IDOC, BD87还可对IDOC进行一些处理。

这篇关于IDOC实例, Outbound IDOC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/747257

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP