コンテンツフレーム起動

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

ABAP 処理ロジックはR/3 アプリケーションプログラムのデータを処理します。ABAP は、とくにダイアログ指向のデータベースアプリケーションを対象として設計されています。以下の各セクションでは、ABAP プログラムの構造化と実行方法について説明します。

プログラム構造

ABAP プログラムは、アプリケーションプログラムの個別ダイアログステップ内でデータ処理を行います。したがって、プログラムを単一の順次単位として構成することはできません。個別のダイアログステップが割当可能なセクションに必ず分割してください。この要件を満たすために、ABAP プログラムはモジュ ル構造になっています。各モジュールを処理ブロックといいます。処理ブロックは、ABAP 命令セットで構成されています。プログラムを実行するとき、実際には一連の処理ブロックを呼び出しています。処理ブロックをネスト化することはできません。

次の図に、ABAP プログラムの構造を示します。

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

ABAP プログラムは、以下の 2 つの部分で構成されています。

グローバルデータの宣言部分、クラス、および選択画面

ABAP プログラムの最初の部分は、グローバルデータの宣言部分、クラス、および選択画面です。この部分の構成要素は以下のとおりです。

        グローバルデータ用のすべての宣言命令。グローバルデータはすべての内部処理ブロックで利用可能です。グローバルデータを定義するには、ダイアログモジュールまたはイベントブロックで、最初の処理ブロックの前で宣言命令を使用します。ダイアログモジュールまたはイベントブロックでローカルデータを宣言することはできません。

        すべての選択画面の定義。

        すべてのローカルクラス定義 (CLASS DEFINITION 命令) 。ローカルクラスは、ABAP のオブジェクト指向の拡張である ABAP オブジェクトに組み込まれています。

プロシージャ ( メソッド、サブルーチン、汎用モジュール) に発生する宣言命令は、これらの処理ブロック内のローカルデータに対する宣言部分になります。このデータは、データが宣言されているプロシージャ内のみで利用されます。

処理ブロックのコンテナ

ABAP プログラムの 2 番目の部分には、プログラムに対するすべての処理ブロックが含まれています。以下のタイプの処理ブロックが使用可能です。

        ダイアログモジュール ( ローカルデータ領域なし)

        イベントブロック ( ローカルデータ領域なし)

        プロシージャ ( メソッド、サブルーチン、専用のローカルデータ領域をもつ汎用モジュール)

ダイアログモジュールとプロシージャはそれらを定義する ABAP キーワード内に囲まれているのに対し、イベントブロックはイベントキーワードによって導入され、次の処理ブロックの始まりによって暗黙に終了します。

すべて ABAP 命令は ( プログラムの宣言部分内の宣言命令を除く) 、処理ブロックに組み込まれています。グローバルデータの宣言と処理ブロックの間に発生する非宣言 ABAP 命令は、START-OF-SELECTION 処理ブロックに自動的に割り当てられます。

処理ブロックの呼出

処理ブロックは ABAP プログラムの外側から呼び出すか、それ自身が処理ブロックの一部である ABAP コマンドを使用して呼び出すことができます。ダイアログモジュールとイベントブロックは、ABAP プログラムの外側から呼び出されます。プロシージャは、ABAP プログラム内の ABAP 命令を使用して呼び出されます。

イベントブロックの呼出は、以下の理由で、他の処理ブロックの呼出とは異なります。

イベントブロック呼出はイベントによって開始されます。選択画面と一覧上でのユーザアクションと実行時環境によって、ABAP プログラムで処理可能なイベントが開始されます。プログラムによって対応したいイベントに対してイベントブロックを定義するだけですみます ( 一方、サブルーチンの呼出には対応するサブルーチンが割り当てられる必要があります) 。これにより、ABAP プログラムは特定のイベントに応じて動作できますが、それを強制されることはありません。

プログラムのタイプと実行

ABAP プログラムを実行するときに、その処理ブロックを呼び出します。ABAP プログラムは、現在のワークプロセス内のプロセッサによって、プログラムの外側から制御されます。プログラムフローにより、Dynpro プロセッサと ABAP プロセッサを ABAP 実行時環境に要約することができます。実行時環境では、Dynpro ABAP 処理ブロックが制御されます。実行時環境には、Dynpro と処理ブロックを一定の順序で呼び出す特別の制御パターンが組み込まれています。このようなセクションは、プロセッサとも呼ばれます。ABAP プログラムを実行するときに、各種プロセッサ間でコントロールが渡されます。

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

