サービスプログラムの作成(SPP)
形式
PROGRAM-ID. プログラム名.
LINKAGE SECTION.
01 一意名1.
02 データ名A PIC X(n).
01 一意名2.
02 データ名B PIC S9(9) COMP.
01 一意名3.
02 データ名C PIC X(n).
01 一意名4.
02 データ名D PIC S9(9) COMP.
PROCEDURE DIVISION USING 一意名1 一意名2 一意名3 一意名4
:
:
サービスの処理
:
:
EXIT PROGRAM.
機能
サービスを実行して結果を返すSPPのサービスプログラムです。クライアントUAPで呼び出したCBLDCRPC('CALL ')からサービスを要求されます。
サービスプログラムの処理は,上記の形式で任意に作成してください。サービス名は,サービスプログラムのプログラムIDに対応させます。この対応づけは,UAPの実行環境を設定するときに指定します。UAPの実行環境を設定する方法を次に示します。
データ領域の設定
サービスプログラムには,次の値がデータ領域に渡されます。これは,クライアントUAPがCBLDCRPC('CALL ')に設定した値です。
サービスプログラムには,次の値をデータ領域に設定します。
サービスプログラムは,データ名Cに応答を設定して,その長さをデータ名Dに設定してからリターンしてください。
サービスのクライアントUAPへの応答は,サービスプログラムがトランザクションとして実行したかどうか,またはコミットしたかロールバックしたかには無関係に送信されます。必要ならばサービスプログラムでクライアントUAPにエラー発生を知らせる応答を作成してください。
クライアントUAPから値が渡されるデータ領域
●データ名A
クライアントUAPで設定した,入力パラメタが渡されます。
●データ名B
クライアントUAPで設定した,入力パラメタの長さが渡されます。
●データ名D
クライアントUAPで設定した,応答の長さが渡されます。
UAPで値を設定するデータ領域
●データ名C
サービスプログラムからの応答を設定します。サービスプログラムの処理では,データ名Dに処理結果を設定してからリターンしてください。
●データ名D
サービスプログラムからの,実際の応答の長さを設定します。クライアントUAPから渡されたデータ名Dの値以下の数値を設定してください。
サービスプログラムの処理での注意
トランザクションとサービスプログラムの関係
UAPの実行環境を設定するときに,トランザクション属性とする指定をしていて,クライアントUAPがトランザクションとして実行している場合は,サービスプログラムもトランザクションとして実行されます。この場合,サービスプログラムでCBLDCTRN('BEGIN ')を呼び出さないでください。
グローバルトランザクションのそれぞれのサービスは,コミットするか,ロールバックとなるかのどちらかが保証されています。トランザクションブランチとして実行されるサービスプログラムがEXIT PROGRAMで終わることで,そのトランザクションブランチを正常終了させることを要求したことになります。
UAPの実行環境を設定するときに,トランザクション属性とする指定をしていても,クライアントUAPがトランザクションとして実行していないと,サービスプログラムはトランザクションとして実行されません。サービスプログラムの処理をトランザクションとして実行する場合は,任意の時点で CBLDCTRN('BEGIN ')と同期点を取得するプログラムを呼び出してください。
UAPの実行環境を設定するときに,トランザクション属性としない指定をした場合は,サービスプログラムから CBLDCTRN('BEGIN ')を呼び出しても,サービスプログラムはトランザクションとして実行できません。
ステータスコード
ステータスコードはありません。OpenTP1でもステータスコードを参照しません。サービスプログラムから-1をリターンしても,ロールバックを要求したことにはなりません。