ABAP


ABAP is a high-level programming language created by the German software company SAP SE. It is extracted from the base computing languages Java, C, C++ and Python. It is currently positioned, alongside Java, as the language for programming the SAP NetWeaver Application Server, which is part of the SAP NetWeaver platform for building business applications.

Introduction

ABAP is one of the many application-specific fourth-generation languages first developed in the 1980s. It was originally the report language for SAP R/2, a platform that enabled large corporations to build mainframe business applications for materials management and financial and management accounting. ABAP establish integration between independent software.
ABAP used to be an abbreviation of Allgemeiner Berichts-Aufbereitungs-Prozessor, German for "generic report preparation processor", but was later renamed to the English Advanced Business Application Programming. ABAP was one of the first languages to include the concept of Logical Databases, which provides a high level of abstraction from the basic database level,which supports every platform, language and units.
The ABAP language was originally used by developers to develop the SAP R/3 platform. It was also intended to be used by SAP customers to enhance SAP applications – customers can develop custom reports and interfaces with ABAP programming. The language was geared towards more technical customers with programming experience.
ABAP remains as the language for creating programs for the client–server R/3 system, which SAP first released in 1992. As computer hardware evolved through the 1990s, more and more of SAP's applications and systems were written in ABAP. By 2001, all but the most basic functions were written in ABAP. In 1999, SAP released an object-oriented extension to ABAP called ABAP Objects, along with R/3 release 4.6.
SAP's current development platform NetWeaver supports both ABAP and Java.
ABAP has an abstraction between the business applications, the operating system and database. This ensures that applications do not depend directly upon a specific server or database platform and can easily be ported from one platform to another.
SAP Netweaver currently runs on UNIX, Microsoft Windows, i5/OS on IBM System i, and z/OS on IBM System z. Supported databases are HANA, SAP ASE, IBM DB2, Informix, MaxDB, Oracle, and Microsoft SQL Server.

ABAP runtime environment

All ABAP programs reside inside the SAP database. They are not stored in separate external files like Java or C++ programs. In the database all ABAP code exists in two forms: source code, which can be viewed and edited with the ABAP Workbench tools; and generated code, a binary representation somewhat comparable with Java bytecode. ABAP programs execute under the control of the runtime system, which is part of the SAP kernel. The runtime system is responsible for processing ABAP statements, controlling the flow logic of screens and responding to events ; in this respect it can be seen as a Virtual Machine comparable with the Java VM. A key component of the ABAP runtime system is the Database Interface, which turns database-independent ABAP statements into statements understood by the underlying DBMS. The database interface handles all the communication with the relational database on behalf of ABAP programs; It also contains extra features such as buffering of tables and frequently accessed data in the local memory of the application server.

SAP systems and landscapes

All SAP data exists and all SAP software runs in the context of a SAP system. A system consists of a central relational database and one or more application accessing the data and programs in this database. A SAP system contains at least one instance but may contain more, mostly for reasons of sizing and performance. In a system with multiple instances, load balancing mechanisms ensure that the load is spread evenly over the available application servers.
Installations of the Web Application Server typically consist of three systems: one for development; one for testing and quality assurance; and one for production. The landscape may contain more systems or it may contain fewer ; nevertheless three is the most common configuration. ABAP programs are created and undergo first testing in the development system. Afterwards they are distributed to the other systems in the landscape. These actions take place under control of the Change and Transport System, which is responsible for concurrency control, version management, and deployment of programs on the QA and production systems.
The Web Application Server consists of three layers: the database layer; the application layer; and the presentation layer. These layers may run on the same or on different physical machines. The database layer contains the relational database and the database software. The application layer knowledge contains the instance or instances of the system. All application processes, including the business transactions and the ABAP development, run on the application layer. The presentation layer handles the interaction with users of the system. Online access to ABAP application servers can go via a proprietary graphical interface, which is called "SAP GUI", or via a Web browser.

