IDOC创建、发送、接收及程序代码

合集下载

单片机IO口模拟串口程序(发送+接收)

单片机IO口模拟串口程序(发送+接收)

单片机IO口模拟串口程序(发送+接收)前一阵一直在做单片机的程序,由于串口不够,需要用10 口来模拟出一个串口。

经过若干曲折并参考了一些现有的资料,基本上完成了。

现在将完整的测试程序,以及其中一些需要总结的部分贴出来。

程序硬件平台:11.0592M 晶振,STC 单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用P2.1作为发送端* 把单片机中存放的数据通过P2.1作为串口TXD 发送出去***************************************************************/#in elude #i nclude #in clude typedef unsigned char uchar; int i;uchar code in fo[]= {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x 55,0x55,0x55,0x5 5 };// SCON: serail mode 1,8-bit UART // T0工作在方式1,十六位定时 // SMOD=1;0xFE; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz TL0 = 0x7F; II 2400bps fosc=11.0592MHz II TH0= 0xFD; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=18.432MHzII TL0 = 0x7F; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=18.432MHz }void WaitTF0( void ) {sbit n ewTXD = P2A 1;〃模拟串口的发送端设为 P2.1 void Uartlnit() {SCON = 0x50; TMOD |= 0x21;PCON |= 0x80; TH0 定时器0初始值,延时417us ,目的是令模拟串口的波特率为TFO=O; THO=OxFE; // 定时器重装初值fosc=11.0592MHz TL0=0x7F; // 定时器重装初值 fosc=11.0592MHzvoid WByte(uchar in put) {//发送启始位 uchar j=8; TR0=1; newTXD=(bit)O; WaitTF0();//发送8位数据位 while (j--) {newTXD=(bit)(i nput&0x01); WaitTF0(); in put= in put>>1; } //发送校验位(无) //发送结束位n ewTXD=(bit)1; WaitTF0(); TR0=0; }void Sendata() {for (i=0;i<="">WByte(i nfo[i]); } }void main() {UartI nit(); while (1) {// TH0 =0xFD; //TL0=0x7F;// }// 定时器重装初值fosc=18.432MHz 定时器重装初值fosc=18.432MHz//先传低位//外层循环,遍历数组}}II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II IIa a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a/************************************************************** ** 模拟接收程序,这个程序的作用从模拟串口接收数据,然后将这些数据发送到实际串口* 在单片机上模拟了一个串口,使用P3.2作为发送和接收端* 以P3.2模拟串口接收端,从模拟串口接收数据发至串口*************************************************************** /#in elude#i nclude#in cludetypedef unsigned char uchar ;//这里用来切换晶振频率,支持11.0592MHz 和18.432MHz//#defi ne F18_432#defi ne F11_0592uchar tmpbuf2[64]={0};//用来作为模拟串口接收数据的缓存struct{uchar recv :6 ;//tmpbuf2 数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中uchar send :6 ;//tmpbuf2 数组下标,用来将tmpbuf2中的数据发送到串口}tmpbuf2_poi nt={0,0};sbit newRXD=P3A2 ; //模拟串口的接收端设为P3.2void Uartl nit(){SCON=0x50 ; // SCON: serail mode 1, 8-bit UARTTMOD|=0x21 ; // TMOD: timer 1, mode 2, 8-bit reload, 自动装载预置数(自动将TH1 送到TL1);T0工作在方式1,十六位定时PCON|=0x80 ;// SMOD=1;#ifdef F11_0592TH1=0xE8 ; // Baud:2400 fosc=11.0592MHz 2400bps 为从串口接收数据的速率TL1=0xE8 ;//计数器初始值,fosc=11.0592MHz 因为TH1 一直往TL1送,所以这个初值的意义不大THO=OxFF ;//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bpsfosc=11.0592MHzTL0=0xA0 ; //定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bps fosc=11.0592MHz#en dif#ifdef F18_432TH 仁0xD8 ; // Baud:2400 fosc=18.432MHz 2400bps 为从串口接收数据的速率TL1=0xD8 ; // 计数器初始值,fosc=18.432MHz 因为TH1 一直往TL1送,所以这个初值的意义不大TH0=0xFF ; //定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bps fosc=18.432MHzTL0=0x60 ;//定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bps fosc=18.432MHz#en difIE|=0x81 ;//中断允许总控制位EA=1;使能外部中断0TF0=0 ;IT0=1 ;//设置外部中断0为边沿触发方式TR1=1 ;//启动TIMER1,用于产生波特率}void WaitTF0( void ){while (!TF0);TF0=0 ;#ifdef F11_0592TH0=0xFF ; // 定时器重装初值模拟串口的波特率为9600bps fosc=11.0592MHz TL0=0xA0 ; // 定时器重装初值模拟串口的波特率为9600bps fosc=11.0592MHz #en dif#ifdef F18_432TH0=0xFF ;//定时器重装初值fosc=18.432MHzTL0=0x60 ;//定时器重装初值fosc=18.432MHz#en dif}//接收一个字符uchar RByte(){uchar Output=0 ;#ifdef F11_0592THO=OxFF ; //定时器重装初值 TLO=OxAO ; // 定时器重装初值#en dif #ifdef F18_432TH0=0xFF ; // 定时器重装初值fosc=18.432MHzTL0=0x60 ;// 定时器重装初值 fosc=18.432MHz #en difTF0=0 ;WaitTF0(); //等过起始位 //接收8位数据位 while (i--) {Output>>=1 ;if (newRXD)0utput|=0x80 ; // 先收低位WaitTF0(); //位间延时}TR0=0 ; // 停止 Timer0 return Output ; }//向COM1发送一个字符void Sen dChar(uchar byteToSe nd) {SBUF=byteToSe nd ; while (!TI); TI=0 ; }void mai n() {UartI nit(); while (1) {if (tmpbuf2_point.recv!=tmpbuf2_point.send) //差值表示模拟串口接收数据缓存中还有多少个字节的数据未被处理(发送至串口){Sen dChar(tmpbuf2[tmpbuf2_poi nt.se nd++]);uchar i=8 ; TR0=1 ;// 启动 TimerO模拟串口的波特率为 9600bps fosc=11.0592MHz 模拟串口的波特率为 9600bps fosc=11.0592MHz}}}//夕卜部中断0,说明模拟串口的起始位到来了void Simulated_Serial_Start()interrupt 0{EX0=0 ; //屏蔽外部中断0tmpbuf2[tmpbuf2_point.recv++]=RByte(); // 从模拟串口读取数据,存放到tmpbuf2 数组中IE0=0 ; //防止外部中断响应2次,防止外部中断函数执行2次EX0=1 ; //打开外部中断0}以上是两个独立的测试程序,分别是模拟串口发送的测试程序和接收的测试程序上面两个程序在编写过程中参考了这篇文章《51单片机模拟串口的三种方法》(在后文中简称《51》),但在它的基础上做了一些补充,下面是若干总结的内容:1、《51》在接收数据的程序中,采用的是循环等待的方法来检测起始位(见《51》的附:51 10 口模拟串口通讯C源程序(定时器计数法)”部分),这种方法在较大程序中,可能会错过起始位(比如起始位到来的时候程序正好在干别的,而没有处于判断起始位到来的状态),或者一直在检测起始位,而没有办法完成其他工作。

JCO2.0 IDOC(ECC为Outbound)

JCO2.0 IDOC(ECC为Outbound)

