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 用户指南》的第三部分。
Nested loop
您可以在任何另一个WHILE或DO循环中使用一个或多个循环
CONTINUE语句忽略当前语句块中的所有语句,并继续下一个循环遍历。
ABAP异常处理建立在三个关键字 - RAISE,TRY,CATCH和CLEANUP
TRY.
Try Block
CATCH
Catch Block
. . .
. . .
. . .
CATCH
Catch Block
CLEANUP.
Cleanup block
ENDTRY.
RAISE - 提出异常,表示发生了一些异常情况。 通常,异常处理程序会尝试修复错误或找到替代解决方案。
TRY - TRY块包含要处理其异常的应用程序编码。 此语句块按顺序处理。 它可以包含进一步的控制结构和程序调用或其他ABAP程序。 它后面是一个或多个catch块。
CATCH - 程序在要处理问题的程序中的地方使用异常处理程序捕获异常。 CATCH关键字表示捕获异常。
CLEANUP - 每当在TRY块中发生异常,而TRY块未被同一TRY - ENDTRY结构的处理程序捕获时,将执行CLEANUP块的语句。 在CLEANUP子句中,系统可以将对象恢复到一致状态或释放外部资源。 也就是说,可以对TRY块的上下文执行清除工作。
ABAP词典中的基本类型如下:
数据元素通过定义数据类型,长度和可能的小数位数来描述基本类型。
结构和可以具有任何类型的组件。
表类型描述了内部表的结构。
用于在ABAP字典中定义数据的三个基本对象是域,数据元素和表。 域用于表字段的技术定义,例如字段类型和长度,数据元素用于语义定义(简短描述)。
创建域的事务SE11,您可以在客户名称空间下创建域,对象的名称始终以“Z"或“Y"开头
在SAP ABAP环境中,模块化涉及将程序组织成模块化单元,也称为logical blocks
子程序是一个可重用的代码段。 它是程序中的模块化单元,其中函数以源代码的形式封装
可以使用Form和EndForm语句定义子例程。
以下是子程序定义的一般语法。
FORM. ENDFORM.
我们可以通过使用PERFORM语句调用子例程。 控制跳转到子例程< subroutine_name>中的第一可执行语句。当遇到ENDFORM时,控制跳回到PERFORM语句之后的语句。
事务SE80
以下是宏定义的基本语法:
DEFINE. END-OF-DEFINITION. ...... [ ....].
704/5000在调用它之前必须首先定义一个宏。 ...。 替换宏定义中包含的ABAP语句中的占位符和1 ...。
宏定义中占位符的最大数量为9。 也就是说,当执行程序时,SAP系统用适当的语句替换宏,并且用参数param1,param2,... param9替换占位符&1,&2,...,&9。 我们可以在另一个宏中调用宏,但不能调用同一个宏。
要了解如何创建功能模块,必须探索函数构建器。 您可以找到事务代码为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
INCLUDE程序是用于模块化源代码的全局存储库对象。 它们允许您在不同的程序中使用相同的源代码。 包含程序还允许您以有序的方式管理复杂的程序。 为了在另一个程序中使用include程序,我们使用以下语法:
INCLUDE.
INCLUDE语句具有与复制包含程序< program_name>的源代码相同的效果。 进入另一个程序。 由于包括程序不能独立运行,它必须内置到其他程序中。 您也可以嵌套包含程序。
创建一个include程序,不需要在开头写program,自己写逻辑即可
要使用本地SQL语句,必须在其前面加上EXEC SQL语句,并以ENDEXEC语句结束。
以下是语法:
EXEC SQL PERFORMING