ABAP のモジュール化: マクロ、サブルーチン、関数モジュール

ソース コードをモジュール化する場合は、一連の ABAP ステートメントをモジュールに配置します。 次に、すべてのステートメントをメイン プログラムに配置する代わりに、モジュールを呼び出すだけです。プログラムが生成されると、モジュール化ユニット内のソース コードは、メイン プログラム内に実際に物理的に存在するかのように扱われます。

モジュール化の必要性

  • プログラムの構造を改善します。
  • コードが読みやすい
  • コードのメンテナンスが簡単
  • 冗長性を避け、コードの再利用を促進する

さまざまなモジュール化手法

  • マクロの使用
  • インクルードファイルの使用
  • サブルーチン
  • 機能モジュール

それぞれを詳しく見てみましょう。

SAP- ABAPマクロ

プログラム内で同じステートメントのセットを複数回再利用したい場合は、それらをマクロに含めることができます。

マクロは、それが定義されているプログラム内でのみ使用でき、定義に続くプログラム行でのみ呼び出すことができます。

マクロは、長い計算や複雑な WRITE ステートメントに役立ちます。

構文

DEFINE <macro_name>

'Macro Statements

END-OF-DEFINITION

マクロでパラメータを使用できる &N ここで、N = 1,2,3、XNUMX、XNUMX…

例:-

DATA: number1 TYPE I VALUE 1.

DEFINE increment.

ADD 1 to &1.

WRITE &1.

END-OF-DEFINITION.

Increment number1.

WRITE number1.

出力:2

インクルードプログラム

インクルード プログラムはソース コードをモジュール化するためだけのものであり、パラメータ インターフェイスはありません。

インクルード プログラムを使用すると、異なるプログラムで同じソース コードを使用できます。 これらは、別のプログラムで使用する長いデータ宣言がある場合に便利です。

構文

Include <include program Name>

注意すべき点

  • インクルード プログラムは自分自身を呼び出すことができません。
  • インクルード プログラムには完全なステートメントが含まれている必要があります。

例:

INCLUDE ZILX0004.

WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM.

================================

PROGRAM ZRPM0001.

INCLUDE ZILX0004.

サブルーチン

サブルーチンは、任意の関数で定義できるプロシージャです。 ABAPプログラム また、任意のプログラムから呼び出すこともできます。サブルーチンは通常、内部的に呼び出されます。つまり、サブルーチンには、ローカルで頻繁に使用されるコードまたはアルゴリズムのセクションが含まれています。関数をシステム全体で再利用できるようにするには、関数モジュールを使用します。

構文-

FORM <Subroutine> [<pass>].

<Statement block>.

ENDFORM.

= サブルーチンの名前

= 渡されるパラメータ

サブルーチンの種類

  1. インナー
    • 同じプログラム内で定義されたサブルーチンが呼び出されます。
    • メインの ABAP/4 プログラムで宣言されたすべてのデータ オブジェクトにアクセスできます。
  2. 外部
    • 呼び出されるプログラムの外部で定義されたサブルーチン。
    • を使用する必要がありますオプションを使用するか、メモリの共通部分でデータ オブジェクトを宣言します。

サブルーチンの呼び出し

内部サブルーチン

PERFORM <subroutine> [<pass>]

= サブルーチンの名前

= 渡されるパラメータ

メインプログラムで宣言されたデータは自動的に利用可能になります。

外部サブルーチン

PERFORM <subroutine>(<Program>) [<pass>].

PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND].

PERFORM (<subroutine>) IN PROGRAM  (<Program>) [<pass>] [IF FOUND].

PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].

注意すべき点

  • ネストされた呼び出しはサブルーチン内で許可されます (つまり、 FORM … ENDFORM 内の PERFORM )。
  • 再帰呼び出しも可能です。
  • ローカル データを定義するには、 FORM の後に DATA ステートメントを使用します。 サブルーチンに入るたびに、データが (初期値で) 再作成され、最後に (スタックから) 解放されます。
  • サブルーチン内で使用されるグローバル データを定義するには、 FORM の後に LOCAL ステートメントを使用します。 値はサブルーチンに入ると保存され、最後に (スタックから) 解放されます。

機能モジュール

関数モジュールは、誰でも使用できる汎用の ABAP/4 ルーチンです。 実際、利用可能な標準関数モジュールが多数あります。

機能モジュールは、論理的に関連する機能の集合である機能グループに編成されます。 汎用モジュールは常に汎用グループに属します。

構文-

FUNCTION <function module>

<Statements>

ENDFUNCTION.

機能モジュールに関連する重要な情報

  • 管理部門
  • パラメータのインポート/変更/エクスポート。
  • テーブルパラメータ/例外。
  • ドキュメント
  • ソースコード – L U01 。 は関数グループです
  • グローバルデータ – L TOP . 汎用グループのグローバルデータ - 汎用グループ内の汎用モジュール間でアクセス可能。
  • メインプログラム – SAPら. その関数グループのすべてのインクルードファイルのリストが含まれます

汎用モジュールの呼び出し

汎用モジュールを呼び出すには、CALL FUNCTION ステートメントを使用します。

CALL FUNCTION <module>

[EXPORTING  f1 = a 1.... f n = a n]

[IMPORTING  f1 = a 1.... f n = a n]

[CHANGING   f1 = a 1.... f n = a n]

[TABLES     f1 = a 1.... f n = a n]

[EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E]    

[OTHERS = ro]].

機能グループ

汎用グループは汎用モジュールのコンテナです。 実際、多数の標準関数グループがあります。
汎用グループ内のすべての汎用モジュールは、グループのグローバル データにアクセスできます。

実行可能プログラム (タイプ 1) や モジュールプール (タイプ M)、機能グループには画面、選択画面、およびリストを含めることができます。

注意すべき点

  • 機能グループは実行できません。
  • 関数グループの名前の長さは最大 26 文字です。
  • 汎用グループまたは汎用モジュールを作成すると、メインプログラムとインクルードプログラムが自動的に生成されます。
  • 関数グループはデータをカプセル化します。

関数グループの作成方法

  1. トランザクション SE80 に移動します。
  2. ドロップダウンでプログラムを選択します。
  3. 作成したい関数グループの名前を書きます。 通常、ユーザーが作成した機能グループは「Z」で始まります。 例 – 。 Enter キーを押します。
  4. ユーザーが TOP インクルードを作成するオプションをオンにすると、TOP インクルードがデフォルトで作成されることに注意してください。

汎用モジュールの作成方法

  1. 関数グループを作成します (「ZCAL」とします)。
  2. 汎用モジュールを作成し、(機能グループ、アプリケーション、短テキスト、プロセス タイプ) などの属性を設定して保存します。
  3. インクルードファイル「LZCALU01」には、最初の機能モジュールのソースコードが含まれます。
  4. インクルードファイル「LZCALTOP」にはグローバルデータが含まれます。
  5. メインプログラム「SAP「LZCAL」には
    • グローバルデータ インクルードファイル「LZCALTOP」
    • 機能モジュールにはファイル「LZCALUXX」が含まれます
    • ユーザー定義のインクルード ファイル「LZCALF..」、「LZCALO..」、および「LZCALI..」
  6. インターフェースパラメータと例外を定義する
  7. ソースコードを書く
  8. 機能モジュールのアクティブ化
  9. 機能モジュールのテスト - 単一のテストとデバッグ
  10. 汎用モジュールの文書化とリリース

ABAP のモジュール性については以上です。