5250印刷適用業務 CLP (PYTHON.400/QCLSRC.CLPDTA)
最終更新:
2025-11-27
0001.00 PGM PARM(+
0002.00 &P1FROM +
0003.00 &P1END +
0004.00 &OUTPUT)
0005.00 /*-------------------------------------------------------------------*/
0006.00 /* PGMCL : TITLE
0007.00 /* */
0008.00 /* この CLP:PGMCL はコマンド CMD から呼び出されて */
0009.00 /* 実行されます。 */
0010.00 /* このコマンドは単独で実行するのではなく */
0011.00 /* 必ず PRTPTN コマンドから呼び出して実行してください。 */
0012.00 /* */
0013.00 /* [COMPILE] */
0014.00 /* CRTCLPGM PRTLIB/PGMCL SRCFILE(SRCLIB/QCLSRC)
0015.00 /* OPTION(*SRCDBG) AUT(*ALL) */
0016.00 /* */
0017.00 /* < 注 > PDF 変換には SPOOL ライターが必要です。 */
0018.00 /*-------------------------------------------------------------------*/
0019.00 DCL VAR(&P1FROM) TYPE(*CHAR) LEN(99)
0020.00 DCL VAR(&P1END) TYPE(*CHAR) LEN(99)
0021.00 DCL VAR(&OUTPUT) TYPE(*CHAR) LEN(8)
0022.00 DCL VAR(") TYPE(*CHAR) LEN(1) VALUE(X'7D')
0023.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
0024.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
0025.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
0026.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0027.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0028.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
0029.00 DCL VAR(&TOMSGQ) TYPE(*CHAR) LEN(10)
0030.00 DCL VAR(&DEBUG) TYPE(*CHAR) LEN(4) VALUE('*NO ')
0031.00 DCL VAR(&POS) TYPE(*DEC) LEN(4 0)
0032.00 DCL VAR(&QRYSLT) TYPE(*CHAR) LEN(128)
0033.00 /*( QSPRILSP の変数 )*/
0034.00 DCL VAR(&SPLF) TYPE(*CHAR) LEN(10)
0035.00 DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
0036.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10)
0037.00 DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6)
0038.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) +
0039.00 VALUE(X'0000007400000000') /* 2 進数 */
0040.00 /*( ログのための PYTHON 属性 )*/
0041.00 DCL VAR(&PROJECT) TYPE(*CHAR) LEN(157) +
0042.00 VALUE('/PYTHON.400/PROJECT/*PTN/')
0043.00 DCL VAR(&PTN) TYPE(*CHAR) LEN(13) +
0044.00 VALUE('*PTN.PY')
0045.00 DCL VAR(&PTNDIR) TYPE(*CHAR) LEN(120) +
0046.00 VALUE('/PYTHON.400/PROJECT/*PTN')
0047.00 /*( PDF 出力に必要な変数 )*/
0048.00 DCL VAR(&IPADDR) TYPE(*CHAR) LEN(15)
0049.00 DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00')
0050.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0051.00
0052.00 RTVJOBA JOB(&JOB) USER(&USER) NBR(&JOBNBR) TYPE(&TYPE)
0053.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */
0054.00 CHGVAR VAR(&TOMSGQ) VALUE('*SYSOPR ')
0055.00 ENDDO /* バッチ */
0056.00 ELSE CMD(DO) /* 対話式 */
0057.00 CHGVAR VAR(&TOMSGQ) VALUE('*TOPGMQ ')
0058.00 ENDDO /* 対話式 */
0059.00
0060.00 /*---------------------------*/
0061.00 CALLSUBR SUBR(INZSUBR)
0062.00 /*---------------------------*/
0063.00
0064.00 /*( 作業進行中メッセージの表示 )*/
0065.00 CHGJOB STSMSG(*NORMAL)
0066.00 SNDPGMMSG MSGID(CPF9800) MSGF(QSYS/QCPFMSG) +
0067.00 MSGDTA('TITLE を印刷中。 ') +
0068.00 TOPGMQ(*EXT) MSGTYPE(*STATUS)
0069.00
0070.00 /*-------------------------------------------------------------*/
0071.00 /*[ 対話式 ] QP2TERM はバッチ投入されるので対話式の場合は */
0072.00 /* QP2SHELL を呼び出して実行する。 */
0073.00 /*-------------------------------------------------------------*/
0074.00 IF COND(&OUTPUT *NE '*PRINT ') THEN(DO)
0075.00 OVRPRTF FILE(*PRTF) HOLD(*YES) LVLCHK(*NO) +
0076.00 OVRSCOPE(*JOB)
0077.00 ENDDO
0078.00 OVRDBF FILE(FILE) SHARE(*YES) OPNSCOPE(*JOB)
0079.00 CHGVAR VAR(&QRYSLT) VALUE(+
0080.00 'P1 *GE ' *CAT +
0081.00 " *CAT &P1FROM *CAT " *CAT +
0082.00 ' *AND P1 *LE ' *CAT +
0083.00 " *CAT &P1END *CAT " +
0084.00 )
0085.00 OPNQRYF FILE((FILLIB/FILE)) QRYSLT(&QRYSLT) +
0086.00 KEYFLD(*FILE) OPNID(QRYF)
0087.00 RCVMSG MSGTYPE(*LAST) RMV(*YES)
0088.00 PYTHON.400/QP2SHELL PROJECT(&PROJECT) OPTION(PRTPTN) +
0089.00 DEBUG(&DEBUG)
0090.00 CLOF OPNID(QRYF)
0091.00 RCVMSG MSGTYPE(*LAST) RMV(*YES)
0092.00 DLTOVR FILE(FILE) LVL(*JOB)
0093.00 MONMSG CPF9800
0094.00 /*-------------------------------------------------------------------*/
0095.00 /* 印刷スプールの後処理 */
0096.00 /*-------------------------------------------------------------------*/
0097.00 CALL PGM(PYTHON.400/PRTJOBNO) PARM(&SPLF &USER +
0098.00 &JOBNBR) /* スプール・ファイル名と NO の取得 */
0099.00 SELECT
0100.00 /***********************/
0101.00 /* スプールの表示 */
0102.00 /***********************/
0103.00 WHEN COND(&OUTPUT = '*') THEN(DO) /* スプール表示 */
0104.00 DSPSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST)
0105.00 DLTSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST)
0106.00 ENDDO
0107.00 /***********************/
0108.00 /* BOTH: 両方 */
0109.00 /***********************/
0110.00 WHEN COND(&OUTPUT = '*BOTH') THEN(DO) /* BOTH */
0111.00 DSPSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST)
0112.00 RLSSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST)
0113.00 MONMSG CPF3300
0114.00 ENDDO /* BOTH */
0115.00 ENDDO
0116.00 /***********************/
0117.00 /* 通常印刷 */
0118.00 /***********************/
0119.00 WHEN COND(&OUTPUT = '*PRINT') THEN(DO) /* +
0120.00 通常印刷 */
0121.00 SNDPGMMSG MSG('TITLE を出力しました。 ') TOPGMQ(*PRV +
0122.00 (PRTPTNCL)) MSGTYPE(*DIAG)
0123.00 ENDDO
0124.00 ENDSELECT
0125.00 RETURN
0126.00
0127.00 APIERR:
0128.00 CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7))
0129.00 CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))
0130.00 CHGVAR VAR(&MSGF) VALUE('Q' *CAT %SST(&MSGID 1 +
0131.00 3) *CAT 'MSG')
0132.00 IF COND(&MSGF *EQ 'QCPEMSG') THEN(CHGVAR +
0133.00 VAR(&MSGF) VALUE('QCPFMSG'))
0134.00 CHGVAR VAR(&MSGFLIB) VALUE('QSYS ')
0135.00 GOTO SNDMSG
0136.00
0137.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +
0138.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0139.00 MSGFLIB(&MSGFLIB)
0140.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO)
0141.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +
0142.00 TOPGMQ(*PRV (PRTPTNCL)) TOMSGQ(&TOMSGQ) +
0143.00 MSGTYPE(*ESCAPE)
0144.00 ENDDO
0145.00 ELSE CMD(DO)
0146.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
0147.00 MSGDTA(&MSGDTA) TOPGMQ(*PRV (PRTPTNCL)) +
0148.00 TOMSGQ(&TOMSGQ) MSGTYPE(*ESCAPE)
0149.00 ENDDO
0150.00 /******************************/
0151.00 SUBR SUBR(INZSUBR)
0152.00 /******************************/
0153.00 /*( この IBM I の IP アドレスを取得する )*/
0154.00 CALL PGM(PYTHON.400/RTVIP) PARM(&IPADDR)
0155.00 CHGVAR VAR(&PROJECT) VALUE(&PROJECT *TCAT &PTN *TCAT +
0156.00 &NULL)
0157.00 CLOF OPNID(QRYF)
0158.00 MONMSG MSGID(CPF4520) EXEC(DO)
0159.00 RCVMSG RMV(*YES)
0160.00 ENDDO
0161.00 ENDSUBR
0162.00 ENDPGM
[解説]
5250適用業務をWizardで生成するときにはPythonソースだけでなく
実行用のコマンドとCLプログラムも生成されます。
このCLPはSpoolライターVer5.0が導入されていないシステム上で
Wizard生成されるCLPのテンプレートです。
SpoolライターVer5.0が導入されている場合はスプールはPDFにも
変換することができますので PRTPRTを使ってCLPが生成されます。
コマンドの使途目的はエンド・ユーザーからの印刷範囲の指定を
入力するためのものでありCLPはコマンドから受け取ったパラメータで
OPNQRYFコマンドによって仮想的なアクセス・パスを作成して
それをPythonプログラムに渡します。
Pythonプログラムではすべてのレコードを読み取るように
処理を記述しておけば OPNQRYFコマンドによって制約された
レコードのみを読み取ることができます。
0001.00 PGM PARM(+ 0002.00 &P1FROM + 0003.00 &P1END + 0004.00 &OUTPUT)
がパラメータ部の受け取りですが実際はWizard生成時に指定された
パラメータが生成されます。
079.00 CHGVAR VAR(&QRYSLT) VALUE(+ 0080.00 'P1 *GE ' *CAT + 0081.00 " *CAT &P1FROM *CAT " *CAT + 0082.00 ' *AND P1 *LE ' *CAT + 0083.00 " *CAT &P1END *CAT " + 0084.00 ) 0085.00 OPNQRYF FILE((FILLIB/FILE)) QRYSLT(&QRYSLT) + 0086.00 KEYFLD(*FILE) OPNID(QRYF)
によって &QRYSLT 変数に OPNQRYFで設定する QRYSLT変数が生成されて
OPNQRYFコマンドが実行されます。
0088.00 PYTHON.400/QP2SHELL PROJECT(&PROJECT) OPTION(PRTPTN) + 0089.00 DEBUG(&DEBUG)
によってPYTHONプログラムが読取り実行されて印刷処理を行います。
0094.00 /*-------------------------------------------------------------------*/ 0095.00 /* 印刷スプールの後処理 */ 0096.00 /*-------------------------------------------------------------------*/ 0097.00 CALL PGM(PYTHON.400/PRTJOBNO) PARM(&SPLF &USER + 0098.00 &JOBNBR) /* スプール・ファイル名と NO の取得 */
では今出力されたスプールの実際のスプール名などの属性が取得されます。
0100.00 /***********************/ 0101.00 /* スプールの表示 */ 0102.00 /***********************/ 0103.00 WHEN COND(&OUTPUT = '*') THEN(DO) /* スプール表示 */ 0104.00 DSPSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST) 0105.00 DLTSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST) 0106.00 ENDDO
ではスプールを画面に表示します。
0107.00 /***********************/ 0108.00 /* BOTH: 両方 */ 0109.00 /***********************/ 0110.00 WHEN COND(&OUTPUT = '*BOTH') THEN(DO) /* BOTH */ 0111.00 DSPSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST) 0112.00 RLSSPLF FILE(&SPLF) JOB(*) SPLNBR(*LAST) 0113.00 MONMSG CPF3300 0114.00 ENDDO /* BOTH */ 0115.00 ENDDO
では印刷と表示の両方を行います。
0116.00 /***********************/
0117.00 /* 通常印刷 */
0118.00 /***********************/
0119.00 WHEN COND(&OUTPUT = '*PRINT') THEN(DO) /* +
0120.00 通常印刷 */
0121.00 SNDPGMMSG MSG('TITLE を出力しました。 ') TOPGMQ(*PRV +
0122.00 (PRTPTNCL)) MSGTYPE(*DIAG)
0123.00 ENDDO
ては通常印刷のみを行います。