ABAP プログラムを実行時すると、その処理ブロックが特定の順序で呼び出されます。これは、プログラムの外部にある現在のワークプロセスのプロセッサによって制御されます。プログラムフローのために、関連するワークプロセスの Dynpro プロセッサと ABAP プロセッサを ABAP 実行時環境へと集約することができます。実行時環境には、一定の順序で Dynpro と処理ブロックを呼び出す一連の特殊な制御パターンが含まれます。そのような連続したセクションもプロセッサと呼ばれます。ABAP プログラムの実行時には、各種プロセッサの間で制御が受け渡されます。
各 ABAP プログラムにはプログラムタイプがあり、プログラムの登録時にはプログラム属性の中でそのタイプを設定しなければなりません。
実行可能プログラム、モジュールプール、汎用グループ、クラスプール、インタフェースプール、サブルーチンプール、インクルードプログラムの 7 種類のプログラムタイプの中から選択することができます。
リリース 4.6 より前では、プログラムタイプを選択するために 1 文字の内部的ID を指定する必要がありました。たとえば、実行可能プログラムにはタイプ 1 が割り当てられていました。現在、プログラムタイプは完全な名称にもとづいて選択されます。プログラムの基本的な技術属性、すなわちプログラムにどの処理ブロックを含めることができるのか、ABAP 実行時環境によりそのプログラムはどのように処理および実行されるのか、および独自の Dynpro と連動できるのかどうかが、プログラムタイプにより定義されます。
ABAP アプリケーションプログラムの実行時には、そのプログラムの外部すなわち実行時環境から、少なくとも最初の処理ブロックを呼び出さなければなりません。次にこの処理ブロックはさらに処理ブロックを呼び出すか、実行時環境へと制御を返すことができます。ABAP プログラムを起動すると、(プログラムタイプに応じて) 実行時環境によりプロセッサが起動され、そのプロセッサにより最初の ABAP 処理ブロックが呼び出されます。ユーザまたはシステムがプログラムを起動する (たとえば、バックグラウンド処理において) か、リモートファンクションコール (RFC) 用の外部インタフェースなどを通じて起動することができます。
通常は、SAP システムのユーザがプログラムと直接に操作することはありません。ただし、実行可能プログラムの場合には該当しません。システム → サービス → レポートと選択した後でプログラム名を入力すると、実行可能プログラムを起動することができます。その他の独立したプログラム (すなわちインクルードプログラムを除くすべてのプログラムタイプ) については、トランザクションコードを入力して呼び出すか、プロシージャを使用してロードすることができます。たいていの場合、ユーザはプログラム名やトランザクションコードを知る必要さえありません。なぜならば通常は、プログラムの呼出と、関連アプリケーションのメニューパスはリンクしているからです。
トランザクションコードは 20 文字の名称であり、ABAP プログラムの Dynpro またはメソッドに割り当てられ、プログラムを実行するために使用されます。プログラムを実行するには、標準ツールバーの入力項目にトランザクションコードを入力するか、CALL TRANSACTION 命令または LEAVE TO TRANSACTION 命令を使用します。Dynpro とリンクしたトランザクションコードは、実行可能プログラム、モジュールプールおよび汎用グループについて有効です。メソッドとリンクしたトランザクションコードは、インクルードプログラムを除くすべてのプログラムタイプについて使用可能となります。
実行可能プログラムを登録するには、ABAP エディタと呼ばれるツールを直接に使用します。実行可能プログラムには、ABAP でサポートされるすべての処理ブロック (汎用モジュールを除く) と、必要な数のローカルクラスを含めることができます。実行可能プログラムは SUBMIT 命令のみによって起動されます。NetWeaver AS ABAP では、画面上に実行可能プログラムの名称を入力することにより呼び出す方法がいくつか提供されていますが、SUBMIT 命令はバックグラウンドで実行されます。
ユーザ定義 Dynpro を直接に使用して実行可能プログラムを制御する必要はありません。なぜならば、実行時環境の関連プロセッサによって、処理ブロックと画面 (選択画面と一覧) は自動的かつ事前定義された順序で呼び出されるからです。プロセスフローを使用すると、ユーザは選択画面上で選択パラメータを入力することができます。その場合、データはデータベースから選択され、処理されます。最後に出力一覧が表示されます。どの段階においても、プログラマは独自の Dynpro を定義する必要はありません。画面上のユーザアクションにより、さらに処理ブロックをトリガすることができます。
実行時環境を使用することにより、論理データベース、すなわちデータベーステーブルからデータを読み込むための特殊なABAP プログラムを使用することもできます。実行可能プログラムのフローの最終目的はレポート作成です (レポートの主な役割は、データベースからデータを読み込み、処理し、結果を表示することです)。多くの場合に実行可能プログラムがレポートと呼ばれ、実行可能プログラムを実行することがレポーティングと呼ばれるのはこのためです (レポートプログラミングを参照)。同様に、実行可能プログラムのソースコードは REPORT 命令から始まります。
イベントブロックを定義することは必須ではないので、ABAP プログラムによりどのイベントに応答すべきかをユーザ自身で決定することができます。さらに任意の時点で、指定されたプログラムフローを中止して、ユーザ独自の Dynro または処理ブロックを呼び出すことができます。たとえばこれを使用すると、一覧の中ではなく、ダイアログ Dynpro 上のテーブルの中にデータを表示することができます。最も単純な実行可能プログラムには、処理ブロックが 1 つのみ含まれます (START-OF-SELECTION)。
実行可能プログラムにユーザダイアログは必要ありません (ダイアログプログラミングを参照)。バリアントを使用して選択画面にデータを入力し、一覧の代わりに直接にスプールシステムへとデータを出力することができます。したがって、実行可能プログラムはバックグラウンド処理の前提条件となります。
実行可能プログラムに対してトランザクションコードが割り当てられている場合、ユーザはプログラム名ではなくトランザクションコードを使用してプログラムを起動することができます。トランザクションコードを使用するレポートの実行時にも、レポート指向実行時環境が呼び出されます。この種のトランザクションはレポートトランザクションと呼ばれます。
ユーザのプログラムフローの全部または一部が、事前定義された実行時環境のフローと一致する場合には、実行可能プログラム (レポート) の使用が適しています。リリース 4.5A までは、論理データベースを使用する唯一の手段は、実行可能プログラムを使用することでした。ただし、リリース 4.5A 以降では単独で論理データベースを呼び出すこともできます。
モジュールプールは ABAP エディタを使用することにより直接に登録されるもので、PROGRAM 命令により導入されます。レポートイベントブロックと汎用モジュールを例外とし、モジュールプールには ABAP でサポートされるすべての処理ブロックと、必要な数のローカルクラスを含めることができます。モジュールプールの実行中には ABAP 実行時環境のすべてのイベントがトリガされる可能性があります。
モジュールプールの最も重要な技術的属性は、Dynpro 制御ロジックを使用した場合にのみ制御可能となることです。モジュールプールを起動するには、プログラムおよびその Dynpro の 1 つ (第一画面) とリンクしたトランザクションコードを使用しなければなりません。そのようなプログラムのもう 1 つの特徴は、スクリーンペインタを使用してユーザ独自の Dynpro を定義しなければならないことです (ただし、第一画面を選択画面とすることができます)。
トランザクションコードを使用してプログラムを起動する場合、第一画面を呼び出すプロセッサは実行時環境によって開始されます。次にそのプロセッサにより、対応する ABAP プログラムの中でダイアログモジュールが呼び出されます。プログラムフローの残りの部分は任意の形式をとることができます。たとえば、ダイアログモジュールは以下を実行することができます。
● Dynpro への制御の戻し。その後、処理は後続 Dynpro に渡されます。各 Dynpro は静的または動的に設定される後続 Dynpro を 1 つ持ちます。Dynpro とその後続 Dynpro は、自由に定義できる Dynpro 順序のコンポーネントです。
● 他のDynpro 順序、選択画面または一覧の呼出。それらから ABAP プログラム内の他の処理ブロックが起動されます。
● 内部または外部からの、他の処理ブロックの呼出。
● CALL TRANSACTION または SUBMIT による、他のアプリケーションプログラムの呼出。
多数の Dynpro を使用したダイアログ指向のプログラムを作成する場合に、その制御ロジックによりDynpro 順序のプログラムフローの大部分が決定されるならば、モジュールプールの使用が適します。
汎用グループまたは汎用プールは FUNCTION-POOL 命令により導入されます。汎用モジュール (他のすべての ABAP プログラムの中から呼び出すことのできる特殊なプロシージャ) を含むことを許されるのはこれらのプログラムのみです。トランザクションコードを使用して汎用グループまたは汎用プールを実行することができますが、通常は呼び出される汎用モジュールによってロードされます。レポートイベントブロックを例外とし、汎用グループには ABAP でサポートされるすべての処理ブロックと、必要な数のローカルクラスを含めることができます。
実行可能プログラムやモジュールプールと同様に、汎用グループには選択画面と一覧Dynpro を含む独自の Dynpro を含めることができます。イベントブロックとダイアログモジュールの中でのユーザアクションに応答する画面処理も汎用グループ内で実行されます。各画面は、グループの汎用モジュールの内部から呼び出されます。したがって、複数の画面と 1 つの汎用モジュールを含む汎用グループを使用すると、Dynpro 制御をモジュール化することができます。
汎用モジュールビルダは ABAP ワークベンチ内のツールであり、これを使用して汎用グループおよび汎用モジュールを登録することができます。
クラスプールに独自の画面を含めたり、メソッドを除く処理ブロックを含めたりすることはできません。クラスプールは CLASS-POOL 命令により導入され、1 つのグローバルクラスと必要な数のローカルクラスのためのコンテナとしてのみ使用されます。クラスプールをロードするには、そのグローバルクラスが使用されます。リリース 6.10 では、トランザクションコードをグローバルクラスのメソッドとリンクすることもできるため、クラスのオブジェクトはその使用時に暗黙的に登録されます。
クラスビルダは ABAP ワークベンチ内のツールであり、これを使用してクラスプールを登録することができます。
インタフェースプールに独自の Dynpro を含めたり、処理ブロックを含めたりすることはできません。インタフェースプールは INTERFACE-POOL 命令により導入され、1 つのグローバルインタフェースのためのコンテナとしてのみ使用されます。このグローバルインタフェースを任意のグローバルクラスまたはローカルクラスの中で実装することができます。インタフェースプールをロードするにはインタフェースが使用されます。
クラスプールと同様に、インタフェースプールを登録するには ABAP ワークベンチのクラスビルダを使用します。
サブルーチンプールは ABAP エディタを使用して登録され、PROGRAM 命令により導入されます。独自の Dynpro を含むことはできません。また LOAD-OF-PROGRAM イベントブロックを例外として、サブルーチンのみを処理ブロックとして使用することができます。サブルーチンプールをロードするには、他の ABAP プログラムの中から、サブルーチンプールに属するサブルーチンを外部的に呼び出します。
データ型グループまたはデータ型プールは ABAP ディクショナリツールを使用して登録され、TYPE-POOL 命令により導入されます。データ型グループに独自の Dynpro を含めたり、処理ブロックを含めたりすることはできません。データ型グループはグローバルデータ型のためのコンテナとしてのみ使用されます。任意の ABAP プログラムの中で TYPE-POOLS 命令を使用することでグローバルデータ型を可視とすることができます。
他のプログラムタイプとは異なり、インクルードプログラムはプログラム自身のメモリを持つ独立したコンパイルユニットではありません。インクルードプログラムを実行することはできません。インクルードプログラムは ABAP ソースコード用のライブラリという役割のみを果たします。インクルードプログラムは、プログラムテキストを系統化して小さな編集可能単位とするためにのみ使用されます。INCLUDE 命令を使用するとその編集可能単位を他の ABAP プログラムの任意の場所に挿入することができます。インクルードプログラムと処理ブロックの間に技術的な関係はありません。インクルードプログラムは、データ宣言や、類似した処理ブロックのセットなどの、論理的プログラミングユニットとして適しています。ABAP ワークベンチには、モジュールプール、汎用グループおよびクラスプールを自動的に分割してインクルードプログラムにする仕組みがあります。ユーザ独自のインクルードプログラムを登録するには ABAP エディタを使用します。