R/3 システムには、さまざまなタイプの ABAP プログラムが用意されています。プログラムタイプによってプログラムの基本的な技術属性が決まるため、プログラム作成時にタイプを設定する必要があります。異なるプログラムタイプの主な相違は、実行時環境が処理ブロックを呼び出す方法にあります。

アプリケーションプログラムを実行する場合は、プログラムの外側から、つまり実行時環境から、少なくとも最初の処理ブロックを呼び出す必要があります。この処理ブロックは、追加の処理ブロックを呼び出すことも、コントロールを実行時環境に返すこともできます。ABAP プログラムを起動すると、実行時環境は最初の ABAP 処理ブロックを呼び出すプロセッサ ( プログラムタイプによって異なります) を開始します。ABAP プログラムはユーザによって、またはシステムによって ( たとえば、バックグラウンド処理で) 起動することも、あるいは外部インタフェース ( たとえば、リモートファンクションコール) を使って起動することもできます。

ユーザがプログラムを実行できる方法として、プログラム名を入力するかトランザクションコードを入力する 2 つの方法があります。トランザクションコードは任意のプログラムに割り当てることができます。その後で、ユーザはコマンドフィールドにコードを入力してプログラムを起動することができます。トランザクションコードは通常、R/3 システム内のメニューパスにリンクされています。

以下のプログラムタイプはアプリケーションプログラミングに関連しています。

タイプ 1

タイプ 1 のプログラムは、ユーザ定義のDynpro を使って制御される必要がないという重要な特性を備えています。代わりに、このプログラムは、一連の処理ブロック ( および、必要に応じて選択画面と一覧) を固定順序で呼び出す実行時環境によって制御されます。さらに、Dynpro でのユーザアクションによって、追加の処理ブロックを開始することができます。 

別の ABAP プログラムでSUBMIT 命令を使用して、タイプ 1 のプログラムと対応するプロセッサを実行時環境で起動することができます。また、プログラム名を入力してタイプ 1 プログラムを起動する方法がいくつか用意されています。このために、タイプ 1 プログラムを実行可能プログラムと呼んでいます。

タイプ 1 プログラムを実行すると、実行時環境で、一連のプロセッサが特定の順序に従って実行します。ユーザは、プロセスフローを使用して、選択画面上で選択パラメータを入力することができます。このデータは、データベースから選択されて処理されます。最後に、出力一覧が表示されます。プログラマは、どの段階でも独自の Dynpro を定義する必要がありません。また、実行時環境では論理データベースを使用することもできます。論理データベースは、特定のデータベーステーブルの内容を組み合わせた特殊な ABAP プログラムです。タイプ 1 プログラムのフローはレポート指向であり、その主要タスクはデータベースからデータを読み取って処理し、その結果を表示することです。このために、R/3 システム内の実行可能プログラム ( タイプ 1) レポートと呼ばれており、実行可能プログラムを実行することをレポーティングと呼んでいます。

イベントブロックの定義は強制ではないため、ABAP プログラムが対応しなければならないイベントをユーザ自身が決定できます。さらに、規定されたプログラムフローを終了して、独自の Dynpro または処理ブロックをいつでも呼び出すことができます。これを使用して、たとえば、一覧ではなく、ダイアログ画面のテーブルにデータを表示することができます。もっとも単純な実行可能プログラム ( レポート) には、処理ブロックが 1 つだけ (START-OF-SELECTION) 含まれています。

実行可能プログラムは、ユーザダイアログを必要としません。バリアントと出力データを使用して、一覧にではなく、スプールシステムに直接選択画面を書き込むことができます。これによって、実行可能プログラム ( レポート) R/3 システムでバックグラウンド処理の手段になります。

また、トランザクションコードを実行可能プログラムに割り当てることもできます。ユーザはその後で、プログラム名ではなく、トランザクションコードを使ってプログラムを起動することができます。トランザクションコードを使ってレポートを実行するときにも、レポート指向の実行環境が呼び出されます。このタイプのトランザクションを、レポートトランザクションと呼んでいます。

