コンテンツフレーム起動

メインプログラムからのグローバルデータ 文書を SAP ライブラリストラクチャに組み込む

サブルーチンは、サブルーチンが定義されたプログラム ( メインプログラム) 内のすべてのグローバルデータにアクセスすることができます。このため、サブルーチン内のデータを変更しない場合、またはデータがほとんど含まれていない場合は、パラメータインタフェースを定義する必要はありません。

例

FORM HEADER.

   WRITE: / 'Program started by', SY-UNAME,
          / 'on host', SY-HOST,
            'date:', SY-DATUM, 'time:', SY-UZEIT.

   ULINE.

ENDFORM.

この例では、インクルードプログラムの例のように一覧ヘッダが表示される、HEADER というサブルーチンを登録します。

ただし、サブルーチンでプログラムのグローバルデータに影響を与えずに複雑なデータ操作を実行する場合は、必要なデータを正確に渡すパラメータインタフェースを定義する必要があります。適切なプログラミングスタイルおよびカプセル化のため、少なくともサブルーチンでデータを変更する際は、 常にパラメータインタフェースを使用する必要があります。

変更に対するグローバルデータオブジェクトの保護

グローバルデータオブジェクトの値がサブルーチン内部で変更されないようにするには、以下の命令文を使用します。

LOCAL <f>.

この命令文は FORM 命令およびENDFORM 命令間でのみ使用します。LOCAL では、サブルーチン内部のデータ宣言によって隠せないグローバルデータオブジェクトの値を保持することができます。

たとえば、TABLES 命令によって定義されたテーブル作業領域を、サブルーチン内部の他の TABLES 命令で宣言することはできません。テーブル作業領域をローカルで使用しながら、そのコンテンツをサブルーチン外部で保持する場合は、LOCAL 命令を使用する必要があります。

 例

PROGRAM FORM_TEST.

TABLES SFLIGHT.

PERFORM TABTEST1.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.

PERFORM TABTEST2.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.

FORM TABTEST1.
   SFLIGHT-PLANETYPE = 'A310'.
   SFLIGHT-PRICE = '150.00'.
   WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
ENDFORM.

FORM TABTEST2.
   LOCAL SFLIGHT.
   SFLIGHT-PLANETYPE = 'B747'.
   SFLIGHT-PRICE = '500.00'.
   WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
ENDFORM.

プログラムを実行すると、以下が表示されます。

A310                150.00

A310                150.00

B747                500.00

A310                150.00

プログラムではデータベーステーブル SFLIGHT に対してテーブル作業領域 SFLIGHT が登録されます。TABTEST1 およびTABTEST2 では、テーブル作業領域 SFLIGHT に異なる値が割り当てられます。TABTEST1 に割り当てられた値はグローバルに有効ですが、TABTEST2 に割り当てられた値はローカルでのみ有効です。

 

 

 

 

コンテンツフレーム終了