実際のアプリケーションで、SJPは本当に単純なのですか?
おそらく単純ではありません。多くの場合、呼び出すプログラムに対してまたは呼び出すプログラム間で簡単なパラメータ(複雑な場合もある)を渡す必要があります。
ただし、このスタイルのアプリケーション設計では、通常、プログラム・グループは共通パラメータ・プロトコルを共有する大規模なアプリケーション・グループに分類されます。
たとえば、REQUEST_TYPEフィールドを、RAMPスクリプト間で交換される情報に追加することで、異なるプログラム・パラメータ・プロトコルを次のように簡単に処理することができます(ロジックは擬似コード)。
WRITE and READ the 5250 screen containing PGMNAME and REQUEST_TYPE
DOWHILE (REQUEST_TYPE not equal to "SIGNOFF")
CASE of REQUEST_TYPE
WHEN = "CALLP1" CALL PGM_NAME using calling protocol 1 for parameters
WHEN = "CALLP2" CALL PGM_NAME using calling protocol 2 for parameters
WHEN = "CALLP3" CALL PGM_NAME using calling protocol 3 for parameters
< etc >
ENDCASE
WRITE and READ the 5250 screen containing PGMNAME and REQUEST_TYPE
ENDWHILE
RPGやCLプログラムを使用していた場合、IBM i のプログラム呼び出しインターフェースの高い柔軟性に気づいていないかもしれません。プログラム・パラメータは単なる記憶領域であり、プログラム間をポインターとして渡されます。プログラム・パラメータには次の特徴があります。
· パラメータの長さは、呼び出されるプログラムで定義されている長さと同一である必要はありません。それ以上の長さがあれば大丈夫です。これにより、SJP内でパラメータ変数の小さなセットを共有したり再利用することが非常に簡単になります。
· 実際に要求されているよりも多くのパラメータをプログラムに渡すことができます。余分なパラメータは通常無視されます。つまり、プログラム内で、実際のCALLコマンドのほとんどをなくすことができます。
· パラメータ値はRAMPスクリプトからSJPに直接渡して、さらに呼び出し先のプログラムに渡すことができます。またこの手法を使用して、スクリプトに再び返されたパラメータ値を取得することもできます。つまり、RAMPスクリプトを使用してバッチ・スタイル・プログラムを呼び出すこともできます。