インライン・コードによる例外条件の処理

プログラムが C または C++ で書かれている場合や、AMODE(64) アセンブラー言語アプリケーションである場合は、例外条件を処理するために使用できる手法はインライン・コードのみです。 プログラムが C または C++ で書かれておらず、AMODE(64) アセンブラ言語アプリケーションでもない場合、例外条件を処理するには、NOHANDLE オプションを使用するか、EXEC CICS コマンドに RESP オプションを指定する必要があります。

このタスクについて

RESP オプションは、処置を改善するために例外条件の値をユーザー・プログラムで直接利用可能にします。

NOHANDLE または RESP オプションを使用する場合、 コマンドの実行の過程で発生する可能性のあるすべての条件を、プログラムで確実に処理できることを確認してください。 RESP 値は、ユーザー・プログラムが処理内容を決めるため、および EXEC インターフェース・ブロック (EIB) に入る情報のうちで必要になる可能性がある詳細情報を決めるために利用可能です。 特に、RESP2 値は EIB のフィールドの 1 つに入ります。 EIBの詳細については、EIBフィールドを参照してください。 あるいは、プログラムでコマンドに RESP2 を指定すると、RESP2 の値が CICS によって直接返されます。

RESP の引数は、ユーザー定義のフルワード 2 進データ域 (長整数) です。 この引数には、コマンドから戻る時に、起こった可能性がある条件と対応する値が入ります。 通常、この値は DFHRESP(NORMAL) です。 DFHRESP 組み込み変換プログラム機能では、RESP 値をシンボリックに検査できるので、RESP 値のテストが簡単になります。 この方法は、コードを読む者にとってわかりにくい 2 進数値を調べるより容易です。

COBOLおよびPL/IでのRESPおよびDFHRESPの使用

次の例は、RESPオプションを使用するCOBOLのEXEC CICS呼び出しである。 PL/I の例と似ていますが、END-EXEC ではなくセミコロン (;) で終わります。
EXEC CICS WRITEQ TS FROM(abc)
QUEUE(qname)
NOSUSPEND
RESP(xxx)
END-EXEC.
例えば、DFHRESP を使用して RESP 値をテストする場合、コードは次のようになります。
IF xxx=DFHRESP(NOSPACE) THEN …

C および C++ での RESP および DFHRESP の使用

次の例は、RESP変数の宣言を含め、RESPオプションを使ったCのEXEC CICS呼び出しである:
long response;
⋮
EXEC CICS WRITEQ TS FROM(abc)
QUEUE(qname)
NOSUSPEND
RESP(response);
例えば、DFHRESP を使用して RESP 値をテストする場合、コードは次のようになります。
if (response == DFHRESP(NOSPACE))
{
⋮
}

アセンブラ言語でのDFHRESPの使用

例えば、アセンブラー言語による RESP 値のテストの場合、コードは次のようになります。
CLC xxx,DFHRESP(NOSPACE)
BE ...