转自:http://blog.163.com/shenshengqge@126/blog/static/820512902011101152518635/

作为目前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的业务流程之间( 补充:如模块之间 SD:VLPOD 过程生成会计凭证,就用了IDOC)
企业数据能够有效的交换,为两个独立的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在系统整合过程中消息的实际传递进行介绍。

让我们首先看发送过程。

一个发送过程由事件触发,文本生成,数据打包以及交由传输媒介传递这四个步骤组成,具体如下:

应用系统事件触发 系统目标(Objects) 的状态变化,用户自主活动或其它数据库特定变化等可以启动数据表的触发程序,从而进行数据传递的初始化工作,如数据准备。
生成主IDoc文本(Master) 按标准格式生成主IDoc文件,包含所有可以传递数据(不分接收者)
生成通讯Idoc 从主IDoc中生成只与特定接收者有关的文本,通讯文本是主文本的子数据集(Subset)
Idoc 发送 利用异步通讯方式将一定版本的IDoc传递到接收方。

下面,让我们看接收过程。

接收过程始于SAP系统从外部收到IDoc文本。接收过程的优点在于,接收方既可以是SAP系统,也可以是第三方系统,这也是SAP与第三方进行有效整合的基础。接收过程由以下三个步骤组成:

存储Idoc-将文本存储于数据库,并进行语法校验
邮件处理程序读取Idoc--一个专门设计的IDoc处理程序读取IDoc并产生SAP或其它系统所需的系统消息。多个程序可以同时运行。
生成系统文本--处理程序进一步生成系统文本供系统使用,并将结果信息存于Idoc d的状态纪录中。

3、BAPI简介

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/ 企业目标的目标类型(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)之间在数据/逻辑层上的有效整合。

ALE和IDocs的更多相关文章

  1. IDOC、ALE、EDI三者之间的区别于联系

    EDI (Electronic data interchange) - 是指按照同一规定的一套通用标准格式,将标准的经济信息,通过通信网络传输,在贸易伙伴的电子计算机系统之间进行数据交换和自动处理.由 ...

  2. 51单片机ALE引脚的控制(摘录)

    ALE/PROG: 当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节. 在FLASH编程期间,此引脚用于输入编程脉冲. 在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频 ...

  3. BW基于ALE的主数据增量机制分析

    1     概述 前段时间在项目中碰到一个问题,地点物料0MAT_PLANT_ATTR属性主数据因为有两个多月没有做增量更新,导致在之后的每次增量抽取活动中因为抽取的数据量过大使得在源系统的进程中发生 ...

  4. 51单片机引脚ALE/PROG/PSEN/EA/Vpp

    51单片机的4个控制引脚,其中一个引脚是复位引脚(RST/Vpd),RST是复位引脚,当RST输入端保持2个机器周期以上高电平时,就实现复位. ALE/PROG是地址锁存允许信号输出端,在读写外部存储 ...

  5. [每日一题] OCP1z0-047 :2013-08-22 正则表达式---[^Ale|ax.r$]'

    正确答案:DE 一.Oracle正则表达式的相关知识点 '[^Ale|ax.r$]': ^:匹配行的开始字符 $:匹配行的结束字符 []:方括号表示指定一个匹配列表,该列表匹配列表中显示的任何表达式. ...

  6. SAP中的ALE, IDOC

    ALE技术:应用链接支持(Application Link Enabling 简称ALE),是一项用于创建和运行分布式应用的技术.ALE是SAP的专有技术. ALE对象——ALE包含了可控的数据消息交 ...

  7. Vim插件之ale,LeaderF,completor.vim(win10)配置

    内容包含 vim-plug,异步插件管理,总之就是下起来快. ale,异步语法检查 LeaderF,快速查找文件 completor.vim vim8的快速补全 markdown预览 common s ...

  8. Vim中异步语法检查ale配置

    注意 在设置let g:ale_sign_error = '✗'和let g:ale_sign_warning = '⚡'这些时,可能vim不让你保存,提示fenc这个东西. 所以,为了保险起见,你最 ...

  9. ABAP术语-ALE

    ALE 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/13/993351.html Application Link Enabling (A ...

随机推荐

  1. LwIP协议栈(2):网络接口

    在LwIP中,物理网络硬件接口结构保存在一个全局链表中,它们通过结构体中的 next 指针连接. struct netif { /// pointer to next in linked list * ...

  2. JavaScript之语句

    ECMA-262 规定了一组语句(也称为流控制语句).从本质上看,语句定义了 ECMAScript 中的主要语法,语句通常使用一或多个关键字来完成给定任务. if语句 if语句是最常见的一种语句,语法 ...

  3. C语言指针解说

    指针是C语言的一种数据类型.类似于C中的其它类型,比如int ,char 等.既然指针是一种类型,当我们定义该类型变量.该类型变量就称为指针变量. C中有了指针就有了指向. 指向:指针变量指向本身保存 ...

  4. ios 应用多语言自由切换实现

    第一次进入应用获取本机语言.1.假设本机语言在软件实现语言列表里.则默认选中本机语言,可是用户还是能够选择其他语言.2.假设本机语言不在软件实现语言列表里,则默认选中英语.用户还是能够选择其他语言. ...

  5. Java基础02 方法与数据成员(转载)

    对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class).同一类的对象属于相同的类型(type).我们可以定义类,并使用该定义来产生对象.   调用同一对 ...

  6. 从git上拉下来的严选weex项目demo

    项目地址 https://github.com/zwwill/yanxuan-weex-demo 在package.json里"author"之类后面加上 "privat ...

  7. asp.net *.ashx类型的文件使用说明

    你想创建一个ASP.NET文件,它不是aspx文件,它能动态的返回一个图片.XML文件或其他非HTML文件. 解决方案:使用ashx文件. 1. 使用ASHX handlers 首先,我们要回顾要使用 ...

  8. [转]Java中怎样把数组转换为ArrayList

    方法汇总: Element[] array = {new Element(1),new Element(2),new Element(3)}; ArrayList<Element> arr ...

  9. 转载:tar 解压缩命令~

    转载自:http://blog.csdn.net/dunyanan1/article/details/38869059tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文 ...

  10. Python中的多进程与多线程/分布式该如何使用

    在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程程序同时 ...