Software layers

ABAP software is deployed in software components.
Examples for these are:
A transaction in SAP terminology is the execution of a program. The normal way of executing ABAP code in the SAP system is by entering a transaction code. Transactions can be called via system-defined or user-specific, role-based menus. They can also be started by entering the transaction code directly into a command field, which is present in every SAP screen. Transactions can also be invoked programmatically by means of the ABAP statements CALL TRANSACTION and LEAVE TO TRANSACTION.
The general notion of a transaction is called a Logical Unit of Work in SAP terminology; the short form of transaction code is T-code.

Types of ABAP programs

As in other programming languages, an ABAP program is either an executable unit or a library, which provides reusable code to other programs and is not independently executable.
ABAP distinguishes two types of executable programs:
Reports follow a relatively simple programming model whereby a user optionally enters a set of parameters and the program then uses the input parameters to produce a report in the form of an interactive list. The term "report" can be somewhat misleading in that reports can also be designed to modify data; the reason why these programs are called reports is the "list-oriented" nature of the output they produce.
Module pools define more complex patterns of user interaction using a collection of screens. The term “screen” refers to the actual, physical image that the user sees. Each screen also has a "flow logic", which refers to the ABAP code implicitly invoked by the screens, which is divided into a "PBO" and "PAI" section. In SAP documentation the term “dynpro” refers to the combination of the screen and its flow logic.
The non-executable program types are:
An INCLUDE module gets included at generation time into the calling unit; it is often used to subdivide large programs.
Subroutine pools contain ABAP subroutines.
Function groups are libraries of self-contained function modules.
Object classes and interfaces are similar to Java classes and interfaces; the first define a set of methods and attributes, the second contain "empty" method definitions, for which any class implementing the interface must provide explicit code.
Type pools define collections of data types and constants.
ABAP programs are composed of individual sentences. The first word in a statement is called an ABAP keyword. Each statement ends with a period. Words must always be separated by at least one space. Statements can be indented as you wish. With keywords, additions and operands, the ABAP runtime system does not differentiate between upper and lowercase.
Statements can extend beyond one line. You can have several statements in a single line. Lines that begin with asterisk * in the first column are recognized as comment lines by the ABAP runtime system and are ignored. Double quotations marks indicate that the remainder of a line is a comment.

Development environment

There are two possible ways to develop in ABAP. The availability depends on the release of the ABAP system.

ABAP Workbench

The ABAP Workbench is part of the ABAP system and is accessed via SAP GUI. It contains different tools for editing programs. The most important of these are :
The Object Navigator provides a single integrated interface into these various tools.

ABAP Development Tools

The ABAP Development Tools, formally known as "ABAP in Eclipse", is a set of plugins for the Eclipse platform to develop ABAP.
In this scenario, the ABAP developer installs the required tools on his computer and works locally, whereas a continuous synchronization with the backend is performed.

ABAP Dictionary

The ABAP Dictionary contains all metadata about the data in the SAP system. It is closely linked with the ABAP Workbench in that any reference to data will be obtained from the dictionary. Developers use the ABAP Dictionary transactions to display and maintain this metadata.
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.
A brief description of the most important types of dictionary objects follows:
This brief description of the ABAP syntax begins with the ubiquitous "Hello world" program.

Hello world


REPORT TEST.
WRITE 'Hello World'.

This example contains two statements: REPORT and WRITE. The program displays a list on the screen. In this case, the list consists of the single line "Hello World". The REPORT statement indicates that this program is a report. This program could be a module pool after replacing the REPORT statement with PROGRAM.

Chained statements

Consecutive statements with an identical first part can be combined into a "chained" statement using the chain operator :. The common part of the statements is written to the left of the colon, the differing parts are written to the right of the colon and separated by commas. The colon operator is attached directly to the preceding token, without a space.
Chaining is often used in WRITE statements. WRITE accepts just one argument, so if for instance you wanted to display three fields from a structure called FLIGHTINFO, you would have to code:

