◇Q151. 応答待ちメッセージに対して、だれが応答したかを知りたい
◇A151.
DSPLOGで応答値のところで、F1を押してさらにF9を押す。
◇Q152. 指定OUTQが空かどうかを判定したい
◇A152.
OUTQにスプールファイルがあるかどうかを判定すればよいかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
PGM PARM(&QUALOUTQ &STATUS) /* QUALOUTQ : OUTQ + OUTQ LIBRARY */ /* STATUS : Y=スプールファイルあり N=スプールファイルなし */ DCL VAR(&QUALOUTQ) TYPE(*CHAR) LEN(20) DCL VAR(&STATUS) TYPE(*CHAR) LEN(1) DCL VAR(&DATA) TYPE(*CHAR) LEN(1100) DCL VAR(&NUMSPL) TYPE(*CHAR) LEN(4) CHGVAR VAR(&STATUS) VALUE('E') CALL PGM(QSPROUTQ) PARM(&DATA X'0000044C' + 'OUTQ0100' &QUALOUTQ X'0000000000000000') CHGVAR VAR(&NUMSPL) VALUE(%SST(&DATA 93 4)) IF (%BIN(&NUMSPL 1 4) *GT 0) THEN(DO) CHGVAR VAR(&STATUS) VALUE('Y') ENDDO ELSE DO CHGVAR VAR(&STATUS) VALUE('N') ENDDO ENDPGM |
◇Q153. 指定OUTQが空かどうかを判定したい
◇A153.
OUTQにスプールファイルがあるかどうかを判定すればよいかと思います。
サンプルCLをご覧ください。
◇Q154. 指定ファイルのレコードサイズを取得したいRTVMBRAコマンドがあればいいのですが、残念ながらありません
◇A154.
システムAPI「QDBRTVFD」を使用すれば取得できます。
もしくは、DSPFD FILE(LIBNAME/FILENAME) TYPE(*RCDFMT) OUTPUT(*OUTFILE)
◇Q155. 日付の妥当性チェックをCLで行いたい
◇A155.
もっとも簡単な方法です。
1 2 3 4 |
CVTDAT DATE(&DATE) TOVAR(&DATE) TOSEP(*NONE) MONMSG MSGID(CPF0000) EXEC(DO) エラー処理 ENDDO |
◇Q156. 日付6桁をyyyy-mm-ddの形式に、CLで変更したい
◇A156.
CVTDATコマンド使用してください。
1 2 3 4 5 6 7 8 9 10 11 |
PGM DCL VAR(&DATE) TYPE(*CHAR) LEN(6) DCL VAR(&DATE2) TYPE(*CHAR) LEN(6) DCL VAR(&NEWDATE) TYPE(*CHAR) LEN(10) /* YYMMDD => YYYY-MM-DD */ CVTDAT DATE(&DATE) TOVAR(&NEWDATE) TOFMT(*YYMD) + TOSEP(-) /* YYYY-MM-DD => YYMMDD */ CVTDAT DATE(&NEWDATE) TOVAR(&DATE2) FROMFMT(*YYMD) + TOFMT(*YMD) TOSEP(*NONE) ENDPGM |
◇Q157. 特定ジョブだけ、自動応答をさせたい
◇A157.
システム応答リストを使用しないで、CLで対応する方法です。
1 2 3 4 5 6 7 |
PGM CRTMSGF MSGF(QTEMP/QCPFMSG) OVRMSGF MSGF(QCPFMSG) TOMSGF(QTEMP/QCPFMSG) ADDMSGD MSGID(CPA4278) MSGF(QTEMP/QCPFMSG) MSG(NONE) + DFT(I) CHGJOB INQMSGRPY(*DFT) ENDPGM |
◇Q158. 特定ジョブのみ別のOUTQにジョブログを出力したい
◇A158.
以下の方法で対応できます。
・DSPJOBLOG OUTPUT(*PRINT)
◇Q159. 画面の24行目に、「処理中」のメッセージを出力したい
◇A159.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PGM SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) + MSGDTA('????') TOPGMQ(*EXT) + MSGTYPE(*STATUS) DLYJOB DLY(10) SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) + MSGDTA('????') TOPGMQ(*EXT) + MSGTYPE(*STATUS) DLYJOB DLY(10) SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) + MSGDTA('????') + MSGTYPE(*INFO) ENDPGM: ENDPGM |
◇Q160. 画面の24行目に、処理中のメッセージを表示しているがQueryなどが実行されるとメッセージが消えてしまいます消えないように出来ないか?
◇A160.
以下のように、CHGJOBで対応してください。
1 2 3 4 5 6 7 |
PGM RTVJOBA STSMSG(&STSMSG) SNDPGMMSG MSG('処理中') CHGJOB STSMSG(*NONE) RUNQRY CHGJOB STSMSG(&STSMSG) ENDPGM |