コンテンツフレーム起動

汎用モジュールの呼出 文書を SAP ライブラリストラクチャに組み込む

このセクションでは、汎用モジュールビルダからの汎用モジュールの呼出について説明します。

汎用モジュールの検索

新機能をプログラムする前、または新規汎用モジュールを登録する前に、汎用モジュールビルダを検索して、同じタスクを実行する汎用モジュールがすでに存在するかどうを確認する必要があります。 

これについての追加情報は、ABAP ワークベンチ文書のストラクチャのリンク汎用モジュールの検索を参照してください。たとえば、リポジトリ情報システムに検索基準として*STRING* を入力することによって、文字列を処理する汎用モジュールを検索することができます。以下は、検索された汎用モジュール一覧からの抜粋です。

このグラフィックは添付のテキストに説明されています

タイトル CSTR は汎用グループです。これらの汎用モジュールを含むメインプログラム SAPLCSTR があります。汎用モジュールを選択すると、汎用モジュールビルダでその属性を照会することができます。 

重要な属性:

        文書

文書では、汎用モジュールの目的を説明し、モジュールとデータをやり取りするためのパラメータおよび例外を一覧表示します。汎用モジュールとデータをやり取りする方法、および処理するエラーについても説明します。

        インタフェースパラメータおよび例外

このセクションでは、インタフェースおよび例外についての追加情報、および汎用モジュールの使用方法について説明します。追加情報については、ABAP ワークベンチ文書のストラクチャのリンクインタフェースパラメータに関する情報の照会を参照してください。汎用モジュールには以下のインタフェースパラメータがあります。

         インポートパラメータ。インポートパラメータには、オプションのフラグが付けられていない限り、汎用モジュールの呼出時にデータを指定する必要があります。これらを汎用モジュールで変更することはできません。 

         エクスポートパラメータ。エクスポートパラメータは汎用モジュールから呼出元プログラムにデータを戻します。エクスポートパラメータは常にオプションです。プログラムで受け取る必要はありません。

         パラメータの変更。オプションのフラグが付けられていない限り、汎用モジュールの呼出時にデータを指定する必要があります。これらは汎用モジュールで変更することができます。変更された値は、その後呼出元プログラムに戻されます。

         テーブルパラメータ。テーブルパラメータを使用して、内部テーブルを渡します。これらは CHANGING パラメータとして扱われます。ただし、パラメータ型を正しく指定すれば、内部テーブルを他のパラメータで渡すこともできます。

ABAP ディクショナリ型または基本 ABAP 型を参照することによって、インタフェースパラメータの型を指定することができます。汎用モジュールを呼び出す際は、実パラメータとインタフェースパラメータが互換性があることを確認する必要があります。

インタフェースパラメータは、デフォルトでは値によって渡されます。ただし、参照によって渡されることも可能です。テーブルパラメータは、値によってのみ渡されます。オプションのパラメータのインポートおよび変更に、デフォルト値を割り当てることができます。オプションパラメータが汎用モジュール呼出に渡されない場合は、初期値が指定されているか、デフォルト値が設定されているかのいずれかです。

汎用モジュールで発生したエラーの処理には、例外が使用されます。呼出元プログラムでエラーが発生したかどうかがチェックされ、それに応じた対策がとられます。

汎用モジュールのテスト

プログラムに汎用モジュールをインクルードする前に、汎用モジュールビルダでテストすることができます。 

このグラフィックは添付のテキストに説明されています

これについての追加情報は、ABAP ワークベンチ文書のストラクチャのリンク汎用モジュールのテストを参照してください。

ABAP での汎用モジュールの呼出

汎用モジュールを呼び出すには、CALL FUNCTION 命令を使用します。

CALL FUNCTION <module>
     [EXPORTING  f1 = a1.... fn = an]
     [IMPORTING  f1 = a1.... fn = an]
     [CHANGING   f1 = a1.... fn = an]
     [TABLES     f1 = a1.... fn = an]
     [EXCEPTIONS e1 = r1.... en = rn [ERROR_MESSAGE = rE]
                                     [OTHERS = ro]].

汎用モジュールの名前 <module> は、リテラルまたは変数として指定することができます。各インタフェースパラメータ <fi> は、実パラメータr <ai> に明示的に割り当てられます。各例外 <ei> にリターンコード <ri> を割り当てることができます。割当の書式は常に < インタフェースパラメータ> = < 実パラメータ> であることが必要です。等号記号はこのコンテキストの代入演算子ではありません。

        EXPORTING の後、すべての必須インポートパラメータに、それぞれの型に適した値を指定する必要があります。必要に応じて、オプションのインタフェースパラメータに値を指定することができます。

        IMOPORTING の後、適切な型の変数を割り当てることによって、汎用モジュールからエクスポートパラメータを受け取ることができます。 

        CHANGING または TABLES の後、すべての必須変更パラメータまたは必須テーブルパラメータに値を指定する必要があります。汎用モジュールの実行が終了すると、変更された値は実パラメータに戻されます。必要に応じて、オプションの変更パラメータまたはテーブルパラメータに値を指定することができます。

