コンテンツフレーム起動

ABAP プログラムのメモリ構造 文書を SAP ライブラリストラクチャに組み込む

R/3 ベーシスシステムの概要 で説明したように、各ユーザは 1 つの SAPgui セッションで最大 6 つの R/3 ウィンドウを開くことができます。これらのウィンドウはそれぞれ、アプリケーションサーバ上で共有メモリの専用領域を使用するセッションに対応しています。

セッションで起動した最初のアプリケーションプログラムによって、メインセッション内の内部セッションが開きます。内部セッションには、ABAP プログラムとその関連データを格納したメモリ領域が割り当てられています。プログラムが外部ルーチン ( メソッド、サブルーチン、または汎用モジュール) を呼び出すと、そのメインプログラムと作業データも内部セッションのメモリ領域にロードされます。

常に有効な内部セッションは 1 つだけです。有効なアプリケーションプログラムが追加のアプリケーションプログラムを呼び出した場合は、別の内部セッションが開かれます。この場合は 2 つのケースが考えられます。2 番目のプログラムが実行を終了した時点でコントロールを呼出元プログラムに返さなかった場合には、呼び出されたプログラムが内部セッションで呼出元プログラムに置き換わります。呼出元プログラムのメモリの内容は削除されます。2 番目のプログラムが実行を終了した時点でコントロールを呼出元プログラムに返した場合には、呼び出されたプログラムのセッションは削除されません。代わりに、呼び出されたプログラムは無効になり、そのメモリ内容がスタックに配置されます。

各セッションのメモリ領域には、ABAP メモリと呼ばれる領域が含まれています。ABAP メモリはすべての内部セッションで使用できます。ABAP プログラムは、EXPORT 命令と IMPORT 命令を使って ABAP メモリにアクセスすることができます。この領域内のデータは、プログラム呼出が終了するまで変更されません。呼び出しているプログラムにデータを渡すには、呼出を行う前に、そのデータを ABAP メモリに入れる必要があります。その後で、呼び出されたプログラムの内部セッションが呼出元プログラムの内部セッションに置き換わります。これで、呼び出されたプログラムが ABAP メモリからデータを読み込めるようになります。最初の呼出を行ったプログラムにコントロールが戻されると、同じプロセスが逆の順序で実行されます。

また、すべての ABAP プログラムが SAP メモリにアクセスすることができます。このメモリ領域に対して、SAPgui 内のすべてのセッションがアクセスできます。SAP メモリを使用して、1 つのセッション内で 1 つのプログラムから別のプログラムにデータを渡したり、1 つのセッションから別のセッションにデータを渡すことができます。SAP メモリを使用するアプリケーションプログラムは、SPA/GPA パラメータ(SET/GET パラメータともいいます) を使用してこの操作を行う必要があります。これらのパラメータは、入力項目に値を事前割当するためによく使われます。これらのパラメータは、ユーザに対して個別に設定するか、アプリケーションプログラムのフローに従ってグローバルに設定することができます。SAPgui 内の異なるセッションは、SAP メモリのみによって接続されています。

次の図に、アプリケーションプログラムが共有メモリ内のさまざまな領域にアクセスする方法を示します。

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

この図では、ABAP プログラムは最初のメインセッションの2 番目の内部セッションで有効になっています。ABAP プログラムは、専用の内部セッションのメモリ、ABAP メモリ、および SAP メモリにアクセスできます。最初の内部セッションのプログラムは、現在有効なプログラムを呼び出しており、スタック上の専用データは現在無効になっています。現在有効なプログラムが別のプログラムを呼び出しており、そのプログラムが処理を終了しても、呼出元プログラム自体は処理を続行する場合には、新しいプログラムが 3 番目の内部セッションで有効化されます。

 

 

 

 

 

コンテンツフレーム終了