一:ECC配置1:先在ECC配置一OUTBOOUND的IDOC: TEST001 1):IDOC 段类型:ZTEST001_HEADIDOC 段类型:ZTEST001_ITEM2):IDOC其本类型:ZTEST0013):DIOC TYPE :TEST0012:逻辑系统、合作伙伴类型LS配置根据PI中业务系统的名称在ECC中配置一个同名的逻辑系统BS_TEST01WE20创建设同名合作伙伴类型LS BS_TEST013:SM59配置RFC连接ZJCO_IDOC_0024:WE21配置端口 A000000003填入刚才配置的RFC连接5:在合作伙伴类型LS “BS_TEST01”配置IDOC“ZTEST001”的出参信息出站参数中加入IDOC ZTEST001维护接收方端口和IDOC基本类型6:发送IDOC的程序代码REPORT ZTESTCHEN005.DATA: G_IDOC_CTL LIKE EDIDC.DATA: GI_RET_CTL LIKE EDIDC OCCURS 0,GI_IDOC_DATA TYPE TABLE OF EDIDD WITH HEADER LINE.DATA: WA_HEAD TYPE ZTEST001_HEAD.DATA: WA_ITEM TYPE ZTEST001_ITEM.DATA: IT_ITEM LIKE STANDARD TABLE OF WA_ITEM.TYPES: BEGIN OF TYP_EKPO,EBELN TYPE EKPO-EBELN,EBELP TYPE EKPO-EBELP,TXZ01 TYPE EKPO-TXZ01,MATNR TYPE EKPO-MATNR,WERKS TYPE EKPO-WERKS,LGORT TYPE EKPO-LGORT,MENGE TYPE EKPO-MENGE,MEINS TYPE EKPO-MEINS,END OF TYP_EKPO.DATA: WA_EKPO TYPE TYP_EKPO,IT_EKPO LIKE STANDARD TABLE OF WA_EKPO.PARAMETERS: P_EBELN TYPE EKKO-EBELN OBLIGATORY.PERFORM BUILD_IDOC_CTL.PERFORM BUILD_IDOC_SEG.PERFORM CREATE_IDOC.*&------------------------------------------------------------------* *& Form CREATE_IDOC*&------------------------------------------------------------------* * textFORM CREATE_IDOC.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'EXPORTINGMASTER_IDOC_CONTROL = G_IDOC_CTLTABLESCOMMUNICATION_IDOC_CONTROL = GI_RET_CTLMASTER_IDOC_DATA = GI_IDOC_DATAEXCEPTIONSERROR_IN_IDOC_CONTROL = 1ERROR_WRITING_IDOC_STATUS = 2ERROR_IN_IDOC_DATA = 3SENDING_LOGICAL_SYSTEM_UNKNOWN = 4OTHERS = 5.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ELSE.COMMIT WORK.ENDIF.ENDFORM. " CREATE_IDOC*&------------------------------------------------------------------* *& Form BUILD_IDOC_CTL*&------------------------------------------------------------------* * text*-------------------------------------------------------------------* * --> p1 text* <-- p2 text*-------------------------------------------------------------------* FORM BUILD_IDOC_CTL.* TYPEG_IDOC_CTL-IDOCTP = 'ZTEST001'. "IDOC TYPEG_IDOC_CTL-MESTYP = 'ZTEST001'. "MESSAGE TYPE* RECEIVERG_IDOC_CTL-RCVPRT = 'LS'. "PARTNER TYPEG_IDOC_CTL-RCVPRN = 'BS_TEST01'. "PARTNER NOG_IDOC_CTL-RCVPOR = 'A000000003'. "PORT* SENDERG_IDOC_CTL-SNDPRT = 'LS'. "PARTNER TYPEG_IDOC_CTL-SNDPRN = 'ECDCLNT300'. "PARTNER NO* G_IDOC_CTL-SNDPOR = ''. "PORTENDFORM. " BUILD_IDOC_CTL*&------------------------------------------------------------------* *& Form BUILD_IDOC_SEG*&------------------------------------------------------------------* FORM BUILD_IDOC_SEG.DATA: L_COUNT TYPE I.CLEAR: L_COUNT.* HEAD DATAGI_IDOC_DATA-SEGNAM = 'ZTEST001_HEAD'. "SEGMENT NAME ADD 1 TO L_COUNT.GI_IDOC_DATA-SEGNUM = L_COUNT. "SEGMENT NO SELECT SINGLE *FROM EKKOINTO CORRESPONDING FIELDS OF WA_HEADWHERE EBELN EQ P_EBELN.MOVE WA_HEAD TO GI_IDOC_DATA-SDATA.APPEND GI_IDOC_DATA.SELECT *FROM EKPOINTO CORRESPONDING FIELDS OF TABLE IT_EKPOWHERE EBELN EQ P_EBELN.LOOP AT IT_EKPO INTO WA_EKPO.* ITEM DATAGI_IDOC_DATA-SEGNAM = 'ZTEST001_ITEM'. "SEGMENT NAME ADD 1 TO L_COUNT.GI_IDOC_DATA-SEGNUM = L_COUNT. "SEGMENT NO MOVE-CORRESPONDING WA_EKPO TO WA_ITEM.MOVE WA_ITEM TO GI_IDOC_DATA-SDATA.APPEND GI_IDOC_DATA.ENDLOOP.ENDFORM. " BUILD_IDOC_SEG二:Jar文件下载和Eclipse实现到/connectors中下载如下Jar文件1:sapjco21P_10-100022432:sapjbidoc10P_5-200072993:sapjcoidoc10P_9-20007299下载完成后在Eclipse的工程中引用刚才下载的Jar文件创建JCoIDocSample3类JCoIDocSample3类代码如下:import com.sap.mw.idoc.*;import com.sap.mw.idoc.jco.*;import com.sap.mw.jco.*;import com.sap.mw.idoc.jco.JCoIDoc.*;import com.sap.mw.idoc.jco.JCoIDoc.SAPRepository;import java.io.*;public class JCoIDocSample3implements JCO.ServerExceptionListener{/** Formatter for timestamp strings. */private static final java.text.SimpleDateFormat timestampFormat= new java.text.SimpleDateFormat("yyyyMMddHHmmss");/** Path to write the incoming data. */private static String incomingPath = "c:\\Temp\\";/** Default constructor. */public JCoIDocSample3(){}//constructor JCoIDocSample3/*** Class MyIDocServer is for receiving IDocs and function requests. * The reason for implementing the class as an inner class of the sample * program is only to keep all the sample source code within one file. */public static class MyIDocServerextends JCoIDoc.Server{/*** Overridden constructor of JCoIDoc.Server.* Choose the constructors that one would like to make public. */public MyIDocServer(String gwhost, String gwserv, String progid, IRepository jcoRepository, IDoc.Repository idocRepository){super(gwhost, gwserv, progid, jcoRepository, idocRepository); }//constructor MyIDocServer/*** Overridden constructor of JCoIDoc.Server.* Choose the constructors that one would like to make public. */public MyIDocServer(java.util.Properties properties,IRepository jcoRepository, IDoc.RepositoryidocRepository){super(properties, jcoRepository, idocRepository);}//constructor MyIDocServer/*** Overridden method of JCoIDoc.Server.* Function requests that do not contain IDocs will be handled here. * These requests will be stored as XML file in the incoming path. * No other action will be done. The return values won't be filled and* no exception will be thrown to the caller.*/protected void handleRequest(JCO.Function function){System.out.println("Incoming function request '" +function.getName() + "'...");String filename = function.getName() + "_" +timestampFormat.format(new java.util.Date()) + ".xml";System.out.println("Storing function request as XML file '"+ filename + "'...");function.writeXML(incomingPath + filename);}//method handleRequest/*** Overridden method of JCoIDoc.Server.* Function requests that contain IDocs will be handled here.* All IDocs will be stored as XML files in the incoming path. * Additionally, IDocs that are part of an ORDERS message will be * processed specifically. Some relevant information is extracted from* these IDocs and will be stored in a text file in the incoming path.*/protected void handleRequest(IDoc.DocumentList documentList){System.out.println("Incoming IDoc list request containing "+ documentList.getNumDocuments() + " documents...");IDoc.DocumentIterator iterator = documentList.iterator();IDoc.Document doc = null;while (iterator.hasNext()){doc = iterator.nextDocument();System.out.println("Processing document no. " +doc.getIDocNumber() + "...");String iDocType = doc.getIDocTypeExtension();if (iDocType.length() == 0) iDocType = doc.getIDocType(); String filename = "IDOC_" + iDocType + "_" +doc.getIDocNumber() + "_" +timestampFormat.format(newjava.util.Date()) + ".xml";System.out.print("Storing IDoc as XML file '" + filename + "'...");doc.writeXML(incomingPath + filename);System.out.println(" done.");if (doc.getMessageType().equals("ZTEST001")) {System.out.println("Processing message of type'ZTEST001'...");processOrder(doc);} else {System.out.println("Message of type '" +doc.getMessageType() +"' won't be processed.");}}}//method handleRequest/*** The following 4 methods for transaction management are not implemented* here in this sample program. For a description on how to implement * them in real production scenarios please see the JCo API specification* for the JCO.Server class.*/protected boolean onCheckTID(String tid) {return true;}//method onCheckTIDprotected void onConfirmTID(String tid) {}//method onConfirmTIDprotected void onCommit(String tid) {}//method onCommitprotected void onRollback(String tid) {}//method onRollback}//class MyIDocServer/*** Process an IDoc of type ORDERS##.* Please note that this is only a sample processing that does not reflect * all possible application data scenarios for ORDERS. There are different* segment navigation and iteration techniques used within this method. */public static void processOrder(IDoc.Document order){try {String filename = "ZTEST001_"+ order.getIDocNumber() + "_"+timestampFormat.format(new java.util.Date()) + ".txt";System.out.print("Storing IDoc as text file '" + filename + "'...");PrintWriter out = new PrintWriter(newFileOutputStream(incomingPath + filename));out.println("General data:");out.println("-------------");out.println("IDoc number: " + order.getIDocNumber());out.println("Partner number: " +order.getSenderPartnerNumber());out.println("IDoc type: " + order.getIDocType());out.println("IDoc type extension: " +order.getIDocTypeExtension());//get the root segment from the document//The root segment does not contain any fields or data. It is only//used as the standard parent segment.IDoc.Segment root = order.getRootSegment();IDoc.Segment seg = null;IDoc.Segment seg2 = null;//get the document header general dataseg = root.getFirstChild("ZTEST001_HEAD");out.println("--------------ZTEST001_HEAD--------------"); out.println("EBELN: " + seg.getString("EBELN"));out.println("BSART: " + seg.getString("BSART"));out.println("BUKRS: " + seg.getString("BUKRS"));out.println("EKORG: " + seg.getString("EKORG"));out.println("EKGRP: " + seg.getString("EKGRP"));out.println("LIFNR: " + seg.getString("LIFNR"));//process the order itemsIDoc.SegmentIterator orderItems =root.getChildrenIterator("ZTEST001_HEAD");out.println("--------------ZTEST001_ITEM--------------"); IDoc.Segment segItemID = null;seg = orderItems.nextSegment();segItemID = seg.getFirstChild("ZTEST001_ITEM");while (segItemID!=null){out.println("BEGIN--------------ZTEST001_ITEM--------------");out.println("EBELP: " + segItemID.getString("EBELP")); out.println("TXZ01: " + segItemID.getString("TXZ01")); out.println("WERKS: " + segItemID.getString("WERKS")); out.println("LGORT: " + segItemID.getString("LGORT")); out.println("MENGE: " + segItemID.getString("MENGE")); out.println("MEINS: " + segItemID.getString("MEINS"));out.println("END--------------ZTEST001_ITEM--------------");segItemID = segItemID.getNextSibling("ZTEST001_ITEM");}out.close();System.out.println(" done.");}catch (ng.Exception ex) {System.out.println("Exception occurred: " + ex);}}//method processOrder/*** Interface method of JCO.ServerExceptionListener to be notified about* server exceptions.*/public void serverExceptionOccurred(JCO.Server server,ng.Exception ex){System.out.println("Server exception occurred: " + ex);}//method serverExceptionOccurred/*** Main method initializing and starting the JCoIDoc.Server.*/@SuppressWarnings("deprecation")public static void main(String[] args){try {//instantiate main classJCoIDocSample3 myApp = new JCoIDocSample3();//add server exception listener to be notified about server exceptionsJCO.addServerExceptionListener(myApp);//server properties to log on at the gateway serverjava.util.Properties srvProps = new java.util.Properties(); srvProps.put("jco.server.gwhost", "192.168.0.150");srvProps.put("jco.server.gwserv", "sapgw00");srvProps.put("jco.server.progid", "ZJCO_IDOC_001");srvProps.put("jco.server.unicode", "1"); // enter "1" for unicode systems//client properties to log on for repository queriesjava.util.Properties clntProps = new java.util.Properties(); clntProps.put("jco.client.client", "300");clntProps.put("er", "dev003");clntProps.put("jco.client.passwd", "dev003");clntProps.put("ng", "EN");clntProps.put("jco.client.ashost", "192.168.0.150");clntProps.put("jco.client.sysnr", "00");//create a JCo client poolJCO.addClientPool("MyPool", 5, clntProps);//create a JCo repository that will be used for querying//meta data for standard function requestsIRepository jcoRepository =JCO.createRepository("MyJCoRepository", "MyPool");//create an IDoc repository that will be used for querying//IDoc meta dataIDoc.Repository idocRepository =JCoIDoc.createRepository("MyIDocRepository", "MyPool");//create a JCoIDoc.Server instanceMyIDocServer server = new MyIDocServer(srvProps, jcoRepository, idocRepository);//start the JCoIDoc.Server instance and listen for incoming//function requests and IDocsserver.start();System.out.println("Started MyIDocServer.");System.out.println("MyIDocServer is listening now...");}catch ( ng.Exception ex ) {System.out.println("Application error: " + ex);}}//method main}//class JCoIDocSample3三:测试结果执行JCoIDocSample3类,程序开始监听,等待接收ECC发送的IDOC在ECC中运行程序:ZTESTCHEN005 发送IDOC在Eclipse中显示已经接收到ECC发送过来的IDOC在C:\temp会增加一个XML文件和TXT文件XML文件内容如下:TXT文件内容如下。

