SAP R/3系统中ABAP/4编程概述


一、引论

  SAP R/3系统是德国SAP公司开发的几乎适用于所有行业的一整套集成化的企业管理系统软件,时下也称这种类型的软件为MRPII软件,SAP R/3系统可以为大中型企业提供从生产到销售等一系列过程的整体解决方案。SAP公司自从1994年年底进入中国市场以来,发展迅速,在MRPII软件领域取得了骄人的业绩,这主要归功于SAP公司开发的企业管理系统软件具有广泛的适应性,并且能够根据企业的具体情况进行系统定制以符合企业的实际业务情况,并且也提供了一系列编程接口对系统进行二次开发。另外,R/3系统的一个主要的特征就是具有高度的可集成性,与作业相关的工作处理过程链在系统结构上被连接了起来,因此所有相关的数据都在同一个基础上更新以及存储。在某一个应用模块中的每一个修改都会自动引起所涉及到的功能域中数据的更新。所以,所有的应用模块都是在一个标准的数据处理基础上实现的,R/3系统的集成模型如下图:


图1

  从图1可以看出,R/3系统所支持的功能是非常多的,内容包罗万象,为了能够使得R/3系统具有高度的灵活性以及可集成性,R/3系统提供了系统定制这项强大的功能,根据企业的具体业务需要而取舍。当然,由于在某些特殊的环境下,系统定制不能够解决企业的具体情况,那么需要利用R/3系统的开发平台以及所提供的ABAP/4编程语言来解决特殊的问题。本文主要是介绍ABAP/4编程上的一些概念、方法以及一些编程实例。由德国社会市场基金会以及SAP公司与西门子公司联合向上海交通大学捐赠了R/3系统软件与系统硬件,组建了R/3实验室,以对R/3系统软件进行研究开发并且对客户实施R/3系统提供培训以及咨询,本文也正是在此基础上完成的。我们真诚地希望能够有更多的客户以及研究开发人员来共同对R/3系统进行有益的研究与开发,以推动国产化MRPII软件的发展,同时为提高企业的生产效率而作出更多的努
力。

二、R/3系统的客户/服务器结构

  R/3系统具有良好的结构、可集成性与灵活性等特点,以更好地符合企业不断变化的业务需求,并且有助于在企业中推广实施R/3系统以及对R/3系统进行维护。R/3系统所具有的这些优势主要原因是由于R/3系统具有良好的客户服务器结构,R/3系统的客户服务器结构具有三层结构,客户端提供图形用户界面(GUI),用户借助图形用户界面能够与系统交互,向应用服务器层(中间层)请求服务,并且接收由应用服务器层返回的结果;中间层是应用服务器层,客户端的用户可以借助于GUI向应用服务器层的代理者发出请求完成某项任务,然后应用服务器层的代理者根据用户的请求调用相应的应用服务功能并对数据库服务器中的数据库进行操作,调用结束后就把结果以相应的显示方式返回给用户,大量的计算在后台服务器上进行,并且也减少了网络流量,具有相当大的优点;另外一个更为重要的优点是当系统的功能发生变化
时,只需要对应用服务器层的应用服务进行维护,而不需要对客户端进行维护,大大地减少了维护成本,并且也不需要对用户重新进行培训。R/3系统的客户服务器结构如下图:


图2

  从上图可以明显看出R/3系统这种三层客户/服务器结构的优越性之所在,当应用服务器层发生变化时,客户端几乎不要进行任何变动,所以有助于系统功能的增加与变动,因而对用户来说应用服务器层是透明的,同时也把大量的数据流量限制在数据库服务器与应用服务器之间,所以对于减少网络流量也是大有裨益的。

