How to search for BAdIs?
Program for searching Usr-exit
ALE and IDoc
from internet:
作为目前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整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机 制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务(Messaging Service) ,使SAP与SAP的业务流程之间企业数据能 够有效的交换,为两个独立的SAP之间提供了的系统整合服务。不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整 合方式。2、ALE/IDocs的消息发送接收过程
ALE的设计结构可以分为三层,即应用层,数据/消息分配层和通讯层。通讯层是SAP整合机制的基础,它利用远程功能呼叫RFC(Remote Function Call) 调用SAP系统的功能模块。
数据/消息分配层,主要提供三个关键服务:
-
按数据分配模型决定数据接收者。
-
消息的过滤和转换。
-
数据/消息的压缩,以提高传递效率。
应用层直接与SAP系统接口,生成或从其它系统接收含有路由信息的消息文本IDocs,包括消息接收者的姓名,要求发送的类型以及对消息进行处理的规则。
ALE 的机制代替了原来的SAP所提供的批数据通讯BDC(Batch Data Communication) 方式。顾名思义,BDC为系统之间提供了简单 的数据批处理服务,还不能作为一种中间件技术,它没有提供系统之间进行无缝整合所要求的纠错功能、系统管理和其它安全措施。总得说来,应用SAP的ALE 机制进行SAP与SAP或非SAP系统整合有以下几个好处:
-
ALE技术不受SAP版本升级的影响,它提供了版本向后兼容性。ALE定义于SAP应用层,与SAP的逻辑层相对独立,整个ALE中间件独立于发送和接收系统。
-
ALE消息设计逻辑保证消息的一次且只有一次的消息传递。ALE采用存储-发送技术确保消息即使系统发生故障或接收方没有准备接收时也可以达到目的地。这样就保证接收方不至于收到重复消息。
-
ALE也提供了IDocs管理功能。主要有文本缩减、文本版本控制以及文本数据过滤。三种控制机制使得SAP开发人员可以根据实际需要对IDocs文本在运行中进行动态处理。
-
ALE提供了系统管理功能,允许对ALE系统进行启动/复位/恢复等系统操作,为开发人员提供了进一步的管理控制。
IDoc 几乎可以传带任何SAP应用的数据,是一种外围定义格式,与SAP的应用数据定义不直接相关。IDocs已经广泛应用于早期的SAP-EDI的数据交换,因而它的设计有点类似于EDI的标准,即EDIFACT标准。
IDocs是以字符基础的,因而是可读的。它有三种纪录类型,即:
-
控制纪录-含文本信息,如IDoc类型,发送/接收方信息以及文本标识。
-
数据纪录-含管理和实际数据部分。
-
状态纪录-用来追踪文本传递各点的状态,如状态码,系统时间,错误标识等。
下面对ALE/IDocs在系统整合过程中消息的实际传递进行介绍。
让我们首先看发送过程。3、BAPI简介
一个发送过程由事件触发,文本生成,数据打包以及交由传输媒介传递这四个步骤组成,具体如下:
-
应用系统事件触发
系统目标(Objects) 的状态变化,用户自主活动或其它数据库特定变化等可以启动数据表的触发程序,从而进行数据传递的初始化工作,如数据准备。
-
生成主IDoc文本(Master)
按标准格式生成主IDoc文件,包含所有可以传递数据(不分接收者)
-
生成通讯Idoc
从主IDoc中生成只与特定
-
Idoc 发送
利用异步
下面,让我们看接收过程。
接收过程始于SAP系统从外部收到IDoc
-
存储Idoc-将文本存储于数据库,并进行语法校验
-
邮件处理程序读取Idoc--一个专门设计的IDoc处理程序读取IDoc并产生SAP或其它系统所需的系统消息。多个程序可以同时运行。
-
生成系统文本--处理程序进一步生成系统文本供系统使用,并将结果信息存于Idoc d的状态纪录中。
BAPI 是Business Application Programming Interface的缩写, 是SAP为3.0版本以上提供的基于企业目标 (Business Object) 技术的接口应用界面。SAP在3.0版本以上采用了Object-oriented技术,逻辑定义了SAP R/3 系统的所有功能目标,并且将所有的目标(Objects) 和BAPIs存储于企业目标库BOR (Business Objects Repository). SAP R/3 企业目标的目标类型(Object Type) 相当于目标设计语言中 类(Class) 的概念,其定义结构由以下几部分组成:
-
基本数据--所有目标类的通用属性,如目标标识和默认方法(Method) 。
-
接口界面--目标的方法(Method), 事件(Event), 特征(Attributes) 。
-
键(Key Fields)--供BOR中目标检索使用
-
方法(Methods)-- 对目标进行所要求的各种操作。
-
特征(Attibutes)-- 描述目标特征。
-
事件(Events)-- 触发以改变目标状态。
4、应用SAP-DCOM接口
SAP于1998首次提供SAP-DCOM接口,以满足各种桌面应用开发的要求。利用DCOM连接端口,
开发人 员可以利用VB, C++,以DCOM目标方式访问SAP数据。在Web应用上,可以用VBScript, JavaScript 以DHTML方式页面访问,也可以用ASP访问数据。另外,利用DCOM也可以间接访问SAP的企业目标库BOR。上面 提到的BAPI是SAP系统上专用的,在实际应用上不如DCOM来得广泛。DCOM端口主要有两个技术模块组成,一个是管理模块,另一个模块生成 SAP BO的DCOM 代理组件(Proxy Components),生成的DCOM组件存放于C++。代理组件有以下属性:
-
Client-要访问的R/3客户系统
-
UserID-R/3用户
-
Password-用户密码
-
Language-系统语言
-
Destination-预先定义的目标名称
另外,每个组件具有以下方法:
-
PutSeesionInfo()设定系统一次调用的目标参数
-
AdviceRfcGuiSink()用于需要SAPGUI或dubugging的场合。
-
CommitWork()-用于数据更新,无implicit commit的场合。
-
InitKeys()-DCOM目标键初始化
-
DimAs()-返回Microsoft ADO(Advanced Data Object) 纪录集(支持游标控制)。
-
其它从R/3 BO定义中继承的方法。
总起说来,SAP R/3 作为一个相对灵活的ERP系统,利用上述的各种整合技术能够实现SAP系统之间以及SAP 与其它系统之间的
数据 /过程的整合。当然,一个应用系统的高度客户化导致了系统整合的难度。随着系统功能的增加,多种可供采用的整合技术也就显得很有必要。对于SAP R/3用户来说,正确选择适用的整合技术是实现成功系统整合的关键。 -
利用BAPI,开发人员可以实现对BOR进行实时访问,从而实现应用系统(SAP-SAP)之间在数据/逻辑层上的有效整合。
SAP用户出口类型
sap的用户出口总共有三代:
1、第一代
sap提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。这类增强都需要修改sap的标准代码。
示例:USEREXIT.. in SAPMV45A
2、第二代
sap提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。参见我的
sap提供的第三代的用户出口就是BADI,他的调用方式是CALL METHOD (instance),(相关的TCODE是SE18和SE19),你可以通过EXIT_HANDLER这个单词查找BADI。
BADI primer
https://www.sdn.sap.com/irj/sdn/thread?threadID=11927&tstart=0
http://www.sapclub.org/blog/arron99/archive/2006/11/20.html
RFC and BAPI
BAPI和RFC不是同一个层次上概念,不能说从字面上看到BAPI函数和RFC函数就认为他们之间有必然的联系和区别。打个比如,问一个问题:人可以分为哪几类,答曰:男人和老人,呵~~,大家都知道,男人是基于性别来说的,老人是基于年龄的。BAPI是SAP提供的基于业务对象的函数,关键是它们处理的对象是R/3的业务相关business object),比如单据类销售订单,组织:公司等,它们是一系列实体。RFC则是一种系统间通讯的方式(Remote Funciton Call),一个男人可能同时也是一个老人,一个BAPI函数往往能是一个RFC函数(我不知道是不是所有BAPI都可以有基于RFC技术来调用,但是至少也可以说大部分吧,VB里面用BAPI,就是因为这个BAPI函数具有RFC的特性)
BAPI是个SAP里一个很好的思想,把业务对象都对象化了。刚学ABAP/4时,并不能理解SAP所说?ABAP/