WRITE FLIGHTINFO-CITYFROM.
WRITE FLIGHTINFO-CITYTO.
WRITE FLIGHTINFO-AIRPTO.

Chaining the statements results in a more readable and more intuitive form:

WRITE: FLIGHTINFO-CITYFROM, FLIGHTINFO-CITYTO, FLIGHTINFO-AIRPTO.

In a chain statement, the first part is not limited to the statement name alone. The entire common part of the consecutive statements can be placed before the colon. Example:

REPLACE 'A' WITH 'B' INTO LASTNAME.
REPLACE 'A' WITH 'B' INTO FIRSTNAME.
REPLACE 'A' WITH 'B' INTO CITYNAME.

could be rewritten in chained form as:

REPLACE 'A' WITH 'B' INTO: LASTNAME, FIRSTNAME, CITYNAME.

Comments

ABAP has 2 ways of defining text as a comment:
Example:

  • **************************************
  • * Program: BOOKINGS **
  • * Author: Joe Byte, 07-Jul-2007 **
  • **************************************
REPORT BOOKINGS.
  • Read flight bookings from the database
SELECT * FROM FLIGHTINFO
WHERE CLASS = 'Y' "Y = economy
OR CLASS = 'C'. "C = business

Spaces

Code in ABAP is whitespace-sensitive.

x = a+b.

assigns to variable x the substring of the variable a, starting from b with the length defined by the variable c.

x = a + b.

assigns to variable x the sum of the variable a and the result of the call to method b with the parameter c.

ABAP statements

In contrast with languages like C/C++ or Java, which define a limited set of language-specific statements and provide most functionality via libraries, ABAP contains an extensive amount of built-in statements. These statements traditionally used sentence-like structures and avoided symbols, making ABAP programs relatively verbose. However, in more recent versions of the ABAP language, a terser style is possible.
An example of statement based syntax versus expression-based syntax :

ADD TAX TO PRICE.
  • is equivalent to
PRICE = PRICE + TAX.

Data types and variables

ABAP provides a set of built-in data types. In addition, every structure, table, view or data element defined in the ABAP Dictionary can be used to type a variable. Also, object classes and interfaces can be used as types.
The built-in data types are:
TypeDescription
IInteger
PPacked decimal
FFloating point
NCharacter numeric
CCharacter
DDate
TTime
XHexadecimal
STRINGVariable-length string
XSTRINGVariable-length raw byte array

Date variables or constants contain the number of days since January 1, 1 AD. Time variables or constants contain the number of seconds since midnight. A special characteristic of both types is that they can be accessed both as integers and as character strings, which can be used for date and time handling. For example, the code snippet below calculates the last day of the previous month :

DATA LAST_EOM TYPE D. "last end-of-month date
  • Start from today's date
LAST_EOM = SY-DATUM.
  • Set characters 6 and 7 of the YYYYMMDD string to "01",
  • giving the first day of the current month
LAST_EOM+6 = '01'.
  • Subtract one day
LAST_EOM = LAST_EOM - 1.
WRITE: 'Last day of previous month was', LAST_EOM.

All ABAP variables have to be explicitly declared in order to be used. They can be declared either with individual statements and explicit typing or, since ABAP 7.40, inline with inferred typing.

Explicitly typed declaration

Normally all declarations are placed at the top of the code module before the first executable statement; this placement is a convention and not an enforced syntax rule. The declaration consists of the name, type, length, additional modifiers and optionally an initial value:

  • Primitive types:
DATA: COUNTER TYPE I,
VALIDITY TYPE I VALUE 60,
TAXRATE TYPE P DECIMALS 1,
LASTNAME TYPE C,
DESCRIPTION TYPE STRING.
  • Dictionary types:
DATA: ORIGIN TYPE COUNTRY.
  • Internal table:
DATA: T_FLIGHTS TYPE TABLE OF FLIGHTINFO,
T_LOOKUP TYPE HASHED TABLE OF FLT_LOOKUP.
  • Objects:
DATA: BOOKING TYPE REF TO CL_FLT_BOOKING.

Notice the use of the colon to chain together consecutive DATA statements.

Inline declaration

Since ABAP 7.40, variables can be with the following syntax:

DATA = 'VALUE'.

For this type of declaration it must be possible to infer the type statically, e.g. by method signature or database table structure.
This syntax is also possible in OpenSQL statements:

SELECT * FROM ekko into @DATA WHERE ebeln EQ @lv_ebeln.

ABAP Objects

The ABAP language supports object-oriented programming, through a feature known as "ABAP Objects". This helps to simplify applications and make them more controllable.
ABAP Objects is fully compatible with the existing language, so one can use existing statements and modularization units in programs that use ABAP Objects, and can also use ABAP Objects in existing ABAP programs. Syntax checking is stronger in ABAP Objects programs, and some syntactical forms of certain statements are not permitted.
Objects form a capsule which combines the character to the respective behavior. Objects should enable programmers to map a real problem and its proposed software solution on a one-to-one basis. Typical objects in a business environment are, for example, ‘Customer’, ‘Order’, or ‘Invoice’. From Release 3.1 onwards, the Business Object Repository of SAP Web Application Server ABAP has contained examples of such objects. The BOR object model will be integrated into ABAP Objects in the next Release by migrating the BOR object types to the ABAP class library.
A comprehensive introduction to object orientation as a whole would go far beyond the limits of this introduction to ABAP Objects. This documentation introduces a selection of terms that are used universally in object orientation and also occur in ABAP Objects. In subsequent sections, it goes on to discuss in more detail how these terms are used in ABAP Objects. The end of this section contains a list of further reading, with a selection of titles about object orientation.
In object-oriented programming, objects usually have the following properties:
The ABAP Core Data Services are the implementation of the general CDS concept for AS ABAP. ABAP CDS makes it possible to define semantic data models on the central database of the application server. On AS ABAP, these models can be defined independently of the database system. The entities of these models provide enhanced access functions when compared with existing database tables and views defined in ABAP Dictionary, making it possible to optimize Open SQL-based applications. This is particularly clear when an AS ABAP uses a SAP HANA database, since its in-memory characteristics can be implemented in an optimum manner.
The data models are defined using the data definition language and data control language provided in the ABAP CDS in the ABAP CDS syntax. The objects defined using these languages are integrated into ABAP Dictionary and managed here too.
CDS source code can only be programmed in the Eclipse-based ABAP Development Tools. The Data Definition Language and the Data Control Language use different editors.

Features