三、R/3系统的开发平台及ABAP/4编程准备

  ABAP/4全称是Advanced Business Application Programming/4,它是由SAP公司开发的一种编程语言以用于应用程序的交互式开发,属于第四代编程语言。ABAP/4开发平台如图:



  * R/3对象库
  R/3对象库主要描述SAP应用软件与客户软件的数据环境;
  * 屏幕生成器
  屏幕生成器主要用来创建屏幕,如屏幕的布局、测试需求以及流逻辑(flow logic);
  * 菜单生成器主要用来生成接口部件,如菜单条、菜单与功能键等;
  * ABAP/4开发平台主要用来开发标准应用软件,你可以使用ABAP/4开发平台来创建你自己的应用软件,然后你就可以使用该软件既可以处理SAP R/3系统的数据库表也可以处理你自己的数据库表,具有相当大的灵活性;你可以联机创建ABAP/4程序,并且或者可以联机运行你的程序或者可以在后台不需要任何修改地运行你的程序。当使用联机编程技术来书写ABAP/4程序时,你可以创建模块池,这些模块在屏幕处理期间由屏幕处理程序来调用。另外,使用批输入可以自动地把受保护的数据传送给SAP系统,ABAP/4包含有符合CPI-C标准的通信程序的编程语句。下面,详细地介绍ABAP/4编程所涉及的一些术语、概念。
  Program:ABAP/4程序;
  Report:能够生成清单的ABAP/4程序;
  ABAP/4 Module Pool:包含模块(采用联机编程)的ABAP/4程序;
  List:ABAP/4程序(指Report)输出的清单;
  以上这些术语主要用来区分不同类型的ABAP/4程序。使用ABAP/4编程时涉及两种功能,其一是报表功能,主要用于启动报表(Report),其二是ABAP/4开发功能,主要用来开发ABAP/4程序,这个功能也可以用来启动报表。那么ABAP/4的编程环境是怎样的呢?ABAP/4编程环境主要有带有语法检查的ABAP/4编辑器、联机帮助、ABAP/4调试器以及显示数据库及其表等功能模块。现在先简单地介绍ABAP/4程序结构,以使读者对ABAP/4的程序框架有一个比较大概的了解,如下图所示:


  ABAP/4程序由三个部分组成,每一个ABAP/4程序必须或者以PROGRAM或者以REPORT语句打头;一般建议如下,REPORT语句用于ABAP/4 reports,PROGRAM语句用于一般的ABAP/4程序,全局数据声明必须在程序的起始部分的数据声明部分中,语句部分可以包含不同的处理部分以完成不同的处理功能。接着我们简要地介绍一下ABAP/4语句的语法,一般来说ABAP/4程序由一系列独立的语句组成,每个语句必须以句号结尾,句子中的第一个单词是关键词,词与词之间至少有一个或者以上的空格,语句可以缩进几列,也可以跨越几行,一般来说语句由四个单词组成,除第一个为关键词外,第二、三、四个单词一般为参数、字段、常量等。下面开始围绕ABAP/4的程序结构对ABAP/4的数据声明部分所涉及到的一些语法及语句部分所涉及到的主要为输出语句的语法作一介绍。

