◇Q51. RSTOBJでオブジェクト名を別の名前にしてリストアーしたい
◇A51.
残念ながら、RSTOBJではできません。
一度、QTEMPにリストアーしてリネームしてはどうでしょうか?
サンプルをご参照ください。
◇Q52. SAVLIBやSAVOBJでSPLFDTA(*ALL)指定で保管したOUTQを別のライブラリに復元しても問題ないか?
◇A52.
スプールファイルの管理は、「WRKSPLFA」で表示される情報で管理されています。
システム上には単一のスプールしか存在できませんので、OUTQのみ復元できスプールファイルは復元されません。
保管したスプールファイルを削除後、復元を実行すれば復元先のOUTQにスプールファイルも復元できます。
◇Q53. SBMJOBしたジョブが終了したかどうかを判断したい
◇A53.
方法はいろいろありますが、APIを使った例をご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
PGM DCL VAR(&JOBNAME) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) DCL VAR(&JOBQUAL) TYPE(*CHAR) LEN(26) DCL VAR(&JOBQUAL2) TYPE(*CHAR) LEN(28) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(100) DCL VAR(&RECEIVER) TYPE(*CHAR) LEN(60) DCL VAR(&RCVLEN) TYPE(*CHAR) LEN(4) DCL VAR(&STATUS) TYPE(*CHAR) LEN(10) SBMJOB CMD(CALL TESTJOB1 ) JOB(TEST) JOBQ(QBATCH) /* SBMJOBしたジョブの情報を取得 */ RCVMSG MSGTYPE(*LAST) RMV(*NO) MSGDTA(&MSGDTA) + MSGID(&MSGID) /*ジョブ名、ユーザー名、ジョブ番号の取得 */ IF (&MSGID *EQ CPC1221) THEN(DO) CHGVAR VAR(&JOBNAME) VALUE(%SST(&MSGDTA 1 10)) CHGVAR VAR(&USER) VALUE(%SST(&MSGDTA 11 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&MSGDTA 21 6)) ENDDO CHGVAR VAR(&JOBQUAL) VALUE(&JOBNAME *CAT &USER *CAT + &JOBNBR) CHGVAR VAR(&JOBQUAL2) VALUE(&JOBNBR *TCAT '/' *CAT + &USER *TCAT '/' *CAT &JOBNAME) CHGVAR VAR(%BIN(&RCVLEN)) VALUE(60) /* ジョブの終了判定 */ LOOP: CALL PGM(QWCRJBST) PARM(&RECEIVER &RCVLEN + &JOBQUAL 'JOBS0300' X'00000000') CHGVAR VAR(&STATUS) VALUE(%SST(&RECEIVER 9 10)) SNDPGMMSG MSG(&STATUS) IF (&STATUS *NE *ACTIVE *AND &STATUS *NE + *JOBQ) THEN(GOTO END) SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('WAITING + FOR COMPLETION JOB' *BCAT &JOBQUAL2 *TCAT + '. JOB STATUS IS' *BCAT &STATUS) + TOPGMQ(*EXT) MSGTYPE(*STATUS) DLYJOB DLY(10) GOTO LOOP END: ENDPGM |
◇Q54. SBMRMTCMDでSBMJOBを実行したが実行されない
◇A54.
以下について確認してみてください。
・コマンドにエラーがないか?
・権限エラー(特に、JOBD)がないか?
◇Q55. SBMRMTCMDで、SBMJOBされる時のユーザーをQUSER以外にするには?
◇A55.
SBMJOBのパラメータにJOBDを使用し、その中でユーザーを指定します。
◇Q56. SBMRMTCMDで変数パラメータを指定したのですが、うまく渡せません
◇A56.
変数パラメータを指定する場合には、ちょっと工夫が必要です。
サンプルCLをご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
PGM DCL VAR(&JOBD) TYPE(*CHAR) LEN(10) DCL VAR(&JOBDL) TYPE(*CHAR) LEN(10) DCL VAR(&PJOBD) TYPE(*CHAR) LEN(12) DCL VAR(&PJOBDL) TYPE(*CHAR) LEN(12) DCL VAR(&CMD) TYPE(*CHAR) LEN(200) RTVDTAARA DTAARA(PWDCTLD (3 10)) RTNVAR(&JOBD) RTVDTAARA DTAARA(PWDCTLD (13 10)) RTNVAR(&JOBDL) CHGVAR VAR(&PJOBD) VALUE('''' *CAT &JOBD *CAT '''') CHGVAR VAR(&PJOBDL) VALUE('''' *CAT &JOBDL *CAT '''') CHGVAR VAR(&CMD) VALUE('CALL YYLIB/PWD910C + PARM(' *CAT &PJOBD *CAT ' ' + *CAT &PJOBDL *CAT ')') SBMRMTCMD CMD(&CMD) DDMFILE(YYLIB/DUMMYDDM) ENDPGM |
◇Q57. SBMRMTCMDのDDM割り当てエラー時に自動リトライしたい
◇A57.
SBMRMTCMD実行後に、MONMSGをかけることにより可能です。
SBMRMTCMDでDDMファイルの割り当てエラーになった場合は、下記の方法で自動リトライするようにします。
サンプルCLを参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
PGM DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) LOOP: SBMRMTCMD CMD('SBMJOB CMD(CALL xxxxx/xxxxx) + JOB(xxxxx) JOBD(xxxxx/xxxxx) + USER(*JOBD)') DDMFILE(xxxxx/xxxxx) MONMSG MSGID(CPF0000) EXEC(DO) RCVMSG MSGQ(*PGMQ) MSGID(&MSGID) IF ((&MSGID *EQ 'CPF4128') *OR + (&MSGID *EQ 'CPF2952')) THEN(DO) DLYJOB DLY(60) GOTO LOOP ENDDO ELSE DO SNDPGMMSG MSG('** SBMRMTCMD ERROR ' *CAT &MSGID + *CAT ' **') + TOMSGQ(*SYSOPR) RETURN ENDDO ENDDO ENDPGM |
◇Q58. SBMRMTCMD実行時に、CPF4128のエラーになる
◇A58.
頻繁に発生するようであれば下記の様に変更してみてください。
CHGICFF FILE(QSYS/QCNDDMF) WAIT(120)
◇Q59. SDAで作成したメニューでコマンド入力行を使用できないようにしたい
◇A59.
CHGMNUでCMDLIN(*NONE)にして下さい。
機能キーを表示したくない場合は、DSPKEY(*NONE)にして下さい。
◇Q60. SEUで指定変更日のラインのみを表示したい
◇A60.
以下の手順を行ってみてください。
②F14を押して変更日付を入力する。
③F16を押すと最初に見つかったラインが表示されます。
④続けてF16を押すと次に見つかったラインが表示されます。