SAP-第009章 模块化ABAP
- 格式:pdf
- 大小:265.75 KB
- 文档页数:20
1
第九章 模块化 ABAP/4 程序
概览
内容
源代码模块 ...................................................................... 1
宏的定义与 调用 .................................................................. 1
包含程序 ......................................................................... 2
子程序 .......................................................................... 3
定义子程序 ....................................................................... 3
调用子程序 ....................................................................... 3
在调用程序 与子程序之 间进行数据 传递 ............................................. 5
在子程序中 定义局部数 据类型和对 象 ............................................. 13
中断子程序 ..................................................................... 15
功能模块 ...................................................................... 16
使用现有功 能模块 .............................................................. 16
创建和编写 功能模块 ............................................................ 18
本章将介绍 如何模块化 ABAP/4 程序。如果 程序包含相 同或相似的 语句块,或 者希望多次 处理相同函 数,应用
模 块化技术可 以避免冗余 。
通过模块化 ABAP/4 程序,使得 程序易读, 并改善程序 的结构。与 未模块化的 程序相比, 模块化程序 更易于维
护 和更新。
模块化原则
: 2
The result of N2 - N1 is 1
这样就定义 了两个宏: OPERATION 和 OUTPUT。 OUTPUT 嵌套在 OPERATION 中。OPERATION 先后三
次被 其他参数调 用。应注意 占位符 &1、&2、 … 在宏中是如 何被替换的 。
包含程序
如果要在多 个程序中使 用相同的语 句序列,则 可一次性将 其代码编写 到包含程序 中。例如, 当希望在不 同程
序中使 用的数据声 明较长时, 这一点将非 常重要。
以下主题说 明:
不能与包含 程序进行显 式数据传递 ,因为包含 程序的目的 是模块化源 代码。如果 想与模块进 行
数据传递 ,请使用子 程序或功能 模块。
创建包含程 序
要创建包含 程序,请按 以下章节所 述步骤进行 :
创建简单的 ABAP/4 程序 (页 1–1)
对于程序属 性类型,必 须使用类型 I。具体说 明参见:
重要的程序属性 (页 1–4) 通过双击 ABAP/4 程序中 INCLUDE 语句后的程 序名,还可 以创建或更 改包含程序 (参
见使用包含程 序 (页 2) )。 这样既可以 创建新程序 ,又可以更 改现有程序 。
不能单独运 行包含程序 ,而必须从 其它程序中 调用。
可以从其它 包含程序中 调用包含程 序。
编写 INCLUDE 程序源代码 的唯一限制 如下:
_ 包含程序 不能包含 PROGRAM 或 REPORT 语句。
_ 包含程序 不能调用自 身。
_ 包含程序 必须包含完 整语句。
但是,必须 确保包含程 序语句在逻 辑上符合调 用它的程序 源代码。在 编辑器中编 辑包含程序 时,选择“ 检查”
通常 还无法保证 这一点。
***INCLUDE INCL-TST.
TEXT = 'Hello!'.
在此,语法 检查报告错 误,因为没 有声明 TEXT 字段。但是 ,在用合适 的类型定义 了字段 TEXT
的任何程序 中,都可以 调用程序 INCL-TST。
要想从语法 检查中获得 有意义的结 果,必须为 调用包含程 序的程序进 行语法检查 (参见 使用包含程 序 (页
2) )。
使用包含程 序
要从另一个 ABAP/4 程序中调用 包含程序, 请使用 INCLUDE 语句,用法 如下:
语法
INCLUDE .
在语法检查 期间和生成 期间,该语 句将源代码 插入到 ABAP/4 程序中。INCLUDE 语句的功能 类似于把
源代码复制 到调用程序 中语句的位 置上。
INCLUDE 语句必须单 独占一行, 并且不能扩 展到多行。
包含程序不 是运行时装 载的,而是 在程序生成 前就被解析 。程序生成 后,则包含 所用全部包 含程序的源 代码。
假设编写了 如下的包含 程序:
***INCLUDE STARTTXT.
WRITE: / 'Program started by', SY-UNAME,
/ 'on host', SY-HOST,
'date:', SY-DATUM, 'time:', SY-UZEIT.
ULINE.
可以从任何 其它 ABAP/4 程序调用该 程序。例如 ,如果希望 编写输出功 能模块的标 准表头,请 在
PROGRAM 或 REPORT 之后插入 INCLUDE 语句,方法 如下:
PROGRAM SAPMZTST.
INCLUDE STARTTXT.
............
PDF created with pdfFactory Pro trial version www.pdffactory.com 3
输出结果如 下:
Program started by FRED
on host hs1077 date: 07/19/1995 time: 09:00:39
___________________________________________________________
................
子程序
子程序是可 以从 ABAP/4 中调用的程 序。定义子 程序的目的 是为了避免 重复编写程 序中频繁使 用的某些部 分或
频繁使 用的算法。 可以与子程 序进行显式 数据传递。
有两种类型 的子程序:
_ 内部子程 序:
内部子程序 的源代码与 调用程序( 内部调用) 位于同一 ABAP/4 程序中。
_ 外部子程 序:
外部子程序 的源代码位 于 ABAP/4 程序中而不 是调用程序 (外部调用 )中。
尽管内部子 程序主要用 于模块化及 结构化单个 程序,某个 ABAP/4 程序中内部 调用的子程 序可以从另 一个
ABAP/4 程序中外部 调用。另外 ,也可以创 建只包含子 程序的 ABAP/4 程序。这些 程序不能自 己运行,而 是被其
它 ABAP/4 程序作为外 部子程序库 来调用。
下列主题说 明
定义子程序
子程序是以 FORM 开头、以 ENDFORM 结尾的代码 块。要定义 子程序,请 使用下列语 法:
语法
FORM [].
ENDFORM.
定义子程序 名。 选项用于指 定如何与子 程序进行数 据传递。
_ 对于内部 子程序,不 必使用 选项,但子 程序可以访 问主 ABAP/4 程序中声明 的所有数
据 对象。
_ 对于外部 子程序,必 须决定是使 用 选项,还是 在内存公用 部分声明数 据对象。
有关与子程 序进行数据 传递的详细 信息,参见 在调用程序 与子程序之 间进行数据 传递 (页 5)
如果在同一 程序中定义 内部子程序 ,并且不使 用事件关键 字,则应将 其分组集中 在程序末尾 ,以免影响 程序
流程( 参见定义过程块 (页 Error! Not a valid link.) )。
子程序不能 包含嵌套的 FORM-ENDFORM 块。
FORM HEADER.
WRITE: / 'Program started by', SY-UNAME,
/ 'on host', SY-HOST,
'date:', SY-DATUM, 'time:', SY-UZEIT.
ULINE.
ENDFORM.
这样就创建 了子程序 HEADER, 该子程序可 用于创建输 出列表的表 头(请与使用包含程 序 (页
2) 中 的示例进行 比较)。
调用子程序
可以调用代 码位于同一 ABAP/4 程序中的子 程序(内部 调用),也 可调用代码 位于其它 ABAP/4 程序中的子 程序
(外部 调用)。
可以运行时 指定子程序 名,或从给 定列表中调 用子程序。
不仅可以从 子程序中调 用子程序( 嵌套调用) ,子程序也 可以调用自 己(递归调 用)。
调用内部子 程序
要调用内部 子程序,请 使用 PERFORM 语句,用法 如下:
语法
PERFORM [].
调用子程序 。 在 选项中,指 定如何与子 程序进行数 据传递。如 果不使用 选项,子程 序
也可以访 问主 ABAP/4 程序中声明 的所有数据 类型和对象 。该数据叫 做全局数据 ,如果不被 同名局域数 据隐藏,
该 数据对子程 序可见(关 于数据传递 的详细信息 ,参见在调用程序 与子程序之 间进行数据 传递 (页 5) )。
PDF created with pdfFactory Pro trial version www.pdffactory.com