ABAP/4 简介
ABAP/4 包括
- 带有各种类型和结构的声明数据的声明元素
- 数据制作的操作元素
- 控制程序流的控制元素
- 反应外部事件的事件元素
_ ABAP/4 支持多种语言。文本摘要(例如,标题、页眉和其他文本)将根据程序代码分别存储。您
可以随时在不改变程序代码的情况下更改、转换和维护这些文本摘要。
_ ABAP/4 支持商业数据类型和操作。您可以用特殊日期和时间字段进行计算。系统会自动执行必需
的类型转换。
_ ABAP/4 提供一系列功能处理字符串。
_ ABAP/4 包含一个叫 Open SQL 的 SQL 子集。用 Open SQL,您可以读取和访问数据库表,与所
用的数据库系统无关。
_ ABAP/4 允许您定义和处理内部表,该表只在运行程序时存在。内部表使其更容易处理数据表,并
帮助使用程序中的复杂数据结构。
_ ABAP/4 允许您定义和调用子程序。也可以调用其他程序的子程序。参数能够以各种方式从子程序
传递或传递到子程序。
_ ABAP/4 包含一种特殊子程序,叫做功能模块。您可以在*库中创建和维护功能模块。在调用程
序和子程序之间功能模块有一个明确定义的数据接口。它们能够以调用程序的独立模式进行分别
测试。
这里有两种主要的 ABAP/4 程序类型:
_ 报表程序
报表程序用于分析数据库表中的数据。这种分析的结果可以显示在屏幕上或发送到打印机上。逻
辑数据库支持报表程序。逻辑数据库是特殊的 ABAP/4 程序,使开发者不必编码所有的数据库访
问。关于报表程序的详细信息,参见《ABAP/4 用户指南》的第二部分。
_ 对话程序
将对话程序组织为包含对话模块的模块池。每个动态程序(由一个屏幕及其流逻辑组成的“动态
程序”)都基于一个 ABAP/4 对话程序。流逻辑包含对 ABAP/4 对话模块的调用。关于对话程序
的详细信息,参见《ABAP/4 用户指南》的第三部分。
SAP ABAP 回路控制
您可以在任何另一个WHILE或DO循环中使用一个或多个循环
CONTINUE语句忽略当前语句块中的所有语句,并继续下一个循环遍历。
SAP ABAP 异常处理
ABAP异常处理建立在三个关键字 - RAISE,TRY,CATCH和CLEANUP
TRY. Try Block <Code that raises an exception> CATCH Catch Block <exception handler M> . . . . . . . . . CATCH Catch Block <exception handler R> CLEANUP. Cleanup block <to restore consistent state> ENDTRY.
RAISE - 提出异常,表示发生了一些异常情况。 通常,异常处理程序会尝试修复错误或找到替代解决方案。
TRY - TRY块包含要处理其异常的应用程序编码。 此语句块按顺序处理。 它可以包含进一步的控制结构和程序调用或其他ABAP程序。 它后面是一个或多个catch块。
CATCH - 程序在要处理问题的程序中的地方使用异常处理程序捕获异常。 CATCH关键字表示捕获异常。
CLEANUP - 每当在TRY块中发生异常,而TRY块未被同一TRY - ENDTRY结构的处理程序捕获时,将执行CLEANUP块的语句。 在CLEANUP子句中,系统可以将对象恢复到一致状态或释放外部资源。 也就是说,可以对TRY块的上下文执行清除工作。
ABAP词典中的基本类型
ABAP词典中的基本类型如下:
-
数据元素通过定义数据类型,长度和可能的小数位数来描述基本类型。
-
结构和可以具有任何类型的组件。
-
表类型描述了内部表的结构。
SAP ABAP 域
用于在ABAP字典中定义数据的三个基本对象是域,数据元素和表。 域用于表字段的技术定义,例如字段类型和长度,数据元素用于语义定义(简短描述)。
创建域的事务SE11,您可以在客户名称空间下创建域,对象的名称始终以“Z"或“Y"开头
SAP ABAP 数据元素
SAP ABAP 表
SAP ABAP 结构
SAP ABAP 视图
SAP ABAP 搜索帮助
SAP ABAP 锁定对象
SAP ABAP 模块化
在SAP ABAP环境中,模块化涉及将程序组织成模块化单元,也称为logical blocks
SAP ABAP 子程序
子程序是一个可重用的代码段。 它是程序中的模块化单元,其中函数以源代码的形式封装
可以使用Form和EndForm语句定义子例程。
以下是子程序定义的一般语法。
FORM <subroutine_name>. <statements> ENDFORM.
我们可以通过使用PERFORM语句调用子例程。 控制跳转到子例程< subroutine_name>中的第一可执行语句。当遇到ENDFORM时,控制跳回到PERFORM语句之后的语句。
事务SE80
SAP ABAP 宏
以下是宏定义的基本语法:
DEFINE <macro_name>. <statements> END-OF-DEFINITION. ...... <macro_name> [<param1> <param2>....].
704/5000在调用它之前必须首先定义一个宏。 ...。 替换宏定义中包含的ABAP语句中的占位符和1 ...。
宏定义中占位符的最大数量为9。 也就是说,当执行程序时,SAP系统用适当的语句替换宏,并且用参数param1,param2,... param9替换占位符&1,&2,...,&9。 我们可以在另一个宏中调用宏,但不能调用同一个宏。
SAP ABAP 功能模块
要了解如何创建功能模块,必须探索函数构建器。 您可以找到事务代码为SE37的函数构建器。 只需用通配符键入功能模块名称的一部分,以演示可以搜索功能模块的方式。 键入* amount *,然后按F4键。
搜索结果将显示在新窗口中。 功能模块显示在具有蓝色背景的行中,其功能组以粉红色的行显示。 您可以使用对象导航器屏幕(事务SE80)进一步查看功能组ISOC。 您可以看到功能模块列表以及功能组中保存的其他对象。 让我们考虑函数模块SPELL_AMOUNT。 此功能模块将数字转换为字。
创建新程序
步骤1 - 转到事务SE38并创建一个名为Z_SPELLAMOUNT的新程序。
步骤2 - 输入一些代码,以便可以设置一个参数,其中可以输入值并将其传递到功能模块。 文本元素text-001在这里显示为“输入值"。
步骤3 - 要为此编写代码,请使用CTRL + F6。 之后,将出现一个窗口,其中“CALL FUNCTION"是列表中的第一个选项。 在文本框中输入“spell_amount",然后点击继续按钮。
步骤4 - 自动生成一些代码。 但是我们需要增强IF语句以包含一个代码,以向屏幕写入一条消息,说“函数模块返回一个值:sy-subrc",并添加ELSE语句,以便在函数 模块成功,这里,必须设置一个新的变量来保存从函数模块返回的值,让我们称之为\'result\'。
下面是代码 -
REPORT Z_SPELLAMOUNT. data result like SPELL. selection-screen begin of line. selection-screen comment 1(15) text-001. parameter num_1 Type I. selection-screen end of line. CALL FUNCTION 'SPELL_AMOUNT' EXPORTING AMOUNT = num_1 IMPORTING IN_WORDS = result. IF SY-SUBRC <> 0. Write: 'Value returned is:', SY-SUBRC. else. Write: 'Amount in words is:', result-word. ENDIF.
步骤5 - 函数模块返回的变量称为IN_WORDS。 在程序中设置相应的变量名为\'result\'。 通过使用LIKE语句来引用称为SPELL的结构来定义IN_WORDS。
步骤6 - 保存,**并执行程序。 输入如以下屏幕截图所示的值,然后按F8。
上面的代码产生以下输出:
Spelling the Amount Amount in words is: FIVE THOUSAND SIX HUNDRED EIGHTY
SAP ABAP Include程序
INCLUDE程序是用于模块化源代码的全局存储库对象。 它们允许您在不同的程序中使用相同的源代码。 包含程序还允许您以有序的方式管理复杂的程序。 为了在另一个程序中使用include程序,我们使用以下语法:
INCLUDE <program_name>.
INCLUDE语句具有与复制包含程序< program_name>的源代码相同的效果。 进入另一个程序。 由于包括程序不能独立运行,它必须内置到其他程序中。 您也可以嵌套包含程序。
创建一个include程序,不需要在开头写program,自己写逻辑即可
SAP ABAP 打开SQL概述
SAP ABAP 本地SQL概述
要使用本地SQL语句,必须在其前面加上EXEC SQL语句,并以ENDEXEC语句结束。
以下是语法:
EXEC SQL PERFORMING <form>. <Native SQL statement> ENDEXEC.
这些语句定义ABAP程序中可以列出一个或多个Native SQL语句的区域。 输入的语句将传递到Native SQL界面,然后按如下所示进行处理:
-
对于所寻址的数据库系统的程序接口有效的所有SQL语句都可以在EXEC和ENDEXEC之间列出,特别是DDL(数据定义语言)语句。
-
这些SQL语句从Native SQL接口传递到数据库系统基本不变。 语法规则由数据库系统指定,特别是数据库对象的区分大小写规则。
-
如果语法允许单个语句之间的分隔符,则可以在EXEC和ENDEXEC之间包括许多本地SQL语句。
-
可以在EXEC和ENDEXEC之间指定SAP特定的本地SQL语言元素。 这些语句不会直接从Native SQL接口传递到数据库,但会适当地进行转换。
例子
SPFLI是用于存储航班时刻表信息的标准SAP表。 这在R / 3 SAP系统中可用,具体取决于版本和发布级别。 在将表名称SPFLI输入到相关SAP事务(如SE11或SE80)中时,可以查看此信息。 您还可以使用这两个事务查看此数据库表中包含的数据。
REPORT ZDEMONATIVE_SQL. DATA: BEGIN OF wa, connid TYPE SPFLI-connid, cityfrom TYPE SPFLI-cityfrom, cityto TYPE SPFLI-cityto, END OF wa. DATA c1 TYPE SPFLI-carrid VALUE 'LH'. EXEC SQL PERFORMING loop_output. SELECT connid, cityfrom, cityto INTO :wa FROM SPFLI WHERE carrid = :c1 ENDEXEC. FORM loop_output. WRITE: / wa-connid, wa-cityfrom, wa-cityto. ENDFORM.
上面的代码产生以下输出:
0400 FRANKFURT NEW YORK 2402 FRANKFURT BERLIN 0402 FRANKFURT NEW YORK
SAP ABAP 内部表
内部表用于许多目的:
-
它们可用于保存以后可在程序中使用的计算结果。
-
内部表还可以保存记录和数据,以便可以快速访问,而不必从数据库表访问此数据。
-
他们是非常多才多艺。 它们可以使用任何数量的其他定义的结构来定义。
SAP ABAP 创建内部表
DATA语句用于声明一个内部表。 程序必须告知表的开始和结束位置。 所以使用BEGIN OF语句,然后声明表名。 之后,使用OCCURS添加,后跟一个数字,这里为0. OCCURS告诉SAP正在创建一个内部表,0表示它最初不包含任何记录。 它将随着它填充数据而扩展。
以下是语法
DATA: BEGIN OF <internal_tab> Occurs 0,
可以使用或不使用标题行创建内部表。 要创建带有标题行的内部表,请在内部表定义中的OCCURS子句之前使用OCCURS子句之前的BEGIN OF子句或WITH HEADER LINE子句。 要创建没有标题行的内部表,请使用不带BEGIN OF子句的OCCURS子句。
您还可以使用TYPES语句创建内部表作为本地数据类型(仅在当前程序的上下文中使用的数据类型)。 此语句使用TYPE或LIKE子句来引用现有表。
创建内部表作为本地数据类型的语法是:
TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF <line_type_itab> WITH <key> INITIAL SIZE <size_number>.
这里,< internal_tab_type> 指定内部表的表类型< internal_tab> 和< line_type_itab> 指定内部表的行的类型。 在TYPES语句中,可以使用TYPE子句将内部表的行类型指定为数据类型,并使用LIKE子句将行类型指定为数据对象。 为内部表指定键是可选的,如果用户未指定键,SAP系统将使用任意键定义表类型。
INITIAL SIZE< size_number> 通过向其分配初始量的内存来创建内部表对象。 在上述语法中,INITIAL SIZE子句为size_number表行保留一个内存空间。 每当声明内部表对象时,表的大小不属于表的数据类型。
注意 - 首次填充内部表时消耗的内存大大减少。
1.方法调用参数输入注意,
length_1 = STRLEN( title_1 )."参数连接括号的地方需要空格
2.每个语句都是以点结尾
3.定义参数都是DATA开头
4.可执行的程序都是REPORT开头
5.添加断点是必须先**程序(注意)