ABAP

ABAP (高级商务应用编程)是一种高级编程语言,由德国软件公司SAP开发。目前,和最近引入的Java一起,ABAP主要用作SAP的web应用服务器编程。这个服务器软件是SAP NetWeaver平台的一部分,这个平台主要用来开发商务应用。ABAP的语法和COBOL有些像。

目录

[隐藏]
<script type="text/javascript"> // </script>

[编辑] 历史

ABAP作为一种面向特定应用的第四代编程语言最早在20世纪80年代开发。它原本是作为一种报表语言应用在SAP R/2上,这是一个帮助大型公司在大型机上建立原材料管理和财务会计管理商务应用的平台。ABAP本来也是德语Allgemeiner Berichtsaufbereitungsprozessor的缩写,意思是“通用报表预处理器”。ABAP第一次引入了“逻辑数据库”的概念,它在基本的数据库层提供了更高级的抽象。

ABAP编程语言最初被SAP的开发者用于开发SAP R/3平 台。但它也被设计让SAP的客户用于增强SAP的软件应用&ndash;客户可以用ABAP编程开发自定义的报表和界面。这个编程语言对于程序员 来说很容易学习但并不是一个非程序设计人员可以直接使用的工具。编写ABAP程序需要良好的编程技巧和关系数据库方面的知识,如果知道面向对象设计的概念 更好。

虽然SAP最早于1992年就发布了R/3,但ABAP现在仍可以用于为R/3系 统编写程序。在20世纪90年代,随着计算机硬件的发展,越来越多的SAP的应用软件和系统都用ABAP来实现。一直到2001年,几乎所有的基本功能都 是由ABAP编程实现的。在1999年,SAP在发布R/3 4.6版的同时也发布了一个对ABAP的面向对象扩展,叫做ABAP Objects。

SAP最新的开发平台NetWeaver同时支持ABAP和Java

[编辑] 实现

[编辑] ABAP程序运行在哪里?

所有的ABAP程序都驻留在SAP数据库里。他们不像Java或者C++程序那样存储在一个单独的外部文件里,在数据库里所有的ABAP代码都以两 种形式存在:可以用ABAP workbench查看和编辑的源代码和由ABAP运行环境载入和解释的“编译”代码(技术上更精确的说是“产生”代码)。当一段ABAP源代码第一次被 调用时会隐含的进行代码产生。如果稍后源代码改变了或者程序访问的对象改变了(比如数据库的表添加了新的字段),产生代码就会自动重新产生。

ABAP程序在运行时系统(SAP核心的一部分)的控制下运行在SAP应用服务器里.运行时系统负责处理ABAP语句,控制显示的逻辑序列和响应事 件(比如,用户按一下屏幕上的一个按钮)。ABAP运行时系统的一个关键组件是数据库接口,它把ABAP的数据库无关语句(“开放SQL”)变成底层数据 库管理系统可以理解的语句(“本地SQL”)。数据库接口处理ABAP程序和关系数据库之间所有的通信;它也有一些其他的作用,比如把经常访问的数据缓存 到应用服务器本地的存储器里。

[编辑] SAP 系统和风景带

所有的SAP数据和软件都存在/运行于SAP系统的环境中。这个系统包括一个中心关系数据库和一个或多个访问该数据库里的数据和程序的应用服务器(“实例”)。一个SAP系统至少包括一个实例,但可以更多,主要看大小和性能上的需求。在一个多实例系统中,负载平衡机制来保证负载比较平均的分摊到各个可用的应用服务器上。
典型安装的Web应用服务器 (风景带) 包括三个系统:一个用于开发,一个用于测试和质量保证,一个用于生产。这个风景带可以包含更多的系统,比如一个单独用于单元测试和产前测试的系统,或者也 可以不完全包含这三个系统,比如只有开发和生产,没有单独的质量保证系统; 但三个是最常见的。 ABAP程序的创建和首次运行都在开发系统里。然后被分发到风景带的其他系统里。这些都是在变化和传输系统(CTS)的控制下进行的。CTS是一个负责并 发控制(比如防止两个开发人员同时修改同一段代码),版本管理和在质量保证和产品系统上部署程序的系统。