EXCEPTIONS オプションを使用して、汎用モジュールの例外を処理することができます。汎用モジュールの実行中に例外 <e i> が生成されると、汎用モジュールは終了され、参照によって渡された値を除き、汎用モジュールからプログラムに値は渡されません。EXCEPTION オプションに <e i> が指定されている場合は、呼出元プログラムはSY-SUBRC <r i> を割り当てることによって、例外を処理します。<r i> には数値リテラルを指定する必要があります。

例外一覧で ERROR_MESSAGE を指定すると、汎用モジュールでのメッセージ処理を制御することができます。通常汎用モジュールでは、MESSAGE... を使用することによってのみメッセージを呼び出します。RAISING 命令。ERROR_MESSAGE を使用すると、汎用モジュールでRAISING オプションなしで呼び出されたメッセージを、以下のように自動的に処理することができます。

        クラス SI 、および W のメッセージは無視されます ( ただし、バックグラウンドジョブでログに書き込まれます)

        クラス E 、および A のメッセージは、例外 ERROR_MESSAGE が発生した場合と同様に汎用モジュールを終了させます (SY-SUBRC <rE> に設定されます)

EXCEPTIONS の後に OTHERS を指定すると、単一のリターンコードが、一覧で明示的に指定していない他のすべての例外に割り当てられます。 

複数の例外に、同じ番号 <r i> を使用することができます。

 例

汎用モジュールを呼び出す最も簡単な方法 ( 推奨方法) は、ABAP エディタで命令挿入機能を使用する方法です。呼出機能を選択して汎用モジュールの名前を指定すると (F4 ヘルプを使用可能) 、ソースコードに、その汎用モジュールのすべてのオプションを含む CALL FUNCTION 命令が挿入されます。

このグラフィックは添付のテキストに説明されています

機能のオプション部分は、コメントとして挿入されます。上記の例では、STRING POS は必須パラメータです。他方、LANGU はオプションです。LANGU にはデフォルト値SY-LANGU が指定されています ( ログオン言語のシステム項目) 。エクスポートパラメータの処理は任意です。例外の処理は、理論上は任意です。ただし、常に処理する必要があります。この理由により、EXCEPTIONS 行にはコメントされません。

RAISE または MESSAGE... を使用して、汎用モジュールの例外を開始することができます。RAISING 命令。呼出元プログラムが例外を処理する場合、両方の命令がプログラムにコントロールを戻します。MESSAGE ..... この場合、RAISING 命令はメッセージを表示しません。代わりに、以下のシステム項目が設定されます。

         メッセージクラス SY-MSGID

         メッセージタイプ SY-MSGTY

         メッセージ番号 SY-MSGNO

         SY-MSGV1 から SY-MSGV4 ( 項目 <f1> から <f4> の内容、メッセージにインクルード済 )

システム項目を使用して、呼出元プログラムからメッセージを開始することができます。

実パラメータに正しいデータ型を使用するために、汎用モジュールインタフェースを参照する必要があります。プログラムのソースコードで汎用モジュールの名前をダブルクリックすると、汎用モジュールビルダでそのソースコードに移動します。その後 ジャンプ インタフェース を選択して、インタフェースを照会することができます。

たとえば、上記のケースでは以下のようになります。

         STRING STRING1 、および STRING2 は汎用型 C を持ちます。実パラメータも型 C を持つ必要があります。ただし、長さは関係ありません。

         POS および POS_NEW は完全に指定された型 I を持ちます。実パラメータも型 I を持つ必要があります。

         LANGU ABAP ディクショナリ項目   SY-LANGU への参照で定義されたため、 LANGU も完全に指定された型を持ちます。実パラメータは、同じ型を持つ必要があります。

汎用モジュール STRING_SPLIT_AT_POSITION の完全な呼出は以下のようになります。

PROGRAM CALL_FUNCTION.

DATA: TEXT(10) TYPE C VALUE '0123456789',
      TEXT1(6) TYPE C,
      TEXT2(6) TYPE C.

PARAMETERS POSITION TYPE I.

CALL FUNCTION 'STRING_SPLIT_AT_POSITION'
     EXPORTING
          STRING            =  TEXT
          POS               =  POSITION
     IMPORTING
          STRING1           =  TEXT1
          STRING2           =  TEXT2
     EXCEPTIONS
          STRING1_TOO_SMALL = 1
          STRING2_TOO_SMALL = 2
          POS_NOT_VALID     = 3
          OTHERS            = 4.

CASE SY-SUBRC.
   WHEN 0.
    WRITE: / TEXT, / TEXT1, / TEXT2.

   WHEN 1.
    WRITE 'Target field 1 too short!'.

   WHEN 2.
    WRITE 'Target field 2 too short!'.

   WHEN 3.
    WRITE 'Invalid split position!'.

   WHEN 4.
    WRITE 'Other errors!'.

ENDCASE.

汎用モジュールは、特定の位置で入力項目を 2 つの出力項目に分割します。POSITION の内容がインターバル [4,6] にある場合は、汎用モジュールは例外が開始されずに実行されます。インターバル [1,3] および [7,9] の場合は、それぞれ例外STRING2_TOO_SMALL およびSTRING2_TOO_SMALL が開始されます。POSITION の他のすべての値の場合、例外 POS_NOT_VALID が開始されます。

 

 

 

コンテンツフレーム終了