SAP-第009章 模块化ABAP

  • 格式:pdf
  • 大小:265.75 KB
  • 文档页数:20

第九章 模块化 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