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

⚡ スマートサマリー

ABAPにおけるモジュール化とは、一連のステートメントを再利用可能な単位にまとめ、メインプログラムからその単位を呼び出すことを指します。このページでは、マクロ、インクルードプログラム、サブルーチン、関数モジュール、関数グループについて、それぞれの構文、例、選択基準を解説します。

  • 🧩 基本原則: モジュール化ユニットは、そのソースコードが呼び出し元のプログラム内に物理的に存在するかのように生成されるため、実行時コストをかけずに構造が改善されます。
  • ⚡ マクロ: DEFINEとEND-OF-DEFINITIONで定義され、定義元のプログラム内でのみ、かつ定義行の後にのみ使用可能です。
  • 📄 プログラムを含める: パラメータインターフェースは持たず、複数のプログラム間で長いデータ宣言などのソースコードを共有するためだけに存在します。
  • 🔁 サブルーチン: FORMおよびENDFORMで宣言され、PERFORMで呼び出され、1つのプログラム内でローカルに再利用されるロジックに適しています。
  • 🧱 機能モジュール: テーブルパラメータのインポート、エクスポート、変更、および例外処理のための型付きインターフェースを備えた、システム全体で使用できるルーチン。
  • 📦 機能グループ: その内部にあるすべての関数モジュールがグローバルデータを共有するコンテナ。TOPおよびUXXインクルードによって自動的に生成されます。
  • 🧭 選択ルール: ローカルでの省略記法にはマクロを、ローカルなロジックにはサブルーチンを、そしてルーチンをシステム全体で再利用する必要がある場合は関数モジュールを選択してください。

ABAPにおけるモジュール化

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

マクロは、コンパイル時に1つのプログラム内でのみ展開されます。同じコードを複数のプログラムで共有する必要がある場合は、代わりにインクルードプログラムが使用されます。

インクルードプログラム

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

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

構文

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オブジェクトでは、サブルーチンは非推奨とされています。新規開発では、再利用可能なロジックはクラスのメソッドに配置し、リモートアクセス対応またはシステム全体にわたるインターフェースが必要な場合は関数モジュールを使用する必要があります。

機能モジュール

関数モジュールは、誰でも使用できる汎用の 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. 汎用モジュールの文書化とリリース

適切なモジュール化手法の選び方

これら4つの手法は重複する部分があるため、どの手法を選択するかは、再利用の範囲とパラメータインターフェースが必要かどうかによって決まります。

技術 再利用の範囲 パラメータインターフェース 最適な用途
マクロ 定義行の後のプログラムが1つあります。 位置指定プレースホルダー &1 ~ &9 短い繰り返し文、長い計算、複雑なWRITE出力
プログラムを含める インクルードを指定するプログラム なし 共有データ宣言と共有ソースコード
サブルーチン(FORM) ローカル、または外部で PERFORM … IN PROGRAM を使用 テーブルの使用、変更 1つのプログラム内で頻繁に再利用されるロジック
汎用モジュール リモート通話を含むシステム全体 インポート、エクスポート、変更、テーブル、例外 アプリケーション間で共有され、関数グループにカプセル化されたルーチン

ほとんどのケースに対応できる簡単なルールがあります。1つのプログラム内での省略記法にはマクロを、共有宣言にはインクルードを、ローカルロジックにはサブルーチンを、そしてルーチンがシステム内のどこからでも呼び出し可能である必要がある場合は関数モジュールを使用します。ABAPにおけるモジュール性については以上です。

よくあるご質問

マクロは生成時に展開され、それを定義したプログラム内でのみ機能します。サブルーチンは、型付きパラメータインターフェースを持つ実際のプロシージャであり、PERFORM 命令を使用して別のプログラムから呼び出すこともできます。

処理タイプがリモート対応モジュールに設定されている関数モジュールは、別の関数モジュールから呼び出すことができます。 SAP システムまたは外部アプリケーションから呼び出されます。パラメータは値渡しする必要があり、例外はシステム障害として処理されます。

マクロは生成前に展開されるため、デバッガでステップ実行することはできません。行ごとのデバッグが必要な場合は、ロジックをサブルーチンまたはメソッドに移動し、マクロは短いステートメントに限定してください。

ABAP開発ツールに搭載されたAIコードアシスタントは、平易な記述から関数モジュールの骨組み、パラメータインターフェース、および例外処理を生成できます。開発者は、移送前にロジックを確認し、モジュールを有効化してテストする必要があります。

AIツールはプログラムをスキャンし、繰り返しブロックを検出し、サブルーチン、メソッド、または関数モジュールをどこに配置すべきかを提案します。tracテッド。この提案はリファクタリングを迅速化するが、同一の動作を確認するためには単体テストが依然として必要である。