IDoc基础教育(2024)

IDoc基础教育(2024)
IDoc基础教育
2024/1/29
1
目 录
2024/1/29
• IDoc概述与基础知识 • IDoc创建与配置方法 • IDoc处理过程详解 • 常见错误排查与解决方案 • 优化IDoc性能与稳定性策略 • 总结回顾与展望未来发展趋势
2
IDoc概述与基础知
01

2024/1/29
3
IDoc定义及作用
批量处理
对大量数据进行批量处理,减少数据库访问次数和网络传输次数, 提高处理效率。
缓存机制
引入缓存机制,对频繁访问的数据进行缓存,减少对数据库的访问压 力,提高系统性能。
2024/1/29
22
总结回顾与展望未
06
来发展趋势
2024/1/29
23
关键知识点总结回顾
IDoc基础知识
包括IDoc的基本概念、结构、 类型以及其在SAP系统中的应
的监控和故障排除。
24
行业应用案例分析
1 2
制造业案例
展示了IDoc在制造业中的实际应用,如采购订单 、销售订单和库存管理等业务流程的自动化。
零售业案例
分析了IDoc在零售业中的应用,如实现与供应商 之间的电子数据交换,提高供应链效率。
3
物流业案例
探讨了IDoc在物流业中的应用,如实现订单、发 货和收货等信息的电子化传输和处理。
IDoc类型
根据业务场景和需求,IDoc可分为多种类型,如订单、发票、交货单等。
2024/1/29
IDoc结构
IDoc由控制记录、数据记录和状态记录三部分组成,其中控制记录包含传输控制信息, 数据记录包含实际业务数据,状态记录用于跟踪IDoc的处理状态。
IDoc的扩展性

IDOC配置手册

IDOC配置手册

IDOC配置手册作为目前ERP市场上最为领先的应用系统之一,一直以来,SAP R/3在提供API应用编程接口和接口工具方面也同样领先于其它ERP厂商。

ALE/IDocs 是SAP公司为SAP R/3 R4.6C版本所提供的接口机制,目前应用最为广泛。

在R4.0以后的版本中,又添加了技术上先进的BAPI。

本文作为系列介绍之一,对ALE/IDocs,BAPI以及其它可用的整合方式进行介绍。

1、ALE/IDocs是什么?ALE 是Application Link and Enabling的缩写,是SAP专门为SAP与SAP 之间所设计的整合中间件。

IDocs是中介文本(Intermediate DOCument) 的缩写,是SAP提供的系统整合专用的数据/消息格式。

ALE在SAP 3.0版本开始就作为SAP整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机制。

A LE的设计,原本作为两个SAP流程之间的一种消息传递服务(Messaging Servic e) ,使SAP与SAP的业务流程之间企业数据能够有效的交换,为两个独立的S AP之间提供了的系统整合服务。

不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整合方式。

ALE的设计结构可以分为三层,即应用层,数据/消息分配层和通讯层。

通讯层是SAP整合机制的基础,它利用远程功能呼叫RFC(Remote Function Call) 调用SAP系统的功能模块。

数据/消息分配层,主要提供三个关键服务:按数据分配模型决定数据接收者。

消息的过滤和转换。

数据/消息的压缩,以提高传递效率。

应用层直接与SAP系统接口,生成或从其它系统接收含有路由信息的消息文本IDocs,包括消息接收者的姓名,要求发送的类型以及对消息进行处理的规则。

ALE的机制代替了原来的SAP所提供的批数据通讯BDC(Batch Data Com munication) 方式。

IDOC基本步骤

IDOC基本步骤

可扩展性
IDOC支持自定义字 段和扩展属性,以满 足特定业务需求。
可靠性
IDOC传输过程中采 用确认机制和错误处 理机制,确保数据的 完整性和准确性。
高效性
IDOC支持批量处理 和异步传输,提高了 数据传输的效率。
IDOC在SAP系统中的应用
跨系统数据交换
业务流程自动化
通过IDOC,SAP系统可以与其他非SAP系统 进行数据交换,实现信息的共享和集成。
发送IDOC至目标系统
01
02
03
组装IDOC数据
按照目标系统的要求,将 业务数据组装成IDOC格 式。
调用发送接口
通过编程方式调用发送接 口,将组装好的IDOC数 据发送给目标系统。
监控发送状态实时监控IDOC的发送状 态来自确保数据成功传输至 目标系统。
04
接收IDOC
接收IDOC数据
通过SAP系统提供的接口,如RFC、 Web Services等,接收来自外部系统 的IDOC数据。
06
总结与展望
回顾本次项目成果
完成了项目目标
成功实现了IDOC的基本功 能,包括数据提取、转换 和加载等。
提高了数据质量
通过IDOC的处理,数据准 确性和一致性得到了显著 提高。
提升了业务效率
IDOC的自动化处理大大减 少了人工干预,提高了业 务处理效率。
展望未来发展趋势
智能化发展
随着人工智能技术的不断发展, IDOC有望实现更加智能化的数据
错误验证
在修复错误后,需要对修复结果进行 验证,确保错误已被正确解决且不会 影响系统其他部分。
05
04
错误修复
根据错误类型和定位结果,采取相应 措施修复错误,如修复代码、调整配 置、清理数据等。

IDOC练习实例

IDOC练习实例

