1. R3开发平台
1.1. R/3体系结构
1.1.1. 分布式体系结构
采用CS方式,从软件角度分析,SAP系统服务通过一系列工作过程(Work Process)处理。
基于三层架构
显示层(SAPGUI):
包含系统和用户之间的接口
应用层
从数据库提取数据进行处理,或者更新数据存储
数据库
三个级别组成。
1.1.2. R/3 Basis系统
属于R/3系统核心,是所有应用模块(财务管理、物流管理、人力资源管理)的实现平台
逻辑角度分析:R/3 Basis 系统包括了SAP R/3三层结构中的大部分显示层和应用层组件,并合二为一。
R/3系统有三部分组成:
l 核心基本服务(Kernel and Basis Services)
主要实现如下任务:
运行时应用:R/3的应用程序都在此软件处理器(Virtual Machine)上运行
用户和处理管理:管理多用户、多会话
数据库访问:提供给R3应用跟数据库系统的链接
系统通信:跟非SAP系统进行数据交换,并提供BAPI接口供其他系统访问
系统监控与管理:对运行时进行检测控制,并返回或者修改运行时参数
l ABAP开发平台(ABAP 开发平台)
一个以ABAP语言为基础功能强大而全面的系统定制和开发工具
l 演示层组件(Presentation Components)
系统个用户交互,同时将系统应用和桌面元素整合(MSOffice的整合)
1.1.3. 应用服务器
R/3系统的应用层由应用服务器和消息服务器组成。
应用程序在应用服务器中运行,并且于显示组件、数据库、以及其它应用服务器通信(通过消息服务器)
消息服务器:负责R/3系统中的分布式调度机之间进行数据交互,为同一系统多分布式服务器并行处理的基础。
在OS角度看:R/3运行时系统是并行、协同操作的系统;每个应用服务器中都包含多个工作过程(Work Process)以及调度机制。
² 应用服务器组件
对于系统开发人员,需要了解其结构、组件。
工作过程
应用程序在服务器中运行过程中的基本处理元素,一个服务器有多个工作过程;
每个工作过程都链接到当前应用上下文的内存区域。属于所有SAP对话步骤(Dialog Step)的基础。
调度机(Dispatcher)
工作过程和服务器用户的连接媒介,每个应用服务器都有一个调度机【任务:接受SAP GUI中的对话步骤请求,并且分配给处于空闲的工作过程,同时将对话步骤的输出结果传递给用户显示】
调度机在系统初始化过程,读取系统参数、启动工作过程,并且登录到消息服务器中。
网关服务器(Gateway Server)
R/3系统通讯协议接口(RFC,CPI/C);每个应用服务器都有一个网管,可以跟系统内部、外部通信【主要跟外部系统】
共享内存区(Shared memory)
同一应用服务器中所有工作过程可以使用的共用住内存区域,用于存储共享的资源【程序,数据库内容等】。
SAP的内存管理机制,可以确保工作过程总是可以寻址到相应的上下文,即与运行的程序当前的状态相关的数据。
一个匹配过程为对话步骤管理其所需的上下文【从共享内存区到相关的工作过程】减少了实际数据的复制数量。
提供局部数据缓存机制,减少数据库访问次数,提高处理效率。
从优化角度考虑,建议将不同应用模块的数据分散在不同的应用服务器组中进行处理。
总结:
应用服务器的上述结构:可以提供系统的性能(Scalability),固定数量的工作过程和对话步骤的调度有利于优化内存配置,工作过程的组件和内存区域可以独立应用而且可以复用。
不同的工作过程适合相对独立的工作。该机制适合多处理器系统结构。
² 工作过程调度
SAP作为分布式系统,登录同一个应用服务器的用户数将远远大于内部空闲工作过程。【系统不限制用户,而且同一用户可能占用多个工作过程】
关键:应用服务器中的调度机对工作过程在系统资源分配方面的重要性:
调度机为R/3应用层中的中心程序,于OS一道控制系统资源。
功能为:将事务负载分配给不同的进程,与显示层相链接并组织二者之间的通信。
SAP GUI,将用户输入转化为自己的数据格式,并传递给调度程序,该请求被调度程序接受,并按照先进先出(FIFO)的原则进行服务。
调度程序将用户的输入请求一个接一个分配给空闲的工作进程,数据在工作进程中进行实际处理。【分配是随机的,可能一个用户的数据请求在不同的工作进程处理】
数据处理完毕,处理结果将从工作过程通过调度机传递给SAP GUI,SAP对数据解释并且产生屏幕输出。【将有前端工作计算机用户工作台辅助进行】。
结论:
u 每一个对话步骤只分配一个工作过程处理
u 不同的对话步骤可以分配给不同的工作过程【程序的上下文必须被每一个新的工作过程所寻址】
u 一个工作过程可以处理不同用户的不同程序的对话步骤。
² 数据库连接
R/3启动时,应用服务器在数据库进行工作过程的注册,并为每一个工作进程分配一个专用的数据库通信信道。
在系统运行过程中,工作过程接受数据库系统提供的服务,此时不改变已注册的工作过程及其通道。
因此一个工作过程只能在一个单独的数据逻辑单元内部(Logical unit of work,不可分数据库操作单元)对数据库进行修改,而且不能够在该单元结束后恢复所做的修改。
【该事实将影响到ABAP程序对数据库操作的一致性维护】
1.1.4. 工作过程结构
工作过程为应用服务核心组件之一,其任务为处理各个独立的R/3应用程序的对话步骤。每个工作过程都包含如下两个软件处理器和一个数据库接口:
u 屏幕处理器(Screen Processor)
负责显示层的SAP GUI与应用层的R/3工作过程进行数据交换(由Dispatcher进行调度)
功能:将用户交互通过屏幕流逻辑进行处理,并将用户在显示服务器中输入的数据传递给程序。
R/3的应用程序设计中,用户交互和具体应用的处理方式有区别:
R/3 basis系统中有一种特殊的屏幕流逻辑语言,用于控制大部分的用户交互。
而屏幕处理器执行流逻辑语句,调用屏幕中的流逻辑代码模块,并保证用户在屏幕中的字段输入值从屏幕传至流逻辑的集体模块中。
在对话过程中通知ABAP处理器那个具体的代码模块被调用。
u ABAP处理器(ABAP Processor)
SAP的应用程序的处理通过SAP的ABAP代码执行的。
ABAP处理器负责ABAP语句组成的应用程序逻辑进行解释和处理,并且与数据库接口进行通信。
u 数据库接口
负责与数据库进行通信,并且可以访问事务对象。
如在:ABAP词典中定义的数据库对象、数据库目录信息和R/3仓库对象,控制数据库事务(Commit,Rollback处理)。同时管理应用服务器中的数据库表缓冲区域。
ABAP通过两种方式访问数据库:
Open SQL(用于对不同数据库进行标准化处理,完全集成到ABAP语言中的标准的SQL子集,通过数据库接口来识别不同的数据库,将Open Sql 转化为各个数据库的Native Sql)
Native SQL(不同数据库内置的SQL)
u 工作过程类型
工作过程可以分为不同类型,有所在应用服务器中所负责的具体任务所决定,不同类型的工作过程分别对应用户的不同种类的请求,以及在应用层的处理方式:
在启动R/3系统之前,需要确定系统的工作过程数量及其具体类型,通过固定工作过程的类型,以及合理分配可以优化系统资源:
具体类别如下:
² 对话工作过程(Dialog work process)
处理系统用户执行对话步骤的请求,一个应用服务器,需要多个对话工作过程
² 更新工作过程(Update work process)
执行数据库更新过程;属于SAP LUW的一部分。将会绑定多个数据库的LUW对话的操作结果,并且集中后台处理。
每个应用服务器至少一个对话工作过程。
² 后台工作过程(Background work process)
执行后台可运行的系统程序,后台作业(background jobs)
每一给应用服务器至少含有两个后台工作过程。
² 队列工作过程(Enqueue work process)【锁定服务工作过程】
在共享内存区管理表的锁定
锁定表包含R/3系统中数据库的逻辑锁定,是SAP LUW 中数据一致性的保证机制的组成部分。
一个R/3只能有一个锁定表,所以只有一个过程。
² 假脱机打印工作过程(Spool work process)
处理请求打印的数据集序列。
每一个应用服务器只包含一个打印工作过程。
总结:应用服务器可以具有多个工作类型的工作过程,从而具有多个功能。
在系统运行期间,可以使用系统管理功能在对话和后台模式之间转换,从而实现R/3系统在白天/黑夜的操作模式转换,调整工作过程的数量。
1.1.5. R/3应用程序
R/3应用程序,在R/3 Basis 系统应用服务器的工作过程中运行,因而独立于硬件和OS.
用户角度考虑:
关心一个系统应用程序中的商业事务流程以及可以输入和显示的界面和数据。
技术角度考虑:
那些程序被调用,什么类型的屏幕需要被显示(输入、输出),ABAP应用程序如何在应用服务器中进行处理等细节。
程序设计角度:
不同类型的屏幕为用户提供不同的类型服务,而且程序开发人员需要在设计过程中确定,什么类型的用户对话可以满足用户需求。
工作过程包括:屏幕处理器,ABAP处理器
一个应用程序包括:可能两个流逻辑,处理逻辑两部分。
流逻辑
应用程序和用户通过屏幕交互(SAP 有三种类型的用户屏幕,均可有开发人员设计创建);而屏幕由工作过程的屏幕处理器进行处理。
SAP标准屏幕:(输入界面、流逻辑)
流逻辑使用一套屏幕语言(Screen Language)编辑的特殊代码语句集合,屏幕的外观被SAPgui 显示,并将用户行为传回流逻辑。
屏幕响应用户行为,并调用程序模块。这些组成了具体的业务逻辑。
处理逻辑
R/3中,处理逻辑为ABAP程序。其在工作过程的ABAP处理器中运行。
其接受从屏幕处理传入的屏幕输入后进行处理,并将结果传送至屏幕处理器。
数据处理时:ABAP为主动
屏幕处理时:ABAP为被动,只是作为存储一系列模块的容器,在需要时被流逻辑调用。
屏幕逻辑中的事件
PBO(用户屏幕输出之间的处理)
PAI(系统接受用户输入之后的处理)
ABAP程序
使用ABAP语言开发并通过SAP开发平台中的各种工具编辑、编译并应用于SAP系统的程序。
SAP Basis系统中ABAP程序具有平台无关性,可以移植到其他SAP系统中,但是能否编译及应用依赖使用的数据表、数据元素。
系统开发人员:
如何撰写ABAP程序,并通过其实现用户交互控制显然比一个工作过程如何通过调度机在应用服务器中被处理的细节更重要。
ABAP程序在系统应用层的主要任务是:
设计用户对话和数据库对话
即:系统如何运行三个层次之间的数据传递和交互控制均通过ABAP程序来实现。
ABAP 中有特殊的语法集Open SQL,可以通过Database Interface(DI)访问数据库,实现与底层数据库类型无关的数据库操作。
ABAP还通过某些接口实现跟内存、顺序文件、外部接口等的数据集进行数据传输和交换。
1.2. R/3仓库与应用平台
R/3仓库,跟ABAP开发平台是SAP中的重要组成部分。系统开发的主要工具
R/3仓库中存储系统开发过程中的对象(如:程序),这些对象多数通过ABAP开发平台中的各种系统工具创建的。
1.2.1. R/3 Repository
SAP数据库系统中有两个主要逻辑区域,存储不同的数据内容
1:大量于特定“集团”(Client)相关的客户数据表和应用数据表数据(企业数据)
2:R/3仓库(R/3 Repository)存储所有SAP系统开发过程中的对象(ABAP development objects)
包括:ABAP程序、数据库表结构定义、系统数据类型。属于系统内部数据,可以在真个SAP系统中使用。
具体内容包括如下:
Ø R/3仓库对象
所有用户定制的仓库对象,都是通过ABAP工作台(ABAP Workbench)中的工具进行开发,并且存储于SAP数据库系统中。
这些仓库对象进一步按照不同的应用进行组织,具体应用称为【Development Classes】开发类别。
仓库对象必须有对应的开发类别,当然还包括版本控制信息、锁定机制。
Ø 开发类别
系统开发之前,先进行开发类别规划;
即明确该对象所属的类别,所有的仓库对象在R/3仓库中都按照开发类别进行分类,从而对象的集合形成组织单元即开发类别。这样方便进行管理【目录管理、传输控制管理等】
开发类别可以形成一个R/3的逻辑功能模块(如HR模块),更加通用的为一个模块中含有多个开发类【将这些对象进行组织并可以通过开发类别查询R/3对象】
另外开发类别的分配,还针对控制仓库对象的系统间传输过程中起重要作用。
各个仓库对象开发类别的分配在对象目录(Object Directory)中记录,也可以在ABAP Workbench中的对象导航器(Object Navigator)工具中查看和维护。
也可以通过Repository Information System对已经存在的仓库对象进行查询。
建议:一个开发类中的对象数量不要过多,可以随着项目的进展将开发对象分布在不同的开发类中。
开发类也是ABAP Workbench对象之一,对其所进行的修改也需要在Transport Organizer中记录。
1.2.2. ABAP Workbench
ABAP工作台是R/3系统开发平台,含有所有系统开发工具。通过这些工具可以实现基于早期可再生系统开发。
工具如下:
Object Navidator
ABAP Editor
Data Manager
ABAP Dictionary
ABAP Query
Function Builder
Class Builder
Menu Painter
Screen Painter
Workbench Organizer
ABAP Debugger等
1.2.3. 仓库对象传输
SAP 实施过程并不仅仅在一个系统内部完成的,一个项目至少应该包括:
开发系统(Develop system)
质量检测系统(QA system)
最终应用系统(Productive system)
三个开发环境。
在实际的应用中,可能存在多个不同的应用系统,有差别,又有联系。而且还需要将R/3仓库中的仓库对象(在开发环境下创建的),通过QA系统检测后,再传输到最终的产品中。
另外:如果存在多个系统,R3对象可能为不同系统所开发,所以必须进行传输控制和记录。
u 系统的定制通过定制请求进行
u 所有仓库对象的系统间传输必须通过工作台修改请求进行记录
u 通过传输系统完成
1.3. 系统开发工具
如何使用ABAP语言,和工作台工具进行SAP系统设计开发是本书的主要内容。
如下几个:
1.3.1. 对象导航器
对象导航器为ABAP Workbench众多开发工具的中心入口,可以在其中对R/3 Repository对象维护。
事务代码SE80(程序开发人员最常用的工具)
在SAP Client 中,执行SE80事务代码。调出对象浏览器如下。
在Object Navidator 可以根据当前所维护的对象,调出各种其他的工作台工具。属于一个集成开发环境。
左侧为:
对象浏览和导航区域
导航区域包括:对象类型列表,名称输入区域,以及上下文菜单(Context menu)
对象类型列表中选择程序(Program),开发类别(Development class),全局类别(Global class)和功能组(Function group)等需要在R/3中维护的对象
右侧为:
开发工具区域
包括:各种对象实际使用的ABAP工作台工具(ABAP Workbench tools),开发工具的工具栏(Tool functions),菜单(Menus)、标准工具栏以及应用工具栏的GUI元素。
简单实例操作步骤:
1:登录SAP,在主菜单下
2:选择工具,ABAP工作台->概览->应用层次 可以看到SE80 对象浏览器
3:双击进入对象浏览器,在对象列表中选择Program,在名称对话框输入新程序
Z_FIRST_PROGRAM
直接回车,将出现Create Object对话框。提示是否创建
点击是,将弹出Create Program对话框
该对话框,带有With Top INCL (即是否创建的同时增加一个头文件,存放数据定义),本例不需要,设为非选中状态。点击确定,由于登录用户没有权限,提示。
【权限不足,后续调整后继续】
1.3.2. 仓库信息系统
R/3仓库信息系统工具存储着所有开发过程中的仓库对象信息,系统用户可以通过R/3应用层次(Application Hierarchy)
在命令域输入SE81,直接进入
选择某一子树,将展开显示
如:
在工具、ABAP 工作台选择概览下的信息系统【事务代码SE84】进入仓库信息系统
界面如下所示:
1.3.3. ABAP编辑器
ABAP Editor 是开发平台最常用的工具之一,事务代码SE38
双击或者执行SE38事务代码,进入ABAP 编辑器,如下所示。
可以输入新程序名来创建程序
针对已存在程序,输入后,选择Display(显示)或者Change(修改)功能对该程序的各种元素进行显示和修改。
在ABAP 编辑器中支持源代码(Source Code)、变式(Variants)、属性(Attributes)、文档(DOcumentation)、文本元素(Text elements)等.通过选择子对象区域相应类型即可。
测试现有程序,查看、运行处理。
如选择一个程序:
测试base64编码 RSHTTP50
点击显示,显示程序源码:
点击最上面的操作按钮
如:检查【CTRL+F2】、激活【CTRL+F3】、直接处理【运行该程序F8】
检查完毕,激活,运行如下:
输入:测试Base64编码;
点击运行
输出如下:
测试创建新程序
在ABAP 编辑器中,输入测试程序Z_FIRST_PROGRAM,点击创建,弹出属性设定界面。
输入标题(Title),初始语言内置为中文
创建人 时间
并且显示当前状态
在属性(Attribute)设置如下:
类型为:可执行程序【可选择项包括: 】
状态为:测试程序【可选择项包括: 】
然后,点击保存,将弹出创建对象目录条目(Create Object Directory Entry)对话框
该示例,不涉及系统间传输过程,所以此实例程序选择【本地对象(Local Object)】,这样该对象将属于本地开发类别$Tmp【不能传输,只能测试】。
选择本地对象保存后,程序作为R/3仓库对象的初始创建过程结束
测试将 具体代码编辑界面部分代码有系统自动生成
此时【Z_FIRST_PROGRAM】不活动状态,尚未激活。如果不能编辑,点击激活【CTRL+F3】
将会弹出激活对话框,选择需要激活的程序,即进入激活状态。
输入代码,然后点击检查,将执行编译,
编译如果有错误,给予提示。修正错误重新检查。编译,激活,运行如下
针对ABAP编辑器可以进行如下设置编辑格式、样式显示、关键字、程序名、变量小些等。
选择Utilities-Settings菜单
点击设置,进入ABAP Editor设置
进行相应调整,单击确认。
1.3.4. ABAP数据字典
ABAP数据字典(Data Dicionary DDIC)是SAP系统中定义和管理数据元素和数据库元素的中心工具。
其他开发平台工具都可以访问在数据字典中定义的对象。
SAP项目中的所有的数据库表结构和系统全局数据类型等,都要在数据库字典中创建并维护。
功能:
Ø 自定义系统共用数据类型(基本类型、结构、表),供所有SAP程序使用;
定义数据类型除了类型技术属性、长度外,还有附加语义特征。【可以为某个字段在DDIC中定义查询帮助】
还有:系统自动的输入检查、字段帮助文档等都可以在DDIC中定义。
Ø 定义数据库对象结构(数据库表、视图、索引等),同时相关的数据库对象将在数据库中为创建,可以使用各种方式把数据存储在物理数据库中,然后通过数据字典显示。
Ø 提供一些工具进行屏幕字段的格式化、编辑(如:定义字段的说明文本F1 help,F4 Help)等。
数据字典工具:Tools->ABAP Workbench->Development->ABAP Dictionnary 事务代码SE11
双击、或者命令区域输入SE11,进入数据库字典管理界面。
可在数据字典创建的元素分为三类:
l 公共数据类型:(数据元素、结构提、表类型等供ABAP程序使用)
l 数据库对象:(表、索引、视图等,这些结构在数据字段创建后,其实体将在数据库中创建)
l 其他元素:(字段输入时的查询帮助、数据库锁定等)
具体介绍如下:
² 数据库表(Database table)
数据库对象,独立数据库存在,一旦创建,对应实体结构在物理数据库创建,表结构有一系列DDIC字段组成
² 视图(View)
数据表的逻辑表现形式。
² 数据类型(Data type)
数据元素(可以用过结构类型和表类型的组件字段)、结构类型、表类型
² 域(Domain)
每个数据元素必须有一个域,来确定数据元素的ABAP内置基本类型、长度、小数位、取值范围。
² 查询帮助(Search Help)
屏幕字段的可能输入值帮助列表
² 锁定对象(Lock Object)
解决多用户同时操作同一数据表时的数据一致性问题