SAP NW ABAPLiteralsArithmetic OperatorsConditional Expressions
7.40 SP05
  • In SELECT list, e.g. literal as FieldName
  • As RHS value
  • +
  • -
  • Boolean operators
  • * NOT, AND, OR
  • Comparison operators
  • * BETWEEN, =, <>, <, >, <=, >=, LIKE
  • * IS NULL
  • 7.40 SP08
  • /
  • 7.50
    7.51
  • Function as RHS value
  • SAP NW ABAPAggregate functionsNumeric functionsString functions
    7.40 SP05
    • AVG
    • MAX
    • MIN
    • SUM
    • COUNT
    • COUNT
  • CEIL
  • MOD
  • SUBSTRING
  • LPAD
  • 7.40 SP08
  • ABS
  • DIV
  • DIVISION
  • FLOOR
  • ROUND
  • CONCAT
  • REPLACE
  • 7.50
  • CONCAT_WITH_SPACE
  • INSTR
  • LEFT
  • LENGTH
  • LTRIM
  • RIGHT
  • RPAD
  • RTRIM
  • 7.51
  • AVG to specify return type
  • FLTP_TO_DEC
  • UPPER
  • LOWER
  • SAP NW ABAPByte string functionsDate and time functionsOther functions
    7.40 SP05
    • CAST to built-in DDIC types, e.g. abap.fltp
    7.40 SP08
  • COALESCE
  • CURRENCY_CONVERSION
  • UNIT_CONVERSION
  • DECIMAL_SHIFT
  • 7.50
  • BINTOHEX
  • HEXTOBIN
  • DATS_DAYS_BETWEEN
  • DATS_ADD_DAYS
  • DATS_ADD_MONTHS
  • DATS_IS_VALID
  • TIMS_IS_VALID
  • TSTMP_IS_VALID
  • TSTMP_CURRENT_UTCTIMESTAMP
  • TSTMP_SECONDS_BETWEEN
  • TSTMP_ADD_SECONDS
  • CAST
  • * to data elements, e.g. CHAR80
  • * can be nested
  • 7.51
  • ABAP_SYSTEM_TIMEZONE
  • ABAP_USER_TIMEZONE
  • TSTMP_TO_DATS
  • TSTMP_TO_TIMS
  • TSTMP_TO_DST
  • DATS_TIMS_TO_TSTMP
  • CAST
  • * PRESERVING TYPE
  • * SSTRING to other types
  • * CLNT, LANG, TIMS, UNIT to data elements of type CHAR and SSTRING
  • * CHAR, SSTRING, NUMC to ACCP and vice versa
  • * Aggregate function as operand
  • SAP NW ABAPConditional expressionsExtensibility Associations
    7.40 SP05
    • "Simple" CASE
    • Nested CASE statements
  • $EXTENSION.*
  • Path expressions in
  • * SELECT list
  • * FROM clause
  • * WHERE clause
  • * HAVING clause
  • Filter conditions in path expressions, e.g. Products._Texts as english_name
  • 7.40 SP08
  • "Searched" CASE
  • EXTEND VIEW
  • 7.50
  • CASE expressions can be used as operands in CAST functions
  • EXTEND VIEW with input parameters, path expressions, conversions, date and time functions
  • 7.51
  • Function as RHS value
  • EXTEND VIEW with aggregate functions, GROUP BY clauses and UNIONs
  • Association definitions in views with UNIONs
  • Default filters for associations
  • Cardinality "to many" can be specified in path filters
  • SAP NW ABAPSession variablesInput parametersOther
    7.40 SP05
    • KEY elements
    7.40 SP08
  • input parameters on most DBs
  • 7.50
  • $session.user
  • $session.client
  • $session.system_language
  • Input parameters on AnyDB
  • Table function
  • 7.51
  • $session.system_date
  • Metadata extensions
  • Internal tables in ABAP

    Internal tables are an important feature of the ABAP language. An internal table is defined similarly to a vector of structs in C++ or a vector of objects in Java. The main difference with these languages is that ABAP provides a collection of statements to easily access and manipulate the contents of internal tables. Note that ABAP does not support arrays; the only way to define a multi-element data object is to use an internal table.
    Internal tables are a way to store variable data sets of a fixed structure in the working memory of ABAP, and provides the functionality of dynamic arrays. The data is stored on a row-by-row basis, where each row has the same structure.
    Internal tables are preferably used to store and format the content of database tables from within a program. Furthermore, internal tables in connection with structures are an important means of defining complex data structures in an ABAP program.
    The following example defines an internal table with two fields with the format of database table VBRK.

    • First define structured type
    TYPES: BEGIN OF t_vbrk,
    VBELN TYPE VBRK-VBELN,
    ZUONR TYPE VBRK-ZUONR,
    END OF t_vbrk.
    • Now define internal table of our defined type t_vbrk
    DATA : gt_vbrk TYPE STANDARD TABLE OF t_vbrk,
    gt_vbrk_2 TYPE STANDARD TABLE OF t_vbrk. "easy to define more tables
    • If needed, define structure
    • Definition with type or with reference to internal table:
    DATA : gs_vbrk TYPE t_vbrk,
    gs_vbrk2 LIKE LINE OF gt_vbrk2.
    • You can also define table type if needed
    TYPES tt_vbrk TYPE STANDARD TABLE OF t_vbrk.

    History

    The following list only gives a rough overview about some important milestones in the history of the language ABAP. For more details, see .
    VersionRelease dateMajor changes
    4.6CMay 2000
    • ABAP Objects
    6.402004
  • 7.02006
  • Switch framework/Enhancement concept
  • 7.02
  • Expressions like check lcl=>mi + abs >= 3.
  • 2012-11-29
  • "Code pushdown"—use advanced features from the underlying database
  • Constructor expressions
  • Partially Implemented test classes' interfaces
  • Table Expressions
  • Internal table line existence/line index functions
  • December 2013
  • MOVE-CORRESPONDING for internal tables
  • LET expression in constructor expressions
  • CORRESPONDING operator
  • CDS Views
  • ABAP Managed Database Procedures
  • September 2014
  • FOR expressions
  • Constructor operator REDUCE
  • Start value for constructor expressions
  • GROUP BY for internal tables
  • Filter expressions and default values for table expressions
  • Open SQL inline declarations after INTO statement
  • Optional interface methods
  • November 2015
  • New built-in data type INT8
  • Relational expression IS INSTANCE OF
  • Open SQL host expressions
  • Open SQL expressions ROUND, CONCAT, LPAD, LENGTH, REPLACE, RIGHT, RTRIM and SUBSTRING
  • Open SQL path expressions
  • Open SQL SELECT UNION
  • Open SQL INSERT FROM subquery
  • October 2016
  • Enumerations
  • Common table expressions in Open SQL
  • Open SQL/CDS CROSS JOIN
  • CDS client handling
  • Metadata extensions in CDS
  • Date and Time in Open SQL/CDS
  • Floating point on Open SQL/CDS
  • September 2017
  • Virtual sorting of internal tables
  • September 2019
  • New Built-In Data Types
  • New Built-In ABAP Type utclong
  • Calculation Assignments
  • Decimal Places in Time Stamps
  • Client Handling
  • Extensions of the INTO Clause
  • Definition of Associations
  • New Aggregate Function STRING_AGG
  • New Built-In Functions
  • Addition DISTINCT Optional in Aggregate Function COUNT
  • Window Expressions
  • SQL Conditions Revised
  • Temporal Hierarchies
  • New Hierarchy Navigators
  • Aggregate Expressions in SQL Expressions
  • CAST Matrix Revised
  • Strict Mode in the Syntax Check
  • Syntax Check for Literals and Host Constants
  • Annotation for Database Hints
  • Annotations for Releasing Elements
  • Specifying CDS Entities After USING
  • Quotation Marks for Logical Schemas
  • Addition in place of the Statement late numbering
  • Addition in class... unique
  • External name of an action
  • Static Field Control
  • Arbitrary Name for Handler Methods
  • Behavior Pool No Exceptions
  • Entity Manipulation Language
  • TYPE STRUCTURE FOR
  • Response Information
  • Absolute Type Names
  • Business Service
  • Authorization Checks in Updates
  • Implicit Message Type in IF_T100_DYN_MSG
  • Using Test Classes
  • Addition COMBINATION MODE OR|AND of the Statement GRANT SELECT ON
  • Addition REDEFINITION of the Statement GRANT SELECT ON
  • Predicate VOID
  • Addition IN SCENARIO of the Statement GRANT SELECT ON
  • Generic Aspect Condition of the Statement DEFINE ROLE
  • New Variant INHERITING CONDITIONS FROM SUPER
  • Different REPLACING Operators
  • Definition of a Generic Aspect
  • DCL Restrictions for ABAP CDS Hierarchies
  • DCL Restrictions for Transactional Projection View Entities