1.自建IDOC TYPE的出站、进站处理场景:从集团800取得FI会计凭证号,利用自建的IDOC发送到集团810系统1.1出站:1)事物代码SALE 定义逻辑数据库:路径:基本设置->逻辑系统->定义逻辑系统T90CLNT090 client 800T90CLNT810 client 8102)事物代码SCC4分配逻辑系统到集团:集团800 逻辑系统:T90CLNT090集团810 逻辑系统:T90CLNT8103)事物代码sm59定义2系统连接:输入:Target Host:SH03(可以用事物SM51来查看本机的信息)System Number:00登录信息,包括语言、集团、用户、密码在集团800 建立连接810的连接:ZLINK810在集团810建立连接800的连接:ZLINK8004)事物代码WE21创建IDOC处理端口:集团800:端口ZPORT_800,RFC目标选择ZLINK810集团810:端口ZPORT_810,RFC目标选择ZLINK8005)事物代码WE31创建自定义IDOC TYPE定义2个段,ZFIDOCH 会计凭证抬头,ZFIDOCI会计凭证行项目6)事物代码WE30 创建IDOC类型:关联2个段ZFIDOCH/ZFIDOCI7)事物代码WE81创建一个IDOC 消息IDOC消息Z_FI_DOCU8)事物代码WE82关联IDOC消息与IDOC类型IDOC消息:Z_FI_DOCUIDOC类型:ZFIDOCU9)事物代码WE20定义合作伙伴选择伙伴类型LS,创建伙伴T90CLNT810,输入消息类型:Z_FI_DOCU接收方端口:ZPORT_800基本类型:ZFIDOCU10)事物代码SE38创建IDOC出站程序Z_FI_IDOC*&---------------------------------------------------------------------**& Report Z_FI_IDOC*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT z_fi_idoc.TABLES:bkpf.DATA:BEGIN OF it_bkpf OCCURS 0,bukrs TYPE bkpf-bukrs,belnr TYPE bkpf-belnr,gjahr TYPE bkpf-gjahr,blart TYPE bkpf-blart,waers TYPE bkpf-waers,END OF it_bkpf.DATA:wa_bkpf LIKE zfidoch.DATA:BEGIN OF it_bseg OCCURS 0,bukrs LIKE bseg-bukrs,belnr LIKE bseg-belnr,gjahr LIKE bseg-gjahr,buzei LIKE bseg-buzei,shkzg LIKE bseg-shkzg,dmbtr LIKE bseg-dmbtr,hkont LIKE bseg-hkont,END OF it_bseg.DATA:wa_bseg LIKE zfidoci.DATA: wa_edidc TYPE edidc,it_edidc TYPE TABLE OF edidc WITH HEADER LINE,it_edidd TYPE TABLE OF edidd WITH HEADER LINE.SELECTION-SCREEN BEGIN OF BLOCK s1 WITH FRAME TITLE text-001. PARAMETERS:p_bukrs TYPE bkpf-bukrs OBLIGATORY DEFAULT '1000',p_gjahr TYPE bkpf-gjahr OBLIGATORY DEFAULT '2011'. SELECT-OPTIONS:s_belnr FOR bkpf-belnr DEFAULT '1400000009'. SELECTION-SCREEN END OF BLOCK s1.START-OF-SELECTION.PERFORM frm_select.END-OF-SELECTION.*&---------------------------------------------------------------------**& Form FRM_SELECT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM frm_select.SELECT bukrs belnr gjahr blart waersINTO TABLE it_bkpfFROM bkpfWHERE bukrs = p_bukrsAND belnr IN s_belnrAND gjahr = p_gjahr.IF it_bkpf[] IS INITIAL.WRITE '没有数据'.STOP.ELSE.SELECT bukrs belnr gjahr buzeishkzg dmbtr hkontINTO TABLE it_bsegFROM bsegWHERE bukrs = p_bukrsAND belnr IN s_belnrAND gjahr = p_gjahr.ENDIF.CLEAR wa_edidc.*系统根据下面4行即可与WE20设置关联起来wa_edidc-mestyp = 'Z_FI_DOCU'. "Message Type* wa_edidc-mestyp = 'Z_FI_DOCU_DEMO'.wa_edidc-idoctp = 'ZFIDOCU'. "IDOC Typewa_edidc-rcvprn = 'T90CLNT810'. "Partner Number of Recipient wa_edidc-rcvprt = 'LS'. "Partner Type of ReceiverSORT it_bkpf BY bukrs belnr gjahr.SORT it_bseg BY bukrs belnr gjahr buzei.LOOP AT it_bkpf.*添加IDOC结点it_edidd-segnam = 'ZFIDOCH'."结点名称it_edidd-dtint2 = 0.MOVE-CORRESPONDING it_bkpf TO wa_bkpf.it_edidd-sdata = wa_bkpf.. "结点内容APPEND it_edidd.CLEAR:wa_bkpf,it_edidd.LOOP AT it_bseg WHERE bukrs = it_bkpf-bukrsAND belnr = it_bkpf-belnrAND gjahr = it_bkpf-gjahr..it_edidd-segnam = 'ZFIDOCI'.it_edidd-dtint2 = 0.MOVE-CORRESPONDING it_bseg TO wa_bseg.it_edidd-sdata = wa_bseg.APPEND it_edidd.CLEAR:it_edidd, wa_bseg.ENDLOOP.ENDLOOP.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'EXPORTINGmaster_idoc_control = wa_edidc "Export TABLEScommunication_idoc_control = it_edidc "Importmaster_idoc_data = it_edidd "Export EXCEPTIONSerror_in_idoc_control = 1error_writing_idoc_status = 2error_in_idoc_data = 3sending_logical_system_unknown = 4OTHERS = 5.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.COMMIT WORK AND WAIT.WRITE: 'Idoc sent:'.LOOP AT it_edidc INTO wa_edidc.NEW-LINE.WRITE: 'Idoc number is',wa_edidc-docnum,'; receiver partner is', wa_edidc-rcvprn,'; sender partner',wa_edidc-sndprn.ENDLOOP.ENDIF.ENDFORM. "FRM_SELECT11)事物代码WE02 查看生成的出站IDOC1.2入站:1)事物代码SE11 创建2张表,用于存储IDOC传来数据表:ZFI_HEAD、ZFI_ITEM2)事物代码SE37 创建处理函数Z_IDOC_FI_DOCU_PROCESS;FUNCTION z_idoc_fi_docu_process.*"----------------------------------------------------------------------*"*"Local interface:*" IMPORTING*" REFERENCE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD*" REFERENCE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC*" EXPORTING*" VALUE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT*" VALUE(APPLICATION_VARIABL) 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: lv_subrc LIKE sy-subrc,wa_bkpf TYPE zfidoch,wa_bseg TYPE zfidoci,it_head TYPE STANDARD TABLE OF zfi_head WITH HEADER LIN E,it_item TYPE STANDARD TABLE OF zfi_item WITH HEADER LIN E.CLEAR idoc_contrl.READ TABLE idoc_contrl INDEX 1.IF idoc_contrl-mestyp <> 'Z_FI_DOCU' AND idoc_contrl-mestyp < > 'Z_FI_DOCU_DEMO'.RAISE wrong_function_called.ENDIF.LOOP AT idoc_contrl.LOOP AT idoc_data WHERE docnum = idoc_contrl-docnum.CASE idoc_data-segnam.WHEN 'ZFIDOCH'.wa_bkpf = idoc_data-sdata.MOVE-CORRESPONDING wa_bkpf TO it_head.it_head-datum = sy-datum.it_head-uzeit = sy-uzeit.APPEND it_head.CLEAR: it_head, wa_bkpf.WHEN 'ZFIDOCI'.wa_bseg = idoc_data-sdata.MOVE-CORRESPONDING wa_bseg TO it_item.it_item-datum = sy-datum.it_item-uzeit = sy-uzeit.APPEND it_item.CLEAR: it_item, wa_bseg.WHEN OTHERS.ENDCASE.ENDLOOP.ENDLOOP.MODIFY zfi_head FROM TABLE it_head.lv_subrc = sy-subrc.MODIFY zfi_item FROM TABLE it_item.lv_subrc = sy-subrc.IF lv_subrc = 0.COMMIT WORK AND WAIT.idoc_status-docnum = idoc_contrl-docnum.idoc_status-status = '53'. "IDOC处理成功APPEND idoc_status.ELSE.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.ENDFUNCTION.3)事物代码BD51注册函数Z_IDOC_FI_DOCU_PROCESS4)事物代码WE57关联函数、IDOC类型、消息类型5)事物代码WE42创建处理码ZFIDOC6)事物代码WE20 创建合作伙伴在集团810中创建合作伙伴T90CLNT0907)在集团800利用程序Z_FI_IDOC发送IDOC 如果状态为30,则需要WE19立即执行在集团810 WE02查看IDOC成功处理,表ZFI_HEAD/ZFI_ITEM存在数据8)完成测试;1.3设置筛选器1)事物代码BD64创建分发模型发送方:T90CLNT090接收方:T90CLNT810消息类型:Z_FI_DOCU创建好了以后,可以用菜单的环境->生成参数伙伴文件来生成合作伙伴注意,需要在800、810都生成,如果已经存在则不用;此步骤只是一个自动生成的过程,与手工建一样;菜单:编辑-》模型观察-》分配2)事物代码BD95/BD59 给消息类型Z_FI_DOCU设置过滤字段标准的IDOC TYPE 是有默认的过滤字段的,自定义的需要自己来设置BD95BD59 设置字段BLART(凭证类型为筛选字段)3)事物代码BD64 创建过滤设置筛选,只有类型为DZ的数据才可被出站准备数据会计凭证1400000009 类型为RV1400000010 类型为DZ 4)事物代码SE38执行程序5)事物代码WE02查看IDOC只有凭证1400000010被传出,正确;1.4过滤字段过滤段事物代码BD531.5创建替代规则事物代码SALE事物代码BD62 创建规则事物代码BD79 替代规则1.6Change Point事物代码BD61 激活change pointer事物代码BD50 Enable change pointers for a message type;事物代码BD52 Specify the fileds for which change points are to be written;程序:RBDMIDOC 来测试表:-- 使用T-code:SCDO 查看Change document object 和它们相应的Table;-- Master data发生变化时,会生成change document存放在CDHDR和CDPOS表中;-- 如果Shared Master Data设置恰当。

IDOC配置步骤

IDOC配置步骤

IDOC配置步骤IDOC(Intermediate Document)是SAP系统中的数据交换格式,用于在不同的应用系统之间传输数据。

IDOC配置步骤如下:1. 创建传输端口(Partner Profile):首先,在SAP系统的事务码WE.20中创建一个传输端口,用于定义与外部应用系统之间的通信。

在创建传输端口时,需要指定端口名称、通信方式(如RFC或文件传输)、目标系统等信息。

2. 创建基本类型(Basic Type):基本类型定义了IDOC中要传输的数据的结构和字段。

使用事务码WE.31创建一个基本类型,并根据需要定义必要的字段和结构。

例如,可以创建一个基本类型用于传输销售订单数据。

3. 创建消息类型(Message Type):消息类型是将基本类型与具体业务过程相结合的概念。

使用事务码WE.81定义一个消息类型,并选择一个已经存在的基本类型。

例如,可以创建一个消息类型用于传输销售订单数据。

4. 创建发送基本类型和消息类型的关系(Outbound Process Code):在事务码WE.57中定义一个发送基本类型和消息类型的关系。

在这一步中,需要指定一个处理代码(Process Code),用于在发送IDOC时触发特定的逻辑操作。

5. 创建接收基本类型和消息类型的关系(Inbound Process Code):在事务码WE.57中定义一个接收基本类型和消息类型的关系。

在这一步中,需要指定一个处理代码,用于在接收IDOC时触发特定的逻辑操作。

6. 配置逻辑接口(Logical System):在事务码WE.20中,配置逻辑系统用于定义源系统和目标系统之间的逻辑连接。