プログラムフローが実行時環境の事前定義フローの全体に、または一部に一致するときには、実行可能プログラム ( レポート) を使用することをお奨めします。リリース 4.5A までは、論理データベースを使用するには、実行可能プログラムを使用する以外に方法がありませんでした。ただし、リリース 4.5A 以降は、論理データベースを単独で呼び出すこともできます。

タイプ M

タイプ M プログラムのもっとも重要な技術属性は、Dynpro 制御ロジックを使用しないとプログラムを制御できないことです。このプログラムを起動するには、プログラムとその Dynpro 1 ( 第一画面) にリンクしているトランザクションコードを使用する必要があります。このプログラムのもう 1 つの特徴は、ユーザ独自の Dynpro をスクリーンペインタで定義しなければならないことです ( ただし、第一画面は選択画面でもかまいません)

トランザクションコードを使ってプログラムを起動すると、実行時環境では第一画面を呼び出すプロセッサが開始されます。このプロセッサは次に、対応する ABAP プログラムでダイアログモジュールを呼び出します。プログラムフローのその他の部分には、任意のフォームが使用できます。たとえば、ダイアログモジュールは以下の操作を行うことができます。

        コントロールを画面に返します。その後で、処理が後続画面に渡されます。各画面には、静的または動的に設定された後続画面が 1 つ設定されています。 

        別の順序による画面、選択画面または一覧を呼び出します。それによって、ABAP プログラムで追加処理ブロックが開始されます。

        別の処理ブロックを内部で、または外部で呼び出します。

        CALL TRANSACTION ( タイプ M プログラム) または SUBMIT ( タイプ 1 プログラム) を使用して、別のアプリケーションプログラムを呼び出します。

タイプ M ABAP プログラムには、さまざまなDynpro に関連するダイアログモジュールが組み込まれています。したがって、これらのプログラムをモジュールプールといいます。プログラムフローの大部分を決定する制御ロジックをもつ多数の Dynpro を使ってダイアログ指向プログラムを作成するときに、モジュールプールを使用することをお奨めします。

タイプ F

タイプ F プログラムは汎用モジュールのコンテナであり、トランザクションコードを使ったり、プログラム名を直接入力して起動することはできません。汎用モジュールは、他の ABAP プログラムから呼び出すことのできる特殊なプロシージャです。

タイプ F プログラムは汎用グループとして知られています。汎用モジュールは、汎用グループ内のみでプログラムすることができます。汎用モジュールビルダ ABAP ワークベンチのツールであり、これを使用して汎用グループや汎用モジュールを登録することができます。汎用モジュールとは別に、汎用グループにグローバルデータ宣言とサブルーチンを含めることができます。これらは、グループ内のすべての汎用モジュールに対して表示可能です。また、汎用モジュール内の Dynpro のイベントブロックを含めることもできます。

タイプ K

トランザクションコードを使用したり、プログラム名を入力してタイプ K プログラムを起動することはできません。タイプ K プログラムは、ABAP オブジェクト内のグローバルクラス用のコンテナです。タイプ K プログラムはクラス定義として知られています。クラスビルダ ABAP ワークベンチのツールであり、これを使用してクラス定義を登録することができます。

タイプ J

トランザクションコードを使用したり、プログラム名を入力してタイプ J プログラムを起動することはできません。タイプ J プログラムは、ABAP オブジェクト内のグローバルインタフェース用のコンテナです。タイプ J プログラムはインタフェース定義として知られています。クラス定義と同様に、クラスビルダにインタフェース定義を登録します。

タイプ S

トランザクションコードを使用したり、プログラム名を入力してタイプ S プログラムを起動することはできません。このプログラムはサブルーチン用のコンテナであり、他の ABAP プログラムから外部で呼び出すことができます。タイプ S プログラムはサブルーチンプールとして知られています。このプログラムに Dynpro を含めることはできません。

タイプ I

タイプ I プログラム ( インクルード といいます) は、プログラムコードを小さくて、管理しやすい単位に分割する手段です。INCLUDE 命令を使用して、別の ABAP プログラムの任意の場所にインクルードプログラムのコーディングを挿入することができます。インクルードプログラムと処理ブロック間に技術的な関係はありません。インクルードは、データ宣言や類似した処理ブロックのセットなどの論理プログラミング単位に適しています。ABAP ワークベンチには、モジュールプールと汎用グループをインクルードプログラムに自動的に分割するメカニズムが組み込まれています。

 

 

 

 

コンテンツフレーム終了