!--a11y-->

呼出先のプロシージャ ( サブルーチン、汎用モジュール、およびメソッド) は、常に呼出元プログラムと同じ内部セッションで実行されます。
サブルーチンをコールするには、次の命令
PERFORM <subr>[(<prog>)] ...
を使用します。<prog> オプションを指定しない場合は、サブルーチンは内部でコールされます。つまり、サブルーチンは呼出元プログラムに属し、ロードは行われません。
<prog> オプションを指定すると、コールは外部で行われます。つまりサブルーチンはプログラム<prog> に属します。サブルーチンをコールすると、プログラム <prog> 全体が、( まだロードされていない場合は) 呼出元プログラムの内部セッションにロードされます。ロードされたプログラムは、呼出元プログラムのプログラムグループに属します。ただし、サブルーチンが汎用グループに属している場合は、新しいプログラムグループが作成されます。外部のサブルーチンがどのプログラムグループに所属するかによって、インタフェースの作業領域および使用する画面が決定されます。ただし、外部のサブルーチンは使わない方が良いため、この割当は動的に変えることも可能です。
汎用モジュールをコールするには、次の命令
CALL FUNCTION <func> ...
を使用します。汎用モジュールのコールは、( 汎用モジュールが、同じ汎用グループの別のプロシージャにコールされる場合を除いては) 外部で行われます。汎用モジュールをコールすると、その汎用モジュールのグループ全体が、( まだロードされていない場合は) 呼出元プログラムの内部セッションにロードされます。内部セッションでは、汎用グループによって、独自のインタフェース作業領域と画面を持つ、別のプログラムグループが形成されます。これは、汎用グループでは、データと画面のカプセル化が外部サブルーチンより優れていることを意味します。
メソッドをコールするには、次の命令
CALL METHOD [<ref>->|<class>=>]<meth> ...
を使用します。命令の <ref> オプションまたは <class> オプションを指定しない場合は、コールは同じクラス内でローカルに行われ、クラスはリロードされません。
<ref> オプションまたは <class> オプションを指定すると、メソッドのコールは、オブジェクト参照 <ref> またはクラス名<class> で指定されたクラスのメソッドに適用されます。メソッドをコールすると、クラスプール全体が、( まだロードされていない場合は) 呼出元プログラムの内部セッションにロードされます。クラスプールによって、内部セッション内に追加のプログラムグループが形成されます。このグループは、データおよび画面について呼出元と共有せず、このグループから外部サブルーチンをコールすることはできません。
プロシージャを終了するには、次の命令
EXIT
または
CHECK <logexp>
を使用します。