在这一步中,需要定义源系统的业务伙伴号码(Business Partner Number),目标系统的逻辑系统名称等信息。

7. 配置端口(Port):在事务码WE.21中,配置端口用于定义数据交换的技术连接。

在这一步中,需要指定传输方法(如RFC、文件传输等)、端口号、通信目标等信息。

IDOC创建、发送、接收及程序代码

IDOC创建、发送、接收及程序代码

什么是IDOC,以及IDOC的步骤创建IDOC:第一步:WE31 创建IDOC所包含的字段.第二步:WE30 创建IDOC 把Segment分配给IDOC第三步:WE81 创建信息类型第四步:WE82 把IDOC类型与信息类型对应.第五步:WE57 Assign Message &Idoc Type to a Function Module for Data Process第六步:SM59 Define a RFC connection for Idoc transfer第七步:WE21 Define a Port ( Assign a RFC destination which created in SM59 )第八步:WE41/42 Creat Process Code第九步:WE20 Define a Partner Profiles( Also creata Outbound parameters with Port, or Inbound parameters with Process code )管理IDOC:WE02 显示IDOC,可以根据时间,IDOC类型查找IDOC,查看成功,出错信息。

WE46 IDOC管理(出\入)WE60 IDOC类型文档(可以查看IDOC结构,和每个字段的描述.WE19 根据IDOC号进行IDOC处理,可以修改IDOC值进行补发动作,处理分为内向和外向。

消息配置:WE20 配置伙伴消息进和出IDOC类型WE21 配置伙伴。

官方介绍:An IDoc is simply a data container that is used to exchange information between any two processes that can understand the syntax and semantics of the data. IDoc is not a process.- IDocs are stored in the database.- In the SAP system, IDocs are stored in database tables.- IDocs are independent of the sending and receiving systems.- IDocs are independent of the direction of data exchange.An IDoc Type is SAP's format for data being moved between applications. Essentially, SAP has defined what a sales order, financial statement, invoice, etc will look like electronically. This includes how fields are grouped together (segments), the order and hierarchy of these groupings, and the format of each individual field.If you're familiar with EDI at all, then an IDoc will look very familiar to you. Nearly everything you're used to is there: from segment name to allowable codes to min/max occurs.It is important to note that an IDoc Type is really just a structure defined on the system and given a name (i.e., ORDERS04). An actual IDoc, however, consists of data, which fits within the defined structure of the IDoc Type. This IDoc is identified by a number rather than by a type. Creation of IDOCsTransaction code: WE 30Steps of Defining SegmentCreating Segment :Tcode - WE31Creating Message Type : Tcode - we81Assigning Message type to Idoc type: Tcode - we82ProcessThe two processes for IDoc are Outbound Process and Inbound Process.Outbound ProcessWhen the data is sent out from the system, the process is called Outbound Process and the IDoc is known as Outbound IDoc.Inbound ProcessWhen the data is coming in, the process is called Inbound Process and the IDoc is known as Inbound IDoc.Outbound Process (Sending System) Steps :1) GotoTcode SALE:Creating the logical systemClick on Sending & Receiving Systems à Select Logical Systems--Here Define the Logical Systems à Click on Execute ButtonGo for New Entries1) System Name : LOG1:Description: Sending System2) System Name : LOG2:Description: Receiving SystemPress Enter & Save it will ask for Request if you want new request create new request or press continue for transferring the objects.Assigning Client to the Logical System:Select Assign Client to Logical Systems -Client : Sending SystemLogical System : LOG1and alsoClient : Receiving SystemLogical System : LOG2Save this Data.Step 2) For RFC Creation:GotoTcode SM59 and Select R/3 ConnectsClick on create ButtonRFC Destination Name should be same as partner's logical system name and case sensitive to create the ports automatically while generating the partner profilesGive the information for required fields:RFC Destination : LOG2Connection type : 3Target Host : System No : 00Client : 210User : Login user namePassword :Save this & Test it and Remote LoginStep 3) GotoTcode BD64:Click on the change button>Click on the create model view Short Text: model viewTechnical Name: LMODSave this & press okSelect just created model viewName: "LMOD"Goto add message typeModel Name : LMODSender : LOG1Receiver : LOG2Message type: ZAZHARMESSSave and press Enter.4) GotoTcode BD82:Give Model View : LMODPartner system : LOG2Execute this by pressing F8It will gives you sending system port No: A00000000089 (Like)5) GotoTcode BD64:Select the model viewGoto>Edit >model view > DistributePress ok & Press Enter.Run your ZprogramREPORT ZIDOC1 .DATA: Begin of imara occurs 0,matnr like mara-matnr,mtart like mara-mtart,end of imara.DATA: wamas_con LIKE edidc,imas_data LIKE edidd OCCURS 0 WITH HEADER LINE, icom_con LIKE edidc OCCURS 0 WITH HEADER LINE. PARAMETERS: e_matnr LIKE mara-matnr,e_msgtyp LIKE edidc-mestyp,e_rcvprn LIKE edidc-rcvprn.* retrive app. data from DBSELECT matnrmtart FROM mara INTO TABLE imara WHERE matnr = e_matnr.*Master idoc control recordwamas_con-rcvprt = 'LS'.wamas_con-rcvprn = e_rcvprn.wamas_con-idoctp = 'ZAZHARIDOC'.wamas_con-mestyp = e_msgtyp.* masteridoc data recordsLOOP AT imara.imas_data-segnam = 'ZAZHARSEG'.moveimara to imas_data-sdata .APPEND imas_data.ENDLOOP.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' EXPORTINGmaster_idoc_control = wamas_conTABLEScommunication_idoc_control = icom_conmaster_idoc_data = imas_dataCOMMIT WORK.6) Verifying Transfer of IDOCs Tcode - we05ALE/IDOC Status Codes (outbound):01>IDoc Added30 >IDoc ready for dispatch29 >Error in ALE service Layer12 >Dispatch ok03 > Data passed to port ok.Inbound Process (Receiving System) Steps:Do the same step as you did in sending system> Creating IDoc> Defining the Segment> Creating Message Type> Assigning the Message Type> Defining the Logical System> Assigning the Logical System> Creating the Distribution Model1) GotoTcode - we57:Assign function module to IDoc typeModule: Function moduleBasic type:Message type:Direction: 2 (inbound)2) Creating Inbound process code - we423) Verifying Idoc List Tcode - we054) ALE/IDOC Status Codes (Inbound):50 >IDoc Added51 >Application Document not posted64 >IDoc ready to be transferred to application62 >IDoc passed to application53 >Application Document posted----------------------实例------------------------------------------------Outbound Idoc-简而言之,IDOC是类似XML的一种SAP系统与其他系统的一种集成工具。

PI_AAE_IDOC(IDOC2FTP)ECC

PI_AAE_IDOC(IDOC2FTP)ECC

一:ECC配置1:先在ECC配置一OUTBOOUND的IDOC: ZTEST006 1):IDOC 段类型:ZTEST0062):IDOC其本类型:ZTEST0063):DIOC TYPE :TEST0062:逻辑系统、合作伙伴类型LS配置根据PI中业务系统的名称在ECC中配置一个同名的逻辑系统BS_TEST01WE20创建设同名合作伙伴类型LS BS_TEST01 3:SM59配置到PI系统的RFC连接PIDEV注意红框中的设置,程序标识、网关主机名和网关服务需要跟第二步中PI配置有对应关系。

