3.15.1 メッセージ制御機能の種類
メッセージの出力と応答の入力の方法には,次の2種類がある。
-
COBOL2002で作成したCOBOLアプリケーションの使用
-
32ビットモード:AIXで使用できる。
-
64ビットモード:Linuxで使用できる。
-
-
bjexm_messageコマンドの使用
-
カタログドプロシジャの使用
- 〈この項の構成〉
(1) COBOL2002で作成したCOBOLアプリケーションの使用
従来COBOL2002で作成したCOBOLアプリケーションからstdout/stdinを使用して入出力していたメッセージを,バッチジョブ実行システムでアプリケーションを実行した場合に,JP1/IM - Viewの画面を使って入出力できるように自動的に変更する方法である。
この方法を使用するためには,COBOL2002で次に示す機能を使ったプログラムを作成する必要がある。
-
DISPLAY UPON CONSOLE文
-
ACCEPT FROM CONSOLE文
-
STOP文(定数指定)
-
CBLTYPEサービスルーチン
これらのプログラムの作成方法については,マニュアル「COBOL2002 使用の手引 手引編」を参照のこと。
この方法を使用することで,COBOL2002で作成したCOBOLアプリケーションからのメッセージは,バッチジョブ実行システムの設定ファイルで指定したJP1/IM - Managerに接続したJP1/IM - Viewから参照が可能となる。さらに,ACCEPT文,STOP文およびCBLTYPEサービスルーチンについては,stdinから入力していた作業を,JP1/IM - Viewから入力できるようになり,従来のバッチ業務と同様の手順で運用ができるため,移行が容易になる。
(2) メッセージ出力コマンド(bjexm_messageコマンド)の使用
メッセージ出力コマンド(bjexm_messageコマンド)を使用することでJP1/IM - Viewの画面を利用してメッセージの出力と応答の入力ができる。bjexm_messageコマンドは応答内容に従ってリターンコードを出力する。このリターンコードを判定することで応答に従った動作ができる。
(3) カタログドプロシジャの使用
次のカタログドプロシジャを使用することでJP1/IM - Viewの画面を利用してメッセージの出力と応答の入力ができる。カタログドプロシジャのジョブステップのリターンコードで応答内容を識別して,応答内容に従って実行するジョブステップを制御できる。
(a) bjex_PAUSEカタログドプロシジャ
注釈に指定したメッセージを出力して応答待ちになり,ジョブの実行を一時停止する。ジョブの実行を継続するには注釈のメッセージに応答する。
<CALL NAME="bjex_PAUSE" > <SETSYMBOL NAME="MSG" VALUE="注釈" /> </CALL>
- 注釈 〜<空白を除く任意文字列>((1〜255バイト))<<Job_is_paused.>>
-
出力するメッセージを指定する。
SETSYMBOL要素のVALUE属性で指定できる上限を超えるとジョブ定義XMLファイルの解析エラーとなる。
注釈を省略する場合は,SETSYMBOL要素全体を省略する。
空白を含む場合は,正しく動作しない。
- ジョブステップのリターンコード
-
0:一時停止が解除された。
127:予期しない障害が発生した。
(b) bjex_WRITEカタログドプロシジャ
メッセージを出力し,ジョブを継続する。
<CALL NAME="bjex_WRITE" > <SETSYMBOL NAME="MSG" VALUE="メッセージ" /> </CALL>
- メッセージ 〜<空白を除く任意文字列>((1〜255バイト))<<message>>
-
出力するメッセージを指定する。
SETSYMBOL要素のVALUE属性で指定できる上限を超えるとジョブ定義XMLファイルの解析エラーとなる。
メッセージを省略する場合は,SETSYMBOL要素全体を省略する。
空白を含む場合は,正しく動作しない。
- ジョブステップのリターンコード
-
0:メッセージを出力した。
127:予期しないエラーが発生した。
(c) bjex_WRITERカタログドプロシジャ
応答要求メッセージを出力して応答待ちになる。
ジョブの実行を継続するには応答0から応答nのどれかのメッセージを応答する。ジョブステップは応答に対応したリターンコードを出力して終了する。例えば,応答0を応答するとリターンコードは0になり,応答1を応答するとリターンコードは1になり,応答nを応答するとリターンコードはnとなる。
定義した応答以外の応答をするとリターンコード127でジョブステップは終了する。
<CALL NAME="bjex_WRITER" > <SETSYMBOL NAME="MSG" VALUE="応答要求メッセージ" /> <SETSYMBOL NAME="ANS" VALUE="応答0 応答1 … 応答n" /> </CALL>
- 応答要求メッセージ 〜<空白を除く任意文字列>((1〜255バイト)) <<Key_in[yes,no,other-error]>>
-
出力するメッセージを指定する。
SETSYMBOL要素のVALUE属性で指定できる上限を超える場合,ジョブ定義XMLファイルの解析エラーとなる。
応答要求メッセージを省略する場合は,SETSYMBOL要素全体を省略する。
空白を含む場合は,空白以降は応答メッセージと解釈する。
- 応答n 〜<ASCII文字列>((全体で1〜255文字))<<yes no>>
-
入力する応答メッセージを指定する。応答はスペースで区切って最大32個指定できる。
応答を33個以上指定してもバッチジョブ実行システムはエラーにしないで33個以上の応答メッセージは無視する。
ASCII文字以外を指定してもバッチジョブ実行システムはチェックしないが,ASCII文字以外の応答を入力できない。すべての応答メッセージとそれを区切る空白文字の合計がSETSYMBOL要素のVALUE属性で指定できる上限(255バイト)を超えた場合,ジョブ定義XMLファイルの解析エラーとなる。
省略する場合は,SETSYMBOL要素全体を省略する。
応答要求メッセージと応答nは連結されてEXEC要素のPARM属性の値に置き換わる。ただし,全体の長さがPARM属性の上限値−4バイトを超えた場合,ジョブ定義XMLファイルの解析エラーとなる。
- ジョブステップのリターンコード
-
0:応答0を応答した。
n:応答nを応答した。
127:予期しないエラーが発生した。または,定義された応答以外を応答した。
(d) bjex_WRITERXカタログドプロシジャ
応答要求メッセージを出力して応答待ちになる。
ジョブの実行を継続するには応答0から応答nのどれかのメッセージを応答する。
ジョブステップは応答に対応したリターンコードを出力して終了する。例えば,応答0を応答するとリターンコードは0になり,応答1を応答するとリターンコードは1になり,応答nを応答するとリターンコードはnとなる。
定義した応答以外の応答をするとKAKC5208-Eメッセージを出力して,再び応答要求メッセージを出力して応答待ちとなる。
<CALL NAME="bjex_WRITERX" > <SETSYMBOL NAME="MSG" VALUE="応答要求メッセージ" /> <SETSYMBOL NAME="ANS" VALUE="応答0 応答1 … 応答n" /> </CALL>
- 応答要求メッセージ 〜<空白を除く任意文字列>((1〜255バイト))<<Key_in[yes,no]>>
-
出力するメッセージを指定する。
SETSYMBOL要素のVALUE属性で指定できる上限を超えるとジョブ定義XMLファイルの解析エラーとなる。
応答要求メッセージを省略する場合は,SETSYMBOL要素全体を省略する。
空白を含む場合は,空白以降は応答メッセージと解釈する。
- 応答n 〜<ASCII文字列>((全体で1〜255文字))<<yes no>>
-
入力する応答メッセージを指定する。応答はスペースで区切って最大32個指定できる。
応答を33個以上指定してもバッチジョブ実行システムはエラーにしないで33個以上の応答メッセージは無視する。
ASCII文字以外を指定してもバッチジョブ実行システムはチェックしないが,ASCII文字以外は応答を入力できない。すべての応答メッセージとそれを区切る空白文字の合計がSETSYMBOL要素のVALUE属性で指定できる上限(255バイト)を超えるた場合,ジョブ定義XMLファイルの解析エラーとなる。
省略する場合は,SETSYMBOL要素全体を省略する。
応答要求メッセージと応答nは連結されてEXEC要素のPARM属性値に置き換わる。ただし,全体の長さがPARM属性の上限−4を超えた場合,ジョブ定義XMLファイルの解析エラーとなる。
- ジョブステップのリターンコード
-
0:応答0を応答した。
n:応答nを応答した。
127:予期しないエラーが発生した。
(4) カタログドプロシジャの使用例
カタログドプロシジャを使用したジョブ定義XMLファイルの例を次に示す。
<?xml version="1.0" encoding="Shift-JIS" ?> <HitachiBatchJobExec version = "1.4" os="unix" > <JOB NAME="TESTPROC"> <STEP NAME="AASTEP01" > <CALL NAME="bjex_PAUSE" > <SETSYMBOL NAME="MSG" VALUE="This_step_paused._now!!" /> </CALL> </STEP> <STEP NAME="AASTEP02" > <CALL NAME="bjex_WRITE" > <SETSYMBOL NAME="MSG" VALUE="Information_message" /> </CALL> </STEP> <STEP NAME="AASTEP03" > <CALL NAME="bjex_WRITER" > <SETSYMBOL NAME="MSG" VALUE="ENTER:" /> <SETSYMBOL NAME="ANS" VALUE="AA BB CC" /> </CALL> </STEP> <STEP NAME="AASTEP04" > <CALL NAME="bjex_WRITERX" > <SETSYMBOL NAME="MSG" VALUE="XXENTER:" /> <SETSYMBOL NAME="ANS" VALUE="AAX BBX CCX" /> </CALL> </STEP> <STEP NAME="AA" > <EXEC PGM="*" COND="(0,EQ,AASTEP03,STEP01)"> <![CDATA[ ! echo "AASTEP03 rc not 0" ! ]]> </EXEC> </STEP> <STEP NAME="Ab" > <EXEC PGM="*" COND="(0,NE,AASTEP03,STEP01)"> <![CDATA[ ! echo "AASTEP03 rc=0" ! ]]> </EXEC> </STEP> </JOB> </HitachiBatchJobExec>
(5) カタログドプロシジャの実行結果
カタログドプロシジャの使用例を実行した結果を次に示す。
(6) カタログドプロシジャの内容
提供されるカタログドプロシジャの内容を次に示す。
(a) bjex_PAUSE.xml
<?xml version="1.0" encoding="Shift-JIS" ?> <HitachiBatchJobExec version = "1.4" os="unix" > <PROC NAME="bjex_PAUSE"> <SYMBOL NAME="MSG" VALUE="Job_is_paused." /> <STEP NAME="STEP01" > <EXEC PGM="/opt/hitachi/bjex/bin/bjexm_message" PARM="-p #{MSG}" PARMSPLIT="YES" /> </STEP> </PROC> </HitachiBatchJobExec>
(b) bjex_WRITE.xml
<?xml version="1.0" encoding="Shift-JIS" ?> <HitachiBatchJobExec version = "1.4" os="unix" > <PROC NAME="bjex_WRITE"> <SYMBOL NAME="MSG" VALUE="message" /> <STEP NAME="STEP01" > <EXEC PGM="/opt/hitachi/bjex/bin/bjexm_message" PARM="-m #{MSG}" PARMSPLIT="YES" /> </STEP> </PROC> </HitachiBatchJobExec>
(c) bjex_WRITER.xml
<?xml version="1.0" encoding="Shift-JIS" ?> <HitachiBatchJobExec version = "1.4" os="unix" > <PROC NAME="bjex_WRITER"> <SYMBOL NAME="MSG" VALUE="Key_in[yes,no,other-error]" /> <SYMBOL NAME="ANS" VALUE="yes no" /> <STEP NAME="STEP01" > <EXEC PGM="/opt/hitachi/bjex/bin/bjexm_message" PARM="-r #{MSG} #{ANS}" PARMSPLIT="YES" /> </STEP> </PROC> </HitachiBatchJobExec>
(d) bjex_WRITERX.xml
<?xml version="1.0" encoding="Shift-JIS" ?> <HitachiBatchJobExec version = "1.4" os="unix" > <PROC NAME="bjex_WRITERX"> <SYMBOL NAME="MSG" VALUE="Key_in[yes,no]" /> <SYMBOL NAME="ANS" VALUE="yes no" /> <STEP NAME="STEP01" > <EXEC PGM="/opt/hitachi/bjex/bin/bjexm_message" PARM="-c #{MSG} #{ANS}" PARMSPLIT="YES" /> </STEP> </PROC> </HitachiBatchJobExec>