Web应用服务器有 三层组成:数据库层,应用层和表现层。这些层可以在同一台或不同的物理机器上运行。数据库层包括关系数据库及相关软件。应用层包括系统的实例。所有应用相 关的过程,包括业务事务和ABAP开发,都运行在应用层。表现层处理和系统的用户之间的交互。对ABAP应用服务器的在线访问可以通过专用图形接口 SAPGUI或者浏览器进行。

[编辑] ABAP程序的类型

ABAP有两种不同类型的程序:

[编辑] 报表程序

报表程序遵循一个相对简单的编程模型,用户可选的输入一系列参数(比如,在一个数据子集上的选择),然后程序根据输入的参数以一个交 互式列表的形式产生一张报表。报表程序的输出之所以是交互式的是因为它不是一个被动的显示;它允许用户使用ABAP语言通过深入挖掘功能以获得某个数据更 细节的视图,或者通过菜单命令触发更深入的处理,比如按不同的方式排序数据或者按某种选择条件过滤数据。这种表现报表的方法有很大的优势,特别是对于那些 需要处理大量信息但又要以很灵活的方式来检查这些信息的用户,这样他们就不会再被限制到一种固定的显示形式或者大小上无法管理的列表形式的报表中了。这种 方便的开发交互式报表的方式是ABAP语言的一大重要闪光点。
“报表”这个词有时会给人一种误解,其实创建数据可以在底层数据库修改而不仅仅是只读的报表程序是完全可以的。

[编辑] 在线程序

在线程序 (也叫模块池)不产生列表。这些程序使用一系列的屏幕来定义更复杂的用户交互模式。术语“屏幕”是指用户看到的实际的物理图像。每个屏幕还有一个“流逻 辑”;这是指由屏幕触发的ABAP代码,比如初始化屏幕,响应用户请求的应答和控制模块池的屏幕之间的序列的逻辑。每个屏幕都有自己的流逻辑,每个流逻辑 都分为“PBO” (输出前处理)和“PAI” (输入后处理)部分。在SAP的文档中,术语“dynpro” (动态程序)用来表示这种屏幕和流逻辑的结合。
在线程序并不是通过名字调用的,而是和一段事务代码联系在一起。用户可以通过自定义,角色依赖,事务菜单来触发它们。

除了报表和在线程序外,以类库,功能库和子程序池的形式开发共享代码段也是可以的。

[编辑] ABAP Workbench

ABAP Workbench有几个不同的工具用于编辑容器对象。这些工具可以为你提供涵盖整个软件开发周期各阶段的辅助。 创建和编辑容器对象的最重要的工具有:
ABAP Editer:编写程序代码
ABAP Dictionary:处理数据库表定义,检索全局类型
Menu Painter:设计用户界面(包括菜单栏,标准工具栏,应用栏,配置功能键)
Screen Painter:为用户对话框设计屏幕(动态程序)
Function Builder:显示和处理功能模块
Class Builder:显示和处理ABAP对象类

[编辑] The ABAP Dictionary

  • Enforces data integrity
  • Manages data definitions without redundancy
  • Is tightly integrated with the rest of the ABAP/4 Development Workbench.

Enforcing data integrity is the process of ensuring that data entered into the system is logical, complete, and consistent. When data integrity rules are defined in the ABAP/4 Dictionary, the system automatically prevents the entry of invalid data. Defining the data integrity rules at the dictionary level means they only have to be defined once, rather than in each program that accesses that data.
The following are examples of data lacking integrity:
A date field with a month value of 13
An order assigned to a customer number that doesn’t exist
An order not assigned to a customer
Managing data definitions without redundancy is the process of linking similar information to the same data definition. For example, a customer database is likely to contain a customer’s ID number in several places. The ABAP Dictionary provides the capability of defining the characteristics of a customer ID number in only one place. That central definition then can be used for each instance of a customer ID number.
The ABAP Dictionary’s integration with the rest of the development environment enables ABAP programs to automatically recognize the names and characteristics of dictionary objects.
Additionally, the system provides easy navigation between development objects and dictionary definitions. For example, as a programmer, you can double-click on the name of a dictionary object in your program code, and the system will take you directly to the definition of that object in the ABAP/4 Dictionary.
When a dictionary object is changed, a program that references the changed object will automatically reference the new version the next time the program runs. Because ABAP is interpreted, it is not necessary to recompile programs that reference changed dictionary objects.