4:WE21配置端口 ZAAE_IDOC填入刚才配置的RFC连接5:在合作伙伴类型LS “BS_TEST01”配置IDOC“ZTEST006”的出参信息出站参数中加入IDOC ZTEST006维护接收方端口和IDOC基本类型6:发送IDOC的程序代码REPORT ZTESTCHEN006.DATA: G_IDOC_CTL LIKE EDIDC.DATA: GI_RET_CTL LIKE EDIDC OCCURS 0,GI_IDOC_DATA TYPE TABLE OF EDIDD WITH HEADER LINE.DATA: WA_HEAD TYPE ZTEST001_HEAD.DATA: WA_ITEM TYPE ZTEST006.DATA: IT_ITEM LIKE STANDARD TABLE OF WA_ITEM.TYPES: BEGIN OF TYP_EKPO,MATNR TYPE EKPO-MATNR,MENGE TYPE EKPO-MENGE,MEINS TYPE EKPO-MEINS,WERKS TYPE EKPO-WERKS,LGORT TYPE EKPO-LGORT,END OF TYP_EKPO.DATA: WA_EKPO TYPE TYP_EKPO,IT_EKPO LIKE STANDARD TABLE OF WA_EKPO.PARAMETERS: P_EBELN TYPE EKKO-EBELN OBLIGATORY.PERFORM BUILD_IDOC_CTL.PERFORM BUILD_IDOC_SEG.PERFORM CREATE_IDOC.*&---------------------------------------------------------------------**& Form CREATE_IDOC*&------------------------------------------------------------------* * text*&------------------------------------------------------------------* FORM CREATE_IDOC.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'EXPORTINGMASTER_IDOC_CONTROL = G_IDOC_CTLTABLESCOMMUNICATION_IDOC_CONTROL = GI_RET_CTLMASTER_IDOC_DATA = GI_IDOC_DATAEXCEPTIONSERROR_IN_IDOC_CONTROL = 1ERROR_WRITING_IDOC_STATUS = 2ERROR_IN_IDOC_DATA = 3SENDING_LOGICAL_SYSTEM_UNKNOWN = 4OTHERS = 5.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ELSE.COMMIT WORK.MESSAGE '发送成功' TYPE 'S'.ENDIF.ENDFORM. " CREATE_IDOC*&---------------------------------------------------------------------**& Form BUILD_IDOC_CTL*&---------------------------------------------------------------------** text*----------------------------------------------------------------------** --> p1 text* <-- p2 text*----------------------------------------------------------------------*FORM BUILD_IDOC_CTL.* TYPEG_IDOC_CTL-IDOCTP = 'ZTEST006'. "IDOC TYPEG_IDOC_CTL-MESTYP = 'ZTEST006'. "MESSAGE TYPE* RECEIVERG_IDOC_CTL-RCVPRT = 'LS'. "PARTNER TYPEG_IDOC_CTL-RCVPRN = 'BS_TEST01'. "PARTNER NOG_IDOC_CTL-RCVPOR = 'ZAAE_IDOC'. "PORT* SENDERG_IDOC_CTL-SNDPRT = 'LS'. "PARTNER TYPEG_IDOC_CTL-SNDPRN = 'ECDCLNT300'. "PARTNER NO* G_IDOC_CTL-SNDPOR = ''. "PORTENDFORM. " BUILD_IDOC_CTL*&---------------------------------------------------------------------**& Form BUILD_IDOC_SEG*&---------------------------------------------------------------------*FORM BUILD_IDOC_SEG.DATA: L_COUNT TYPE I.CLEAR: L_COUNT.SELECT *FROM EKPOINTO CORRESPONDING FIELDS OF TABLE IT_EKPOWHERE EBELN EQ P_EBELN.LOOP AT IT_EKPO INTO WA_EKPO.* ITEM DATAGI_IDOC_DATA-SEGNAM = 'ZTEST006'. "SEGMENT NAMEADD 1 TO L_COUNT.GI_IDOC_DATA-SEGNUM = L_COUNT. "SEGMENT NOMOVE-CORRESPONDING WA_EKPO TO WA_ITEM.MOVE WA_ITEM TO GI_IDOC_DATA-SDATA.APPEND GI_IDOC_DATA.ENDLOOP.ENDFORM. " BUILD_IDOC_SEG二:PI上的配置1:nwa中的配置(http://IP:50000/nwa)inboundRA配置把Local 改成true把DestinationName改成XI_IDOC_DEFAULT_DESTINATION_ECD(下面有本连接的对应配置,命名规则:XI_IDOC_DEFAULT_DESTINATION_ + 目标SAP的系统标识)注意:RFC连接ZAAE_IDOC的网关服务必须要跟GatewayServer的值对应RFC连接ZAAE_IDOC的网关主机必须要跟GatewayService的值对应RFC连接ZAAE_IDOC的程序标识必须要跟ProgramID的值对应Destination的配置新创建XI_IDOC_DEFAULT_DESTINATION_ECD(上一步的配置中有引用到,命名规则:XI_IDOC_DEFAULT_DESTINATION_ + 目标SAP的系统标识)设置目标系统IP与系统编号设置目标系统的登录用户以上配置完成后,可以在ECC中通过RFC连接ZAAE_IDOC做连接测试。

ECC系统接收财务凭证IDoc的配置步骤

ECC系统接收财务凭证IDoc的配置步骤

[SAP PI]ECC系统接收财务凭证IDoc的配置步骤(总账应收应付)1. 业务场景外围系统,通过IDoc,在SAP系统中创建财务凭证,包括总账,应收和应付.2. IDoc,FM和增强对应关系3. 数据库表4. 本业务配置涉及的TCODE:5. 维护分配模型 BD64ECC接收IDoc不需要配置分配模型.6. WE20 配置合作伙伴参数点击进站参数部分的”创建入站参数”按钮输入消息类型,处理代码和触发方式等信息总账触发方式立即触发应收应付7. 增强总账,应收和应付共用同一个增强点增强程序代码需要在Include程序ZXACCU15中编写.可以在增加中,补充和修改凭证信息.8. 消息类型和字段对应表总账总账 IDOC Message type:ACC_GL_POSTING.ACC_GL_POSTING01外围系统字段与IDoc字段对应表,下表中的字段是外围系统需要同步的总账信息IDoc消息日志ECC生成的凭证:应收应收 IDOC Message type:ACC_BILLING. ACC_BILLING02外围系统字段与IDoc字段对应表,下表中的字段是外围系统需要同步的应收信息IDoc消息日志ECC生成的凭证:应付应付 IDOC Message type:ACC_INVOICE_RECEIPT. ACC_INVOICE_RECEIPT03外围系统字段与IDoc字段对应表,下表中的字段是外围系统需要同步的应付信息ECC生成的凭证:文章索引:IDoc∙[SAP PI]ECC系统发送供应商主数据(IDoc)到SAP PI系统的配置步骤(1)∙[SAP PI]ECC系统发送供应商主数据(IDoc)到SAP PI系统的配置步骤(2)_后台作业∙[SAP PI]ECC系统发送供应商主数据(IDoc)到SAP PI系统的配置步骤(3)_PI接口配置∙[SAP PI]ECC系统发送IDoc成本中心主数据(COSMAS)到外围系统的配置步骤∙[SAP PI]ECC系统发送IDoc内部订单主数据(Internal_Order)到外围系统的配置步骤∙[SAP PI]ECC系统发送IDoc工作分解结构WBS(PROJECT)到外围系统的配置步骤∙[SAP PI]ECC系统接收财务凭证IDoc的配置步骤(总账应收应付)∙[SAP PI]ECC中的IDoc接口消息监控方法WE02 WE07 WE09∙SAP PI系统发送IDoc到ECC系统的系统连接和权限配置SAP PI接口配置∙SAP PI中通过Context Object和Receiver Rule进行消息”行项目”路由控制的配置∙SAP PI中通过Context Object和Receiver Rule进行消息路由控制的配置SAP PI系统和连接配置∙ECC系统连接SAP PI系统的系统连接配置∙SAP PI 开发系统和生产系统SLD数据自动同步的配置∙匿名访问SAP PI Configuration Sender Agreement中的WSDL 链接的配置SAP PI系统监控∙[SAP PI]系统集成ECC端通过监控日志设计和实现方法∙SAP PI系统通过接口的Namespace和Service进行监控权限控制的系统角色配置∙定制后台作业和客制化程序实现在SAP PI和ECC系统中自动监控异步消息队列(SMQ2)∙[SAP PI]使用SMQ2解锁ECC和PI接口消息队列的方法SAP PI权限配置∙在SAP PI中根据ESB中的Namespace和IB中的Folder进行开发配置权限的控制Tags: ACC_BILLING, ACC_BILLING02, ACC_GL_POSTING, ACC_GL_POSTING01, ACC_INVOICE_RECEIPT, ACC_INVOICE_RECEIPT03, F-02, F-22, F-43, FB03, IDoc, PI, SAP PI, SAP XI, 应付, 应收, 总账。

SAP IDoc配置的相关事务码

SAP IDoc配置的相关事务码

IDoc(Intermediate Document)IDoc的两个特征1、面向消息(message-oriented)2、异步(asynchronous)IDOC的两种应用ALE:是面向于同一个公司不同的系统;EDI:是面向于不同公司;IDoc的结构和类型1、最小结构单元:Segment数据段2、控制记录(Control Record),也称为IDoc头3、数据记录(Data Record),不超过1000个字符的数据段文本4、状态记录(Status Record),历史状态信息5、IDoc类型(IDoc Type):定义了数据段以及数据段的层次和次序。

标准SAP 系统提供了IDOC类型,也称为基本类型(Basis Type).6、数据段:命名部分包括SAP版本无关的数据段类型以及至少一个版本相关的数据段名称。

7、数据段类型均为定义在数据字典中的ABAP结构。

SAP标准数据段类型以E1作为前缀,数据段名称则以E2作为前缀。

IDoc出站处理1、系统中生成新的应用文档(即应用数据)2、创建出站IDoc3、寻找伙伴参数和端口4、通过该端口将IDoc传递至外部系统4.1、通过消息控制的发送处理:消息查找和Idoc发送4.2、通过ALE的发送处理4.2.1、首先创建仅存在于运行时的Master IDoc4.2.2、传入FM: MSATER_IDOC_DISTRIBUTE4.2.3、调用FM: Communication_IDoc_Create,该FM对Master Idoc进行"过滤",过滤后的IDoc称为Communication IDoc4.4.4、调用FM: EDI_OUTPUT_NEWIDoc入站处理1、从系统的入站端口中接受发送方的Idoc数据2、创建入站Idoc (Inbound Idoc)3、通过伙伴参数文档查找Idoc的处理类型4、确定相关应用后写入文档4.1、直接处理4.2、通过SAP业务工作流常用IDocBOMMAT BOMECMMAS ECN CC92(BD50激活+BD21发送) MASTER_IDOC_CREATE_ECMMAS MATMAS 物料主数据IDoc数据表EDIDC IDOCEDIDS IDOC状态EDID4 IDOC数据记录IDoc相关函数IDOC_READ_COMPLETELY 读取IDOC的函数SREL_GET_NEXT_NEIGHBORS 读取IDOC一些信息(比如进站IDOC相关的出站IDOC编号)IDoc常用事务码BALE: 打开IDoc(ALE)区域菜单,很实用WEDI: 打开IDoc(EDI)区域菜单SALE: IMG-IDoc(ALE)配置SARA: 归档管理BD53: 消息类型缩减BD55: 维护 IDoc 转换BD56: 维护 IDoc 段筛选BD59: 分配对象类型->凭证类型BD62: 定义段转换规则BD71: 定义相关业务对象的 FMBD79: 维护 IDoc 转换规则BD82: 生成伙伴参数文件BDM2: 监控:接收系统的 IDocBDM5: 技术一致性检查BDM7: ALE审计:统计分析WE47: 状态维护WC34: IDoc准备传输的入站处理BDA1: 执行尚未执行的调用BD75: 执行tRFC成功时转换状态BD73: 启动未发布IDoc的错误处理BDM8: 发送审计确认SMQS: 目标系统登记创建IDoc(进站)SM59:定义IDOC传输的RFC连接WE31: 创建Segment(IDoc所包含的段)WE30: 创建基本IDoc类型,把Segment分配给IDocWE81: 创建信息类型(Message Type)WE82: 把基本IDoc类型与信息类型对应BD51: 添加入站代码处理函数WE57: 分配消息或者IDOC类型给数据处理函数模块WE41: 出站处理代码WE21: 定义端口WE20: 定义合作伙伴,配置进出站IDoc消息类型BD64: 维护分配模型创建IDoc(入站)SE37: 创建入站处理函数WE57: 分配消息或者IDoc类型给数据处理函数模块BD51: 添加入站处理函数的输入类型(批量/独立)WE42: 入站处理代码WE20: 定义合作伙伴,配置进站IDoc消息类型,选择入站处理代码修改指针BD50: 激活修改指针(对应主数据修改时,表bdcp2会记录下来)BD61: 激活更改指针(一般)BD52: 修改指针过滤(修改哪些字段时,产生修改指针存入表bdcp2)BDCP_BEFORE_WRITEBD21: 按修改指针发送IDOC管理IDocWE02: 显示IDOC,可以根据时间,IDOC类型查找IDOC,查看成功,出错信息。

