($title_img_alt)

こちらからの投稿は、先頭に表示されているコメントへの返信になります。
値を戻すコマンドのパラメータについて 富澤 さん [ 1月20日(水) 13時49分 ]
スプール・ファイルの属性(サイズ、オーバーフロー行など)を取得するために、

スプール・ファイルの存在を検査するCHKSPLC
https://www.as400-net.com/tools/6222/

値を戻すコマンド
https://www.as400-net.com/cmd/4497/

をヒントに、スプール・ファイルの属性を取得するCLとコマンドを作成しました。
コマンドで、スプール・ファイル、ジョブ、スプール番号を入力して、APIから属性を取得して、コ
マンドのパラメータにセットして返します。
取得と値返しはうまくいきましたが、値を戻すコマンドを呼び出す場合、全ての値を戻すパラメータ
に変数を設定する必要があります。
取得したいパラメータにのみ変数を設定することは可能でしょうか。(RTVOBJDのようなイメージで
す)

プログラムソースを添付します。
<- コマンド RTVSPLF ソース --------------------------------------------------
-->
             CMD        PROMPT('RETRIEVE SPOOLFILE DESCRIPTION') +
                          ALLOW(*IPGM *BPGM) AUT(*ALL)
             PARM       KWD(SPLF) TYPE(*NAME) LEN(10) DFT(*NONE) +
                          SPCVAL((*NONE)) PROMPT('SPOOLED FILE')
             PARM       KWD(JOB) TYPE(@JOB) DFT(*) SNGVAL((*)) +
                          PROMPT('JOB NAME(*-CURRENT JOB)')
             PARM       KWD(SPLNBR) TYPE(*CHAR) LEN(6) DFT(*LAST) +
                          SPCVAL((*ONLY) (*LAST)) +
                          CHOICE('000001-999999,*ONLY,*LAST') +
                          PROMPT('SPOOLED FILE NUMBER')
/* */
             PARM       KWD(RTNJOB) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
                          PMTCTL(*PMTRQS) PROMPT('RETURN JOB NAME')
             PARM       KWD(RTNUSER) TYPE(*CHAR) LEN(10) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('RETURN USER')
             PARM       KWD(RTNJOBNBR) TYPE(*CHAR) LEN(6) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('RETURN JOB NUMBER')
             PARM       KWD(RTNSPLNBR) TYPE(*CHAR) LEN(6) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('RETURN SPOOL NUMBER')
             PARM       KWD(OUTQ) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
                          PMTCTL(*PMTRQS) PROMPT('OUTPUT QUEUE')
             PARM       KWD(QLIB) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
                          PMTCTL(*PMTRQS) PROMPT('OUTPUT QUEUE LIBRARY')
             PARM       KWD(FORMTYPE) TYPE(*CHAR) LEN(10) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) PROMPT('FORM TYPE')
             PARM       KWD(DEVTYPE) TYPE(*CHAR) LEN(10) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('PRINTER DEVICE TYPE')
             PARM       KWD(TOTALPAGE) TYPE(*DEC) LEN(5 0) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('TOTAL PAGES(00000)')
             PARM       KWD(PAGELEN) TYPE(*DEC) LEN(3 0) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('PAGE SIZE(LENGTH)(000)')
             PARM       KWD(PAGEWIDTH) TYPE(*DEC) LEN(3 0) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('PAGE SIZE(WIDTH)(000)')
             PARM       KWD(PAGEMETHOD) TYPE(*CHAR) LEN(10) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) PROMPT('PAGE +
                          SIZE(MEASUREMENT METHOD)')
             PARM       KWD(LPI) TYPE(*DEC) LEN(3 1) RTNVAL(*YES) +
                          PMTCTL(*PMTRQS) PROMPT('LINES PER INCH(00.0)')
             PARM       KWD(CPI) TYPE(*DEC) LEN(3 1) RTNVAL(*YES) +
                          PMTCTL(*PMTRQS) PROMPT('CHARACTERS PER INCH(00.0)
')
             PARM       KWD(OVRFLW) TYPE(*DEC) LEN(3 0) +
                          RTNVAL(*YES) PMTCTL(*PMTRQS) +
                          PROMPT('OVERFLOW LINE NUMBER(000)')
/* */
 @JOB:       QUAL       TYPE(*NAME) LEN(10)
             QUAL       TYPE(*NAME) LEN(10) PROMPT('USER')
             QUAL       TYPE(*CHAR) LEN(6) DFT(' ') RANGE(000000 +
                          999999) SPCVAL((' ')) FULL(*YES) +
                          CHOICE('000000-999999') PROMPT('NUMBER')
<--------------------------------------------------------------------------
---->

<- CL RTVSPLFC ソース ------------------------------------------------------
---->
/* RETRIEVE SPOOLFILE DESCRIPTION */
             PGM        PARM(&SPLF &JOB &SPLNBR &RTNJOB &RTNUSER +
                          &RTNJOBNBR &RTNSPLNBR &OUTQ &QLIB +
                          &FORMTYPE &DEVTYPE &TOTALPAGE &PAGELEN +
                          &PAGEWIDTH &PAGEMETHOD &LPI &CPI &OVRFLW)
/* */
        DCL        VAR(&SPLF) TYPE(*CHAR) LEN(10) /* SPOOLED FILE */
        DCL        VAR(&JOB) TYPE(*CHAR) LEN(26) /* JOB NAME */
        DCL        VAR(&SPLNBR) TYPE(*CHAR) LEN(6) /* SPOOLED FILE NUMBER *
/
/* */
        DCL        VAR(&RTNJOB) TYPE(*CHAR) LEN(10) /* RETURN JOB NAME */
        DCL        VAR(&RTNUSER) TYPE(*CHAR) LEN(10) /* RETURN USER */
        DCL        VAR(&RTNJOBNBR) TYPE(*CHAR) LEN(6) /* RETURN JOB NUMBER 
*/
        DCL        VAR(&RTNSPLNBR) TYPE(*CHAR) LEN(6) /* RETURN SPOOL NUMBE
R */
        DCL        VAR(&OUTQ) TYPE(*CHAR) LEN(10) /* OUTPUT QUEUE */
        DCL        VAR(&QLIB) TYPE(*CHAR) LEN(10) /* OUTPUT QUEUE LIBRARY *
/
        DCL        VAR(&FORMTYPE) TYPE(*CHAR) LEN(10) /* FORM TYPE */
        DCL        VAR(&DEVTYPE) TYPE(*CHAR) LEN(10) /* PRINTER DEVICE TYPE
 */
        DCL        VAR(&TOTALPAGE) TYPE(*DEC) LEN(5 0) /* TOTAL PAGES */
        DCL        VAR(&PAGELEN) TYPE(*DEC) LEN(3 0) /* PAGE SIZE(LENGTH) *
/
        DCL        VAR(&PAGEWIDTH) TYPE(*DEC) LEN(3 0) /* PAGE SIZE(WIDTH) 
*/
        DCL        VAR(&PAGEMETHOD) TYPE(*CHAR) LEN(10) /* PAGE +
                          SIZE(MEASUREMENT METHOD) */
        DCL        VAR(&LPI) TYPE(*DEC) LEN(3 1) /* LINES PER INCH */
        DCL        VAR(&CPI) TYPE(*DEC) LEN(3 1) /* CHARACTERS PER INCH */
        DCL        VAR(&OVRFLW) TYPE(*DEC) LEN(3 0) /* OVERFLOW LINE NUMBER
 */
/* */
        DCL        VAR(&SPLNO) TYPE(*DEC) LEN(4 0) VALUE(0)
        DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)
        DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
        DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10) VALUE('QCPFMSG   ')
        DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) VALUE('QSYS      ')
        DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
        DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)
        DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)
        DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) VALUE(X'000074')
        DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) VALUE(X'00000000')
        DCL        VAR(&SPLVAR) TYPE(*CHAR) LEN(5000)
        DCL        VAR(&SPLLEN) TYPE(*CHAR) LEN(4) VALUE(X'00001388')
        DCL        VAR(&SPLNBR2) TYPE(*DEC) LEN(6 0) VALUE(0)
        DCL        VAR(&BIN4) TYPE(*CHAR) LEN(4)
/* */
             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
/* */
             RTVJOBA    TYPE(&TYPE)
             IF         COND(&TYPE *EQ '0') THEN(CHGVAR VAR(&TOPGMQ) +
                          VALUE('*SYSOPR   '))
              ELSE       CMD(CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ   '))
/* */
             SELECT
              WHEN       COND(&SPLNBR *EQ '*ONLY ') THEN(CHGVAR +
                           VAR(&SPLNO) VALUE(0))
              WHEN       COND(&SPLNBR *EQ '*LAST ') THEN(CHGVAR +
                           VAR(&SPLNO) VALUE(-1))
              OTHERWISE  CMD(CHGVAR VAR(&SPLNO) VALUE(%DEC(&SPLNBR 06 0)))
              ENDSELECT
             CHGVAR     VAR(%BIN(&BIN4)) VALUE(&SPLNO)
/* */
             CALL       PGM(QUSRSPLA) PARM(&SPLVAR &SPLLEN +
                          'SPLA0200' &JOB ' ' ' ' &SPLF &BIN4 &APIERR)
             IF         COND(%SST(&APIERR 5 4) *NE &NULL4) THEN(GOTO +
                          CMDLBL(APIERR))
/* */
             CHGVAR     VAR(&RTNJOB)     VALUE(%SST(&SPLVAR 0049 0010))
             CHGVAR     VAR(&RTNUSER)    VALUE(%SST(&SPLVAR 0059 0010))
             CHGVAR     VAR(&RTNJOBNBR)  VALUE(%SST(&SPLVAR 0069 0006))
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0085 0004))
             CHGVAR     VAR(&SPLNBR2)    VALUE(%BIN(&BIN4))
             CHGVAR     VAR(&RTNSPLNBR)  VALUE(%CHAR(&SPLNBR2))
             CHGVAR     VAR(&OUTQ)       VALUE(%SST(&SPLVAR 0191 0010))
             CHGVAR     VAR(&QLIB)       VALUE(%SST(&SPLVAR 0201 0010))
             CHGVAR     VAR(&FORMTYPE)   VALUE(%SST(&SPLVAR 0089 0010))
             CHGVAR     VAR(&DEVTYPE)    VALUE(%SST(&SPLVAR 0317 0010))
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0149 0004))
             CHGVAR     VAR(&TOTALPAGE)  VALUE(%BIN(&BIN4))
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0433 0004))
             CHGVAR     VAR(&PAGELEN)    VALUE(%BIN(&BIN4))
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0437 0004))
             CHGVAR     VAR(&PAGEWIDTH)  VALUE(%BIN(&BIN4))
             CHGVAR     VAR(&PAGEMETHOD) VALUE(%SST(&SPLVAR 3201 0010))
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0181 0004))
             CHGVAR     VAR(&LPI)        VALUE(%BIN(&BIN4) / 10)
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0185 0004))
             CHGVAR     VAR(&CPI)        VALUE(%BIN(&BIN4) /10)
             CHGVAR     VAR(&BIN4)       VALUE(%SST(&SPLVAR 0445 0004))
             CHGVAR     VAR(&OVRFLW)     VALUE(%BIN(&BIN4))
             RETURN
/* */
 APIERR:     CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))
             CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))
             GOTO       CMDLBL(SNDMSG)
/* */
 ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +
                          MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
                          MSGFLIB(&MSGFLIB)
 SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)
             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +
                          TOMSGQ(&TOPGMQ) MSGTYPE(*ESCAPE)
               MONMSG     MSGID(CPF2400) EXEC(RETURN)
               ENDDO
              ELSE       CMD(DO)
              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                          MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) MSGTYPE(*ESCAPE)
               MONMSG     MSGID(CPF2400) EXEC(RETURN)
               ENDDO
             ENDPGM
<--------------------------------------------------------------------------
---->
RE:値を戻すコマンドのパラメータについて IKD さん [ 1月21日(木) 16時45分 ]
パラメータが不足しているときは呼び出される側で
そのパラメータを使用しようとするときに
パラメータが渡されていないのでMCH3601のエラーになります。

従って MCH3601をMONMSGしてやればこのエラーは迂回することが
できます。
たとえば次のとおりです。

0001.00              PGM        PARM(&PARM1 &PARM2 &PARM3)      
0002.00              DCL        VAR(&PARM1) TYPE(*CHAR) LEN(10) 
0003.00              DCL        VAR(&PARM2) TYPE(*CHAR) LEN(10) 
0004.00              DCL        VAR(&PARM3) TYPE(*CHAR) LEN(10) 
0005.00                                                         
0006.00              CHGVAR     VAR(&PARM1) VALUE('AA        ') 
0007.00              CHGVAR     VAR(&PARM2) VALUE('BB        ') 
0008.00              MONMSG     MCH3601                         
0009.00              ENDPGM                                     

このCLPではPARM2が使われない場合もエラーは迂回されます。
PARM3はこのCLPで使っていないのでエラーにはなりません。

SPOOLライターのユーザー様ですか?
RE:値を戻すコマンドのパラメータについて 富澤 さん [ 1月21日(木) 18時50分 ]
IKDさん、ありがとうございます。
MONMSG追加でテストしてみます。

私はSPOOLライターのユーザーではなく、SPOOLライターみたいなことを、自作ツールでしようとし
ているものです。
RE:値を戻すコマンドのパラメータについて 富澤 さん [ 1月22日(金) 9時26分 ]
IKDさん、MONMSG追加で、うまくいきました。
ありがとうございました。

お名前

パスワード

メールアドレス

タイトル

ホームページ

アドレス

項目