汎用モジュール
22.4 汎用モジュール
4. 汎用モジュール
汎用モジュール
汎用モジュールは、一言でいえば「再利用可能なプログラムの部品」です。
事前にロジックを定義しておき、後から呼び出す形で利用します。
サブルーチンと違い、汎用モジュールについては「IMPORT / EXPORT」と「何となくの処理」さえ分かっていれば、実際のロジックを意識せずに利用することが可能です。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/7ad50800d388c7f93f9620221e24c986.png)
※標準の有無
SAPの標準機能(元から用意されているもの)という意味になります。
この場合ですと、サブルーチンは、SAPの標準機能として用意されておらず、事前に自身で作成が必要という意味になります。
反対に汎用モジュールは、SAPの標準機能(元から用意されているもの)が有るという意味になります。
汎用モジュールの実装
汎用モジュールの実装には以下の3つのステップが必要です。
1.汎用グループの登録
2.汎用モジュールの登録
3.IMPORT/EXPORTの定義・ロジックの実装
1.汎用グループの登録
汎用グループとは、その名の通り汎用モジュールをまとめたものです。汎用モジュールが、1つ1つのファイルだとすると、汎用グループはそれらのファイルをまとめた「フォルダ」です。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/69045a7766d2ae6941c88965c9351201.png)
例えば、計算汎用グループがあるとすると、その中に「日付計算汎用モジュール」「年齢計算汎用モジュール」が纏まっているようなイメージです。
汎用モジュールを新規に登録する場合は、汎用グループに登録するか、新たに汎用グループを登録する必要があります。
操作手順①
① トランザクションコード SE37 を実行する
![](https://kanda-it-school-kensyu.com/wp-content/uploads/8ad91bd0141a2706d71ef375306d20ce.png)
② メニューから以下のように飛んで汎用グループ登録画面に遷移
![](https://kanda-it-school-kensyu.com/wp-content/uploads/44b375085b5698c42d524439b5c7468f.png)
操作手順②
画面に従って項目を埋めて、保存ボタンを押下で登録完了
![](https://kanda-it-school-kensyu.com/wp-content/uploads/c2c4d1353ddbe7aff9f65b99a3cb9452-1.png)
2.汎用モジュールの登録
操作手順①
画面のように汎用モジュール名を記入し登録ボタンを押下
![](https://kanda-it-school-kensyu.com/wp-content/uploads/65ef3b6991953e0f63dfe7ac9c500e2b.png)
操作手順②
画面のように項目を記入し、保存
先ほど登録した汎用グループに紐づける形で汎用モジュールを登録します。この際、汎用モジュールの名称については、汎用グループで共通化されているものを定義すると情報体系の整理に役立ちます。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/66749fe25d13bae0333038b01359be7b.png)
3.IMPORT/EXPORTの定義・ロジックの実装
汎用モジュールのIMPORTINGとEXPORTINGは、サブルーチンのUSING/CHANGINGに対応します。
汎用モジュールでは、サブルーチンのようにUSING/CHANGINGを自分でコーディングする必要がありません。
インプット・アウトプットを定義する専用のタブが存在します。
操作手順①
画面のようにインポート項目を記入
![](https://kanda-it-school-kensyu.com/wp-content/uploads/b1173a796663f34f3fb28711664570d2.png)
操作手順②
画面のようにエクスポート項目を記入
![](https://kanda-it-school-kensyu.com/wp-content/uploads/f0a9668a4bd2f39c562c4def4cc1c520.png)
操作手順③
ロジックの実装
![](https://kanda-it-school-kensyu.com/wp-content/uploads/34f8675678139ad262d364fa1a60c8e0.png)
ソースを記入したら保存する。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/b863a7ad20bcc8fc6b1526f8bc56ed5f.png)
操作手順④
操作手順③で汎用モジュールを保存後、その汎用モジュールを使用するために有効化を行います。
ただし、汎用モジュールと一緒に別のオブジェクトも有効化する必要があります。
・SAPLZG_GNELAL_MODULE_TEST
・LZG_GNELAL_MODULE_TESTTOP
・SAPLZG_GNELAL_MODULE_TESTとは
SAPLZG_GNELAL_MODULE_TEST は 汎用グループを登録すると作成されるメインプログラム(FUNCTION-POOL)となります。
新しく汎用グループの登録を行わない場合は有効化の必要はありません。
・LZG_GNELAL_MODULE_TESTTOP
LZG_GNELAL_MODULE_TESTTOP は FUNCTION-POOL 命令および汎用グループ全体のグローバルデータ宣言が含まれます。
上記をオブジェクトを作成した汎用モジュールと一緒に有効化することによって汎用モジュールを使用することができます。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/4ce7db64760bc98f2f63f4f0ad8cd9af.png)
汎用モジュールの呼び出し方法
汎用モジュールの呼び出しは「CALL FUNCTION命令」を用います。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/e7846bfca8951d14bea058276204686e.png)
汎用モジュールを呼び出す際に必要なのは、呼び出す汎用モジュール名と、EXPORTING/IMPORTINGに渡してあげる情報のみ(テーブル)です。
IMPORTINGだけを利用する汎用モジュールであれば、もちろんEXPORTINGやTABLESを記述する必要はありません。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/95d80a4871600819678b0cd85f0c42a1.png)
汎用モジュールの各種パラメータについて
![](https://kanda-it-school-kensyu.com/wp-content/uploads/c20652e9c784a59aafa701f819a06435.png)
①呼び出したい箇所にカーソルを合わせて、パターンボタンから呼び出しを行う
![](https://kanda-it-school-kensyu.com/wp-content/uploads/d8fa8e1e2ee461d6cdd4ca741c29fe7c.png)
②自動で提案されるので、必要なパラメータを記載していく
【記載前】
![](https://kanda-it-school-kensyu.com/wp-content/uploads/12ac7e23c10a09ae230d08b244dd896f.png)
【記載後】
![](https://kanda-it-school-kensyu.com/wp-content/uploads/bfd288bfaa66d05fd470d133aa31b8b2.png)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/eac2548f2ec3a2b20b56e60d6c5471b6.png)
◆動作確認
呼び出し元プログラム(汎用モジュール実行前)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/3d81dedc0dc256119707fcf950747fa0.png)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/93f042062a1bdb4dde3164b806581fde-1.png)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/0f4bac228c9e32168d01f8c550e87baa.png)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/789145f77dbd5d1943846e4c76466b1c.png)
それぞれ汎用モジュール内で処理された結果が反映されて呼び出し元プログラムに戻っている
仮に汎用モジュール内で例外:NOT_FOUNDが起こっていれば呼び出し元プログラムに帰ってきたときにSY-SUBRC = 1が設定されることになる。
例外の判定命令については、先述のとおりアドオンで汎用モジュールを作成する際はあまり考慮されない。
また、今回は汎用モジュール内でエラーハンドリングを行っていないために起こることはない。
処理内容
![](https://kanda-it-school-kensyu.com/wp-content/uploads/25322991769d7c5ba39958f66610d914.png)
呼び出し元プログラム: ZR_FM_SAMPLE_KANDA_R
![](https://kanda-it-school-kensyu.com/wp-content/uploads/63c6284f13e241e0eddaf7a03a5955d9.png)
汎用モジュール:Z_M_GNELAL_MODULE_TEST_CP_Rの呼び出しのみ
汎用モジュール:Z_M_GNELAL_MODULE_TEST_CP_R
![](https://kanda-it-school-kensyu.com/wp-content/uploads/6300f64e8868a00163809aebc767216a.png)
ZT200400101からのデータ取得(*なので全項目)
取得先はEX_TABLE(エクスポートパラメータ)
取得条件の登録日に20210101が設定されているので、以下の7件が取得される。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/a9c696f25de287bc6c7cd361c64735ef.png)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/d091124251b658a46ab718a6d5d9a0ca.png)
EX_NUMBERに数値「100」を代入する
![](https://kanda-it-school-kensyu.com/wp-content/uploads/4751844a88c8fb1926e4060f15e86f57.png)
数値100が入る
![](https://kanda-it-school-kensyu.com/wp-content/uploads/9b00c7b8e585f11103b1de6aa4fab524.png)
EX_TABLEの値をEX_DATAに代入する
![](https://kanda-it-school-kensyu.com/wp-content/uploads/ae0f222186701737515cccab12c05f82.png)
EX_TABLEの値がEX_DATAに代入される
![](https://kanda-it-school-kensyu.com/wp-content/uploads/902002fa0b26c06584aeb63edf22f8e1.png)
![](https://kanda-it-school-kensyu.com/wp-content/uploads/260ed53192c417d1063016d16fe6dbd9.png)
その後の処理は特にないので、結果画面等もなし。
![](https://kanda-it-school-kensyu.com/wp-content/uploads/0f07faa33247f18d868a3d2f780e6774.png)