2024版什么是IDOC以及IDOC的步骤

2024版什么是IDOC以及IDOC的步骤

03
业务流程自动化
通过IDOC,可以实现业务流程的自动化,提高业务处理效率和准确性。
01
数据传输
IDOC可以在SAP系统内部或与其他外部系统之间进行数据传输,实现数据的共享和集成。
02
数据转换
IDOC可以对传输的数据进行转换和映射,以适应不与EDI关系
什么是IDOC以及IDOC的步骤
目录
IDOC概述 IDOC类型 IDOC创建与发送 IDOC接收与处理 IDOC错误处理与监控 总结与展望
01
CHAPTER
IDOC概述
IDOC定义
IDOC(Intermediate Document)是SAP系统中用于数据交换的一种标准格式。
它是一种基于XML或EDI(电子数据交换)的结构化数据格式,用于在SAP系统内部或与其他系统进行数据交换。
数据转换
在处理过程中遇到错误时,需要进行相应的错误处理,如记录错误日志、发送错误通知等。
错误处理
处理IDOC
记录处理结果
将处理结果记录到日志或数据库中,以便后续跟踪和审计。
通知相关人员
根据需要,可以将处理结果通知给相关人员,以便及时了解处理情况。
发送确认消息
在处理完IDOC后,需要向发送方发送确认消息,告知IDOC已被成功接收并处理。
03
03
CHAPTER
IDOC创建与发送
定义IDOC类型
根据业务需求,选择或定义适当的IDOC类型,例如订单、发货通知、发票等。
填写IDOC数据
根据IDOC类型的要求,填写相关的业务数据,如订单号、客户信息、产品信息、数量、价格等。
设置IDOC参数
配置IDOC的发送参数,如接收方系统、发送方系统、通信协议、端口号等。

IDOC

IDOC

SAP->SRM出站发送IDOC配置文档
1.创建IDOC类型
1.事务码:WE31
创建计划协议抬头段ZSRM_003_SEG、计划协议项目段ZSRM_004_SEG、计划协议行段ZSRM_005_SEG
2.事务码:WE30
创建计划协议IDOC类型ZSRM_002_IDOC,并将上述段以层级方式挂上去
2.创建消息类型并关联
1.事务码:WE81
创建消息类型ZSRM_002_MES
2.事务码:WE82
关联消息类型和IDOC类型
3.创建逻辑系统和到SRM的RFC连接
一、事务码:BD54
二、事务码:SM59
选择TCP/IP Connection,点击创建
目标系统命名为:SRM(必须要和逻辑系统名字一致)
4.创建到SRM端口
1.事务码:WE21
2.选择事务性RFC,点击创建
3.端口命名SRM,RFC目标为SM59中创建的SRM
5.创建合作伙伴
1.事务码:WE20
2.选择伙伴类型LS,点击创建,合作伙伴编号为事务码BD54中定义的SRM逻辑系统
6.定义分配模型和生成出站参数
1.事务码:BD64
2.选择修改,点击创建模型视图
这里的短文本和技术名称是可以随便定义的
3.点击添加消息类型
模型观察:模型视图的技术名称
发送方:SAP客户端600的逻辑系统
接收方:SRM逻辑系统
消息类型:之前创建的计划协议消息类型
4.菜单->环境->生成参数伙伴文件,可以自动将计划协议消息类型分配到合作伙伴出站参
数中
也可以手工添加计划协议消息类型。

PO发送SO创立IDOC配置

PO发送SO创立IDOC配置

1、BD54逻辑系统创建 (2)2、SCC4将逻辑系统分配给客户端 (2)3、SM59新建RFC (3)4、WE21创建IDOC处理端口号 (4)5、XK02修改供应商 (4)6、WE20创建合作伙伴参数-供应商 (5)7、XD02客户设置(纳期回答使用) (6)8、WE20建立合作伙伴参数-客户(纳期回答使用) (7)9、WE20建立合作伙伴参数-逻辑系统 (8)10、NACR输出类型 (10)11、NACR纳期回答设置 (10)13、ME11采购信息记录设置 (12)14、VOE2 SD EDI 客户/供销商设置 (12)15、VOE4 SD EDI 转换 (13)16、CUNI EDI单位设置 (13)17、CMOD个别字段值设置 (13)PO发送SO创建IDOC配置1、BD54逻辑系统创建2、SCC4将逻辑系统分配给客户端3、SM59新建RFC数据发送设置4、WE21创建IDOC处理端口号5、XK02修改供应商6、WE20创建合作伙伴参数-供应商7、XD02客户设置(纳期回答使用)8、WE20建立合作伙伴参数-客户(纳期回答使用)数据接收设置9、WE20建立合作伙伴参数-逻辑系统注:如不需要纳期回答,不用配置ORDRSP10、NACR输出类型11、NACR纳期回答设置12、MM02物料设置13、ME11采购信息记录设置14、VOE2 SD EDI 客户/供销商设置15、VOE4 SD EDI 转换16、CUNI EDI单位设置17、CMOD个别字段值设置17-1 价格条件17-2 仓库17-3 抬头交货日期字段。

idoc两台机器的数据传输配置以及完整操作截图

idoc两台机器的数据传输配置以及完整操作截图