[编辑] Defining data objects

There are various statements that you can use to define data objects.

The TABLES statement always refers to the global type of a flat structure that is defined in the ABAP Dictionary. The structure type for the data object in the program is taken from the Dictionary. The data object name is identical to the name of the structure type. They are normally used as an interface to the screen.
The DATA statement is usually used to define local data objects. The data object type is specified using the TYPE addition.
The PARAMETERS statement defines not only an elementary data object, but also an input field on the standard selection screen that is processed at the start of the program. When you activate a program, an internal load version is generated. A selection screen is generated from the PARAMETERS statement. When the program starts, memory areas are made available for the data objects. You can find further information on data objects in the unit entitled ABAP Statements and Data Declarations, or in the keyword documentation.
The SELECT statement ensures that data is read from the database. In order to read a record from a database table, the following information must be passed to the database: From which database table is the data read? (FROM clause) How many lines are read? The SINGLE addition shows that only one line is read. Which line is read? The WHERE clause shows which columns of the database table have which values.
For a SELECT SINGLE, the condition must be formulated so that one line is specified unambiguously.
Dialog programs are used for both reading from and writing to the database.

[编辑] Example(ABAP report)

REPORT  Zexmaple_report.
tables :vbrk,vbrp,kna1.
TYPE-POOLS : slis.
data:begin of itab_final occurs 0,
VKBUR like vbrp-VKBUR,
vbeln like vbrk-vbeln,
kunag like vbrk-kunag,
fkdat like vbrk-fkdat,
netwr like vbrk-netwr,
mwsbk like vbrk-mwsbk,
fkimg like vbrp-fkimg,
total like vbrk-netwr,
name1 like kna1-name1,
end of itab_final.


data:begin of itab occurs 0,
VKBUR like vbrp-VKBUR,
vbeln like vbrk-vbeln,
kunag like vbrk-kunag,
fkdat like vbrk-fkdat,
netwr like vbrk-netwr,
mwsbk like vbrk-mwsbk,
fkimg like vbrp-fkimg,
end of itab.

data: begin of itab_name occurs 0,
name1 like kna1-name1,
erdat like kna1-erdat,
end of itab_name.
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID.

DATA : W_BUDAT LIKE EKBE-BUDAT.

datA:T TYPE T.
select-options: vbeln for vbrk-vbeln.
select-options: fkdat for vbrk-fkdat.
select-options: kunag for vbrk-kunag.

select
vbrk~vbeln
vbrk~fkdat
vbrk~netwr
vbrk~mwsbk
vbrk~kunag
vbrp~fkimg
vbrp~vkbur

INTO CORRESPONDING FIELDS OF TABLE itab

FROM VBRK INNER JOIN VBRP ON VBRK~VBELN = VBRP~VBELN

WHERE VBRK~FKDAT IN FKDAT AND VBRK~KUNAG IN KUNAG AND VBRK~VBELN IN VBELN.


select name1
erdat
from kna1 into table itab_name
for all entries in itab
where erdat = itab-fkdat.

*---------------------------------------------------------------------------------------------------------*
loop at itab.
itab_final = itab.


read table itab_name with key erdat = itab-fkdat.
itab_final-name1 = itab_name-name1.
itab_final-total = itab-netwr + itab-mwsbk.


append itab_final.
clear itab_final.

[编辑] Example

From SAP NetWeaver:

*-----------------------------------------------------------------------
* set an exclusive lock at level object-type & object-id
*-----------------------------------------------------------------------
IF NOT lf_bapi_error = true.
IF ( NOT istourhd-doc_type IS INITIAL ) AND
( NOT istourhd-doc_id IS INITIAL )

CALL FUNCTION 'ENQUEUE_/DSD/E_HH_RAREF'
EXPORTING
obj_typ = istourhd-doc_type
obj_id = istourhd-doc_id
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
* terminate processing...
lf_bapi_error = true.—
* ...and add message to return table
PERFORM set_msg_to_bapiret2
USING sy-msgid gc_abort sy-msgno
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
gc_istourhd gc_enqueue_refdoc space
CHANGING lt_return.
ENDIF.
ENDIF.
ENDIF. " bapi error

[编辑] 参看

[编辑] 外部链接


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值