四、ABAP/4数据声明语法

  1、数据类型及其属性
  ABAP/4数据类型主要有P(Packed number,标准长度为8字节,允许长度为1-16字节,以下类似)、I(Integer,标准长度与机器有关,1-16字节)、F(Floating point no.,标准长度与机器有关,1-16字节)、N(Numberic Text,1字节,1-max字节)、C(Text,1字节,1-max字节)、D(Data YYYYMMDD,8字节,8字节)、T(Time HHMMSS,6字节,6字节)与X(Hexadecimal,1字节,1-max字节)等数据类型,其中max为近似64000字节;在P类型字段中,一个字节存储两位数字,符号位存储在最后半个字节中,类型I定义为二进制数,取值范围为从-21477483648至-21477483647;一般来说,类型I用于计数器等,类型P用于商业计算,类型F用于数学计算,ABAP/4的数据域不得超过64000字节。

  2、常量的定义
  ABAP/4能够识别的常量有数字常量与文本常量两种,数字常量主要有数据类型P与I两种,文本常量主要有数据类型C与N,而其余的数据类型由于没有规定常量,则一律使用文本常量。注意,如果你要把一个带有小数点的字段值赋给字段类型P,那么你必须首先把它定义为文本串(如"2.17")。

  3、数据的声明
  在这里所说的数据(或者称为字段)相当于我们经常谈到的变量,数据的名称与变量的名称一样也有其命名规则。一般数据名称总是以字母作为首字符,余下的字符可以为字母也可以为数字,但除了可以使用下划线以外,不得使用任何其它特殊字符,并且长度不得超过30字节。另外,需要注意的是SPACE是预定义的字段,在ABAP/4语句中,参数名(即关键字的名字)不可以用作字段名;在声明数据时,如果没有指定类型,就缺省使用类型C;如果没有规定长度,那么就使用该类型的缺省长度,在声明字段名时,你也可以赋予字段相应的初始值(使用参数VALUE),当然在在VALUE后面,你仅可以指定常量。在声明同一类型的字段时,可以使用LIKE参数,被参照的字段既可以是内部字段,也可以是数据库中的字段;如果你使用LIKE参数来书写程序,那么该程序是很容易修改的,这是因为如果数据属性发生更改的话,你仅须在程序的一个地方进行改动,其它使用LIKE参数定义的数据其定义会自动发生改变;CLEAR语句可以把字段的值设置为与其类型相符的初始值,或者设置为数据字典中定义的初始值,需要注意的是CLEAR语句不会保存以VALUE参数所规定的初始值。在输出特定类型的字段时,如果在输出字段的输出格式中没有指定长度,就缺省使用标准输出长度;如果在输出格式中规定的长度超出了必须的长度,那么输出的值根据所规定的输出长度的具体数值或者左对齐或者右对齐;在类型P或者I的字段值输出时,先导的零被转换为空格,在千位数之间插入逗号;在输出浮点数时,可以使用WRITE语句的EXPONENT参数来确定指数值;使用参数DECIMALS,你可以在输出类型P,I或者F的字段时确定小数点后的位数,最后一位要取舍。

  4、赋值
  有许多ABAP/4语句可以用来给字段赋值,两个最为重要的是MOVE与COMPUTE语句,关键字COMPUTE是可选的,如果字段的类型与长度不匹配所赋的值,那么系统就会自动执行类型转换。另外,可以使用ADD、SUBSTRACT、MULTIPLY与DIVIDE语句进行简单的算术计算。类型转换的规则是这样的,如果类型C的字段值赋给类型P的字段,那么类型C的字段值仅允许+/-以及小数点。如果类型P的字段值赋给类型C的字段,那么就要格式化该数字值并且先导的零被转换为空格,当然如果你不要这种格式化的类型,那么你可以使用UNPACK语句;

  5、算术表达式
  一般来说关键字COMPUTE是可选的,且不限制括号内表达式的嵌套层次,运算符与括号被认为是单词,因此,你必须把它们用空格隔开;然而,对于函数来说,其括号中间必须跟有字段名,如a=(B+EXP(C)*E/SIN(3-G)是错误的算术表达式,而a=( B + EXP( C) * E / SIN( 3 - G )才是正确的算术表达式。在算术运算之前非数字值需要转换成数字值,运算符DIV与MOD是整数除法函数,STRLEN函数是返回字符串的长度。一般算术表达式只能使用于COMPUTE语句中。

  6、系统字段
  ABAP/4提供了一系列系统字段,编辑器命令SHOW SY允许你显示所有这些字段名及其定义的列表清单。你可以在程序中通过使用SY-<字段名>来引用系统字段;另外,你可以通过规定偏移量与长度来存取字段中的特定部分。注意,只有一些语句(如ASSIGN,WRITE...TO语句等)支持偏移量与长度以存取字段的特定部分。

  7、计算日期
  如果类型D的字段值赋给类型P的字段,那么ABAP/4就计算类型P字段的值为自1900年以来的天数。相反,如果类型P的字段值赋给类型D字段,那么ABAP/4就计算类型D的字段值为自1900年以来的年份。

  8、PARAMETERS语句
  PARAMETERS语句主要用来声明内部字段,与用DATA语句声明的字段相反,你可以在调用Report时在选择屏幕上为这些字段指定值,DATA语句的某些参数也可以使用PARAMETERS语句(如TYPE、LIKE、DECIMALS等)。尽管DATA允许你把初始值赋给带有VALUE的字段,PARAMETERS语句也允许你使用DEFAULT参数来设置缺省值。

  9、字段符号
  字段符号是一个非常重要的概念,相当于C语言中的指针。你可以使用FIELD-SYMBOLS语句来声明字段符号,在运行时,你可以使用ASSIGN语句来把某一个字段赋给字段符号,字段符号可以引用通过使用TABLES语句来声明的字段、字段串以及结构。在这里,尖括号是语法的一部分,通过这种方法,你可以清楚地区分字段符号与ABAP/4中的普通字段。如下图所示。

  从中不难看出,字段符号就是起到了指针的作用。一般来说你不可以使用偏移量与长度来存取字段的特定部分,然而,在ASSIGN语句中,你可以使用它们,当然你也可以在WRITE...TO语句与实际参数(PERFORM)中使用可变的偏移量与长度。

  10、字段的动态分配
  使用ASSIGN语句,你也可以把一个仅在运行时才能知道的字段赋给字段符号,如果所要分配的字段是R/3对象库中的字段(用TABLES语句声明),那么你可以使用TABLE FIELD参数。这将会减少执行语句的所要化费的时间,因为系统不会查找整个内部表清单。另外,你可以通过检查系统字段SY-SUBRC的值来确认是否有一字段分配给了字段符号。如果括号内有一字段,则SY-SUBRC=0,反之,则为大于0的值。一般来说,动态ASSIGN语句需要化费更多的时间,因此,仅在某些需要的情况下使用。

  五、简单的输出语句

  输出语句WRITE语句可以说是最为常用的语句,因此了解其语法格式及使用是非常有必要的。WRITE语句以对应的数据类型的格式输出字段或者常量的内容,连续的多个WRITE语句可以写在同一个输出行上;当输出行满的时候,从下一行继续开始;SKIP语句产生空行。在输出语句中,你也可以规定输出值的输出格式,这允许你从一个新行开始以及可以确定起始列与输出长度。格式选项DD/MM/YYYY可以格式化日期字段以符合用户主记录中的信息,格式选项UNDER允许你可以立即在已经输出的值下面显示值(左对齐)。一般来说,WRITE的语法是这样的:WRITE <format> <value> <options>.,<format>主要有/p(I)、/ Line feed、p 列的位置以及I输出长度,<value>主要有字段或者常量,选项主要指格式选项,在书写WRITE语句时,格式规定必须在输出值前面。格式规定的顺序必须如上所述,多个输出值之间以空格隔开,格式选项必须在输出值后面,如上两图所示。

六、结束语

  在ABAP/4编程中也会涉及到系统所提供的调试功能、使用SELECT语句查询数据、控制结构、数据结构、模块化技术、ABAP/4开发平台、SAP系统中的数据、逻辑数据库、特定报表的选择、只读数据库的存取以及后台处理等许多不同的强大的功能,这些功能的组成使得开发特定用户的需要成为可能,大大地提高了系统二次开发的可能性,使得系统的灵活性得到了很好的提高。由于篇幅的关系,本文不一一介绍,但希望有兴趣的研究人员可以对此进行进一步讨论。 

你可能感兴趣的:(编程,应用服务器,数据库,report,SAP,Parameters)