1.创建记录发送时间的表:2.定义自定义段:WE313.定义基本类型WE30将段挂在基本类型下:4.定义消息类型we815.基本类型分配给消息类型:6.定义自定义结构zmkpf_line.(即数据库表mkpf的前五个字段)7.表结构,ZMKpf_TYP,对应行类型结构为ZMKpf_LINE8.创建发送idoc的函数:FUNCTION ZMKPF_IDOC_SEND .*"----------------------------------------------------------------------*"*"Local interface:*" TABLES*" ZMKPF TYPE ZMKPF_TYP*" EXCEPTIONS*" NO_IDOC*" NO_MODEL*"----------------------------------------------------------------------*variables of general interestDATA:*control record for the IDocidoc_control LIKE edidc,*data records for the IDoct_idoc_data LIKE edidd OCCURS 0 WITH HEADER LINE,*table for the IDocs created by MASTER_IDOC_CONTROLt_comm_control LIKE edidc OCCURS 0 WITH HEADER LINE,*partner type for logical systemc_partner_type_logical_system LIKE edidc-rcvprt,*help variable for the check if an IDoc has to be createdh_create_idoc.* variables specific for this exampleDATA:* field strings with IDoc segment structuree1xmkal TYPE ZMKPF_line,* data to be put to the control recordc_message_type LIKE edidc-mestyp VALUE 'ZMKPF_IDOC',c_base_idoc_type LIKE edidc-idoctp VALUE 'ZMKPF_IDOC',* segment types to be put to the data record tablec_header_segtyp LIKE edidd-segnam VALUE 'ZMKPF'.* check if an IDoc has to be created, read the distribution modelCALL FUNCTION 'ALE_MODEL_DETERMINE_IF_TO_SEND'EXPORTINGmessage_type = c_message_type* SENDING_SYSTEM = ' '* RECEIVING_SYSTEM = ' '* VALIDDATE = SY-DATUMIMPORTINGidoc_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 doEXIT.ENDIF.* put the application header record to the IDocLOOP AT zmkpf.MOVE-CORRESPONDING zmkpf TO e1xmkal.* append record to IDoc data tablet_idoc_data-segnam = c_header_segtyp.t_idoc_data-sdata = e1xmkal.APPEND t_idoc_data.ENDLOOP.idoc_control-mestyp = c_message_type.idoc_control-idoctp = c_base_idoc_type.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'* in update task "if application document is posted in update task EXPORTINGmaster_idoc_control = idoc_controlTABLEScommunication_idoc_control = t_comm_controlmaster_idoc_data = t_idoc_dataEXCEPTIONSerror_in_idoc_control = 1error_writing_idoc_status = 2error_in_idoc_data = 3sending_logical_system_unknown = 4OTHERS = 5.* A commit work has to be done. It could also be done in the calling * application.COMMIT WORK.READ TABLE t_comm_control INDEX 1.IF sy-subrc <> 0.raise no_idoc.* no IDoc was created, you can react here, if neccessaryENDIF.ENDFUNCTION.函数截图:11.定义逻辑系统:分配到集团:12.定义目标系统:13连接与权限测试:14配置分布模型:生成伙伴参数文件:更改伙伴参数文件:新建端口we21新建出站参数:执行函数ZMKPF_IDOC_SEND:发送数据:查看结果we02消息的状态监视:bd87点击处理按钮:端口xml文件:(发送了三次,xml文件有点大)<?xml version="1.0" encoding="UTF-8"?><ZMKPF_IDOC><IDOCBEGIN="1"><EDI_DC40SEGMENT="1"><TABNAM>EDI_DC40</TABNAM><MANDT>114</M ANDT><DOCNUM>0000000000002001</DOCNUM><DOCREL>702</DOCREL><STATUS>30</STATUS><DIRECT>1< /DIRECT><OUTMOD>4</OUTMOD><IDOCTYP>ZMKPF_IDOC</IDOCTYP><MESTYP>ZMKPF_IDOC</MESTYP><SND POR>SAPBP1</SNDPOR><SNDPRT>LS</SNDPRT><SNDPRN>ZSYS4674</SNDPRN><RCVPOR>ZXML</RCVPOR><RC VPRT>LS</RCVPRT><RCVPRN>BP5CLNT300</RCVPRN><CREDAT>20120821</CREDAT><CRETIM>050516</CRETI M><SERIAL>20120821050515</SERIAL></EDI_DC40><ZMKPF SEGMENT="1"><MJAHR>0000</MJAHR></ZMKPF></IDOC><IDOC BEGIN="1"><EDI_DC40 SEGMENT="1"><TABNAM>EDI_DC40</TABNAM><MANDT>114</MANDT><DOCNUM>0000000000002002</DOC NUM><DOCREL>702</DOCREL><STATUS>30</STATUS><DIRECT>1</DIRECT><OUTMOD>4</OUTMOD><IDOCTYP >ZMKPF_IDOC</IDOCTYP><MESTYP>ZMKPF_IDOC</MESTYP><SNDPOR>SAPBP1</SNDPOR><SNDPRT>LS</SNDP RT><SNDPRN>ZSYS4674</SNDPRN><RCVPOR>ZXML</RCVPOR><RCVPRT>LS</RCVPRT><RCVPRN>BP5CLNT300</ RCVPRN><CREDAT>20120821</CREDAT><CRETIM>050718</CRETIM><SERIAL>20120821050717</SERIAL></EDI_ DC40><ZMKPFSEGMENT="1"><MANDT>114</MANDT><MBLNR>4900000000</MBLNR><MJAHR>2011</MJAHR><VGART>WA< /VGART><BLART>PR</BLART></ZMKPF></IDOC><IDOC BEGIN="1"><EDI_DC40SEGMENT="1"><TABNAM>EDI_DC40</TABNAM><MANDT>114</MANDT><DOCNUM>0000000000003001</DOC NUM><DOCREL>702</DOCREL><STATUS>30</STATUS><DIRECT>1</DIRECT><OUTMOD>4</OUTMOD><IDOCTYP >ZMKPF_IDOC</IDOCTYP><MESTYP>ZMKPF_IDOC</MESTYP><SNDPOR>SAPBP1</SNDPOR><SNDPRT>LS</SNDP RT><SNDPRN>ZSYS4674</SNDPRN><RCVPOR>ZXML</RCVPOR><RCVPRT>LS</RCVPRT><RCVPRN>BP5CLNT300</ RCVPRN><CREDAT>20120821</CREDAT><CRETIM>190105</CRETIM><SERIAL>20120821190104</SERIAL></EDI_ DC40><ZMKPFSEGMENT="1"><MANDT>114</MANDT><MBLNR>4900000000</MBLNR><MJAHR>2011</MJAHR><VGART>WA< /VGART><BLART>PR</BLART></ZMKPF></IDOC></ZMKPF_IDOC>。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

什么是IDOC,以及IDOC的步骤创建IDOC:第一步:WE31 创建IDOC所包含的字段.第二步:WE30 创建IDOC 把Segment分配给IDOC第三步:WE81 创建信息类型第四步:WE82 把IDOC类型与信息类型对应.第五步:WE57 Assign Message &Idoc Type to a Function Module for Data Process第六步:SM59 Define a RFC connection for Idoc transfer第七步:WE21 Define a Port ( Assign a RFC destination which created in SM59 )第八步:WE41/42 Creat Process Code第九步:WE20 Define a Partner Profiles( Also creata Outbound parameters with Port, or Inbound parameters with Process code )管理IDOC:WE02 显示IDOC,可以根据时间,IDOC类型查找IDOC,查看成功,出错信息。

WE46 IDOC管理(出\入)WE60 IDOC类型文档(可以查看IDOC结构,和每个字段的描述.WE19 根据IDOC号进行IDOC处理,可以修改IDOC值进行补发动作,处理分为内向和外向。

消息配置:WE20 配置伙伴消息进和出IDOC类型WE21 配置伙伴。

官方介绍:An IDoc is simply a data container that is used to exchange information between any two processes that can understand the syntax and semantics of the data. IDoc is not a process.- IDocs are stored in the database.- In the SAP system, IDocs are stored in database tables.- IDocs are independent of the sending and receiving systems.- IDocs are independent of the direction of data exchange.An IDoc Type is SAP's format for data being moved between applications. Essentially, SAP has defined what a sales order, financial statement, invoice, etc will look like electronically. This includes how fields are grouped together (segments), the order and hierarchy of these groupings, and the format of each individual field.If you're familiar with EDI at all, then an IDoc will look very familiar to you. Nearly everything you're used to is there: from segment name to allowable codes to min/max occurs.It is important to note that an IDoc Type is really just a structure defined on the system and given a name (i.e., ORDERS04). An actual IDoc, however, consists of data, which fits within the defined structure of the IDoc Type. This IDoc is identified by a number rather than by a type. Creation of IDOCsTransaction code: WE 30Steps of Defining SegmentCreating Segment :Tcode - WE31Creating Message Type : Tcode - we81Assigning Message type to Idoc type: Tcode - we82ProcessThe two processes for IDoc are Outbound Process and Inbound Process.Outbound ProcessWhen the data is sent out from the system, the process is called Outbound Process and the IDoc is known as Outbound IDoc.Inbound ProcessWhen the data is coming in, the process is called Inbound Process and the IDoc is known as Inbound IDoc.Outbound Process (Sending System) Steps :1) GotoTcode SALE:Creating the logical systemClick on Sending & Receiving Systems à Select Logical Systems--Here Define the Logical Systems à Click on Execute ButtonGo for New Entries1) System Name : LOG1:Description: Sending System2) System Name : LOG2:Description: Receiving SystemPress Enter & Save it will ask for Request if you want new request create new request or press continue for transferring the objects.Assigning Client to the Logical System:Select Assign Client to Logical Systems -Client : Sending SystemLogical System : LOG1and alsoClient : Receiving SystemLogical System : LOG2Save this Data.Step 2) For RFC Creation:GotoTcode SM59 and Select R/3 ConnectsClick on create ButtonRFC Destination Name should be same as partner's logical system name and case sensitive to create the ports automatically while generating the partner profilesGive the information for required fields:RFC Destination : LOG2Connection type : 3Target Host : System No : 00Client : 210User : Login user namePassword :Save this & Test it and Remote LoginStep 3) GotoTcode BD64:Click on the change button>Click on the create model view Short Text: model viewTechnical Name: LMODSave this & press okSelect just created model viewName: "LMOD"Goto add message typeModel Name : LMODSender : LOG1Receiver : LOG2Message type: ZAZHARMESSSave and press Enter.4) GotoTcode BD82:Give Model View : LMODPartner system : LOG2Execute this by pressing F8It will gives you sending system port No: A00000000089 (Like)5) GotoTcode BD64:Select the model viewGoto>Edit >model view > DistributePress ok & Press Enter.Run your ZprogramREPORT ZIDOC1 .DATA: Begin of imara occurs 0,matnr like mara-matnr,mtart like mara-mtart,end of imara.DATA: wamas_con LIKE edidc,imas_data LIKE edidd OCCURS 0 WITH HEADER LINE, icom_con LIKE edidc OCCURS 0 WITH HEADER LINE. PARAMETERS: e_matnr LIKE mara-matnr,e_msgtyp LIKE edidc-mestyp,e_rcvprn LIKE edidc-rcvprn.* retrive app. data from DBSELECT matnrmtart FROM mara INTO TABLE imara WHERE matnr = e_matnr.*Master idoc control recordwamas_con-rcvprt = 'LS'.wamas_con-rcvprn = e_rcvprn.wamas_con-idoctp = 'ZAZHARIDOC'.wamas_con-mestyp = e_msgtyp.* masteridoc data recordsLOOP AT imara.imas_data-segnam = 'ZAZHARSEG'.moveimara to imas_data-sdata .APPEND imas_data.ENDLOOP.CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE' EXPORTINGmaster_idoc_control = wamas_conTABLEScommunication_idoc_control = icom_conmaster_idoc_data = imas_dataCOMMIT WORK.6) Verifying Transfer of IDOCs Tcode - we05ALE/IDOC Status Codes (outbound):01>IDoc Added30 >IDoc ready for dispatch29 >Error in ALE service Layer12 >Dispatch ok03 > Data passed to port ok.Inbound Process (Receiving System) Steps:Do the same step as you did in sending system> Creating IDoc> Defining the Segment> Creating Message Type> Assigning the Message Type> Defining the Logical System> Assigning the Logical System> Creating the Distribution Model1) GotoTcode - we57:Assign function module to IDoc typeModule: Function moduleBasic type:Message type:Direction: 2 (inbound)2) Creating Inbound process code - we423) Verifying Idoc List Tcode - we054) ALE/IDOC Status Codes (Inbound):50 >IDoc Added51 >Application Document not posted64 >IDoc ready to be transferred to application62 >IDoc passed to application53 >Application Document posted----------------------实例------------------------------------------------Outbound Idoc-简而言之,IDOC是类似XML的一种SAP系统与其他系统的一种集成工具。

相关文档
最新文档