ABAP/4开发环境
ABAP/4表面看起来很简单,其实是一个复杂的语言。初学者常常感到很迷惑。只有知其然,你才能掌握这个语言。只有知其然并且知其所以然,你才能对这个令人兴奋的知识领域了解别人不了解的内容。
正如熟练的程序员所知道的那样,初学者很快也会知道,创建ABAP/4程序不仅仅是创建一个程序。它常常涉及到创建开发对象(development object)用来支持所创建的程序。
什么是R/3?
R/3是为大公司数据处理所设计的一套集成的应用程序。是由德国的SAP公司开发的(SAP:Systems Applications and Products for data processing)。R/3由运行环境和一组用SAP的4GL语言ABAP/4编写的应用程序所组成。设计这些应用程序是为了满足大型商业应用数据处理的需要。R/3和其以前的版本R/2在制造业非常流行。
R/3的目的是什么?
R/3的唯一目的就是提供一组紧密集成的大型商业应用。这些应用是:
•生产计划(PP,Production Planning) •物料管理(MM,Materials Management)
•销售和配送(SD,Sales and Distribution)
•财务会计(FI,Financial Accounting)
•控制(CO,Controlling)
•固定资产管理(AM,Fixed Assets Management)
•项目管理(PS,Project System)
•工作流(WF,Workflow)
•IS(IS,Industry Solutions)
•人力资源(HR,Human Resources)
•工厂维护(PM,Plant Maintenance)
•质量管理(QM,Quality Management)
这些应用程序有时被称为R/3的功能模块。
传统上我们是对单个模块进行评估,从多个软件供应商购买这些单独的模块,组装在一起成为数据处理应用。这样在这些单独的模块之间就需要接口。例如,物料管理需要与销售和财务联系,工作流需要从人力资源获得信息。在实施和维护这些接口时花费了大量的时间和金钱。
R/3预置了大多数大公司需要的核心商业应用。这些应用在同一个环境下共存。它们使用的是单个数据库和一组数据表。数据库的大小在12G到接近3T之间。标准的R/3配置有大约8000个数据表。
为什么我们需要知道这些功能模块?
作为一个ABAP/4程序员,知道这些功能模块是重要的。这是因为这些功能模块都是完全用ABAP/4编写的。要想成为一个熟练的R/3开发者,就必须了解这些功能模块。
例如,假定你已熟悉ABAP/4,要求你编写一个财务报表,对企业的每个供应商的年度借贷进行汇总。你或许知道如何编写ABAP代码,你知道如何才能满足这个需求吗?
又或者你的工作是承担了用ABAP/4开发新的应用程序。要求你设计一个系统,向潜在的客户提供股票行情。如果你不了解财务和销售系统,你就不知道你将创建的东西是否在R/3中已经存在了。你也不知道是否已经有了R/3数据表,包含了与你要存储的数据有类似甚至相同类型的数据。这些功能模块是高度集成的。“我要建立自己的数据表,保存自己的数据拷贝”,抱有这样想法的开发者很快就会发现他的数据是多余的,必须与数据库的已有数据同步。这样建立的应用程序没有充分利用R/3环境的高度集成的特性。
我指出这一点是因为许多希望成为独立的咨询顾问的开发者认为,只需学习ABAP/4就可以开发R/3应用。学习ABAP/4当然是一个很好的开始,但仅仅是一个开始。那些有兴趣成为ABAP/4咨询顾问的人常常忽视了在功能模块知识训练的重要性。虽然功能模块知识可以在实际的工作中学习,但是我希望表明的是,学习ABAP/4语言只是迈向SAP万里长征的第一步。如果你希望成为一个成功的独立咨询顾问,你就需要掌握功能模块知识。
了解Basis
Basis就象是R/3的操作系统,它介于ABAP/4代码和计算机操作系统之间。因此,SAP喜欢称之为中间件。
ABAP/4程序不能直接在操作系统上运行,需要一组程序(这组程序就是Basis)对其输入输出进行装载、解释和缓冲。
Basis在某些方面有点像Windows环境。Windows启动后为Windows程序提供了运行环境。没有Windows,为Windows环境编写的程序就不能运行。
Basis对于ABAP/4来说就象Windows对于Windows程序一样。Basis为ABAP/4
程序提供了运行环境。没有Basis,ABAP/4程序就不能运行。当你启动R/3时,你可以认为启动了Basis。Basis是一组带有接口的R/3系统程序,利用这些接口,用户就可以启动ABAP/4程序。
为了安装Basis,安装者在操作系统的命令提示符下运行r3inst程序。像大多数安装过程一样,这将产生一个目录结构,并将一组可执行文件拷贝到这个目录结构。这些可执行文件作为一个整体就形成了Basis。
为了启动R/3系统,只需输入命令startsap。Basis就被启动,处于运行状态,接受用户请求,运行ABAP/4程序。
ABAP/4程序运行在保护性的Basis环境,它们不能在操作系统环境下运行。Basis读取ABAP/4代码,并向操作系统指令解释ABAP/4代码。
ABAP/4程序不能直接访问操作系统的功能,而是利用Basis功能进行文件I/O和在窗口中显示数据。与操作系统的分离使得ABAP/4程序不用修改就可运行在任何支持R/3的系统上。能运行R/3的平台如下:
表 1.1 R/3支持的平台和数据库
操作系统
支持的硬件
支持的前端
支持的数据库
AIX SINIX
IBM SNI SUN
Win 3.1/95/NT
DB2 for AIX
SOLARIS HP-UX
Digital HP
OSF/Motif
Informix-Online
Digital-UNIX
Bull
OS/2
Oracle 7.1
Macintosh
ADABAS D
Windows NT
AT&T Compaq
Win 3.1/95/NT
Oracle 7.1
Bull/Zenith
OSF/Motif
SQL Server 6.0
HP (Intel) SNI
OS/2
ADABAS D
IBM (Intel)
Macintosh
Digital (Intel)
Data-General
OS/400
AS/400
Win95 OS/2
DB2/400
SAP提供了一组工具管理Basis系统。
Basis支持客户机/服务器模式。R/3是三层客户机/服务器模式,这三层是:
表示层服务器:实际上是一个程序sapgui.exe,提供用户界面。
应用服务器:一组可执行文件,它们解释ABAP/4程序,管理输入/输出。配置文件application server profile定义了应用服务器启动时启动的程序。
数据库服务器
这三层可以位于一台电脑上,也可以位于两台电脑上,实际使用时一般是位于三台电脑上。
与client有关的数据表和与client无关的数据表
R/3的数据表分为两类:与client有关的数据表和与client无关的数据表。一个数据表是与client有关的,如果它的第一个字段类型是CLNT。这种类型的字段长度总是3,约定它的名称是mandt。
R/3有三个系统:开发、测试和产品。缺省地,每个系统有三个client:000,001和066。开发和测试系统一般有3-6个client。产品系统一般只有一个client。
SAP Open SQL
Open SQL是ANSI SQL的子集。ABAP/4程序中使用Open SQL使得代码不用修改就可在不同的数据库环境运行。
初识ABAP/4
开发对象包括programs, screens, tables, views, structures, data models, messages, 和 includes。
ABAP/4程序主要有两种类型:
•reports •dialog programs
report的目的就是从数据库中读数据,以及输出数据。它仅由两个屏幕组成:selection screen和output screen。
selection screen:主要包含输入字段,允许用户输入产生报告的条件。
output screen:最终的报告。
selection screen是可选的。
Dialog Program比report更灵活也更复杂。它可以包含任意数量的screen。Screen sequence可以在运行时动态改变。在每一个screen中,可以有input fields, output fields, pushbuttons, 和多个scrollable area。
所有的开发对象及其组件都是存储在R/3数据库中,例如,report的源代码就是存储在数据表dd010s中。
程序名由2-8个字符组成,用户程序名要以y或z开头。A~X开头的程序是系统程序。
选择三个字符作为你的程序名称的前缀,例如,zkg。在后面的叙述中,“输入程序名称abc”,你应该输入zkgabc。
示例程序命名为ztxccnn,cc是章号,nn是序号。练习中用到的程序命名为ztyccnn,答案中的程序命名为ztzccnn。实用程序命名为y—xxxxx。
系统变量以sy开头,所以datum表示当前系统日期,sy-uzeit表示当前系统时间。所有的系统变量都在DDIC structure syst。在select语句中,常用到两个系统变量sy-subrc和sy-dbcnt。找到了记录时,Sy-subrc为0;否则为4。Sy-dbcnt表示找到的记录的序号,第一条记录为1,第二条记录为2,最后一条记录的序号也是记录数。
使用chain operator
冒号(:)成为chain operator,例如要定义两个表,可以用如下代码:
tables ztxlfa1.
tables ztxlfb1.
也可以用如下代码:
tables: ztxlfa1, ztxlfb1.
Select有两种形式。
第一种形式是:
select * from t1 [into wa] [where f1 op v1 and/or f2 op v2 ...][order by f1]. (other abap/4 statements) endselect.第二种形式是:
select * from t1 [into wa] [where f1 op v1 and/or f2 op v2 ...].第一种形式可以提取多条记录,按主键查找,可以使用第二种形式,第二种形式只能提取一条记录,第二种形式比第一种形式更快。
注释行用星号(*)和双引号(”),如下所示:
* This is a commenttables ztxlfa1. " This is also a comment
ABAP/4程序的语句以英文句号结尾。
数据字典
大多数ABAP/4程序都用到了数据字典(DDIC)对象。ABAP/4程序和DDIC对象的互锁机制使得深入了解R/3数据字典是基本的编程技巧。因此,从现在开始,我们将学习如何创建DDIC对象,例如table,data element和domain。
Table的类型
在R/3中,有三种类型的table:transparent table,pooled table,和 cluster table。
transparent table与数据库中的table有一对一的关系。他们有相同的名称,相同数量的字段,字段名也相同。transparent table用来存储应用数据,而pooled table和cluster table用来存储系统数据。
pooled table和cluster table与数据库中的table有多对一的关系。他们可以有不同的名称,不同数量的字段,字段名也可以不同。
Table Pool 和 Pooled Table
Table Pool是数据库中的一个table,它存储的是pooled table。R/3用table pool存储大量的(数十到数千个)小table(每个只有10-100行)。Table pool减少了同时打开多个小table所需要的数据库资源。Pooled table被SAP主要用于存储定制数据。
当安装一个大系统时,通常需要定制以便满足公司的特定需要。在R/3中,这是通过定制table实现的。定制table包含了编码、字段验证、数值范围以及R/3应用的参数。例如,定制table中包含了这样一些数据,国家编码、地区代码、汇率、折价方法等。
系统初始实现时,功能分析员设置定制table中的数据。
Table cluster 和cluster table
Cluster table类似于pooled table。它们用来存储少数几个(大约2-10个)非常大的table。这几个表有相同的主键,需要同时访问它们。
Table Cluster包含的table比table pool少的多。与table pool不同,table cluster中的每个table有相同的主键,多个不同的table中有相同主键的行组成table cluster中的一行。Cluster table减少了读数据库的次数,从而提高了性能。
Table由field组成,创建field需要data element。Data element包含了field标签和在线文档(也称为F1 help),field标签是field的文字说明,在屏幕上通常显示在field的左边,当光标在field输入栏时按F1键就显示F1 help。
Data element的定义要求domain。Domain包含了field的技术特性,即字段长度和数据类型。
Domain和data element是可重用的。一个Domain可以用于多个data element,一个data element可以用于多个field和多个table。
R/3预置了13000多个domain。
表3.1 Table, Field, Data Element, 和Domain命名约定
Object Type
Max Name Length
Allowed First Character
Table
10
y, z
Data element
10
y, z
Domain
10
y, z
Field
10
Any character
Field可以用除了保留字以外的任何字符开头,DDIC table trese包含了这些保留字。
创建的对象必须激活(activate)才能使用,对象修改后必须重新激活变更才有效。
浏览数据表数据的事务有四个SE16、SE17、SM30和SM31。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kevingao/archive/2005/04/04/335724.aspx