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  

ては通常印刷のみを行います。