商品明細の印刷

初めて Web化を行うときに「印刷はどのようにするのか?」という疑問は最も多い質問のひとつです。
印刷指示プログラムを起動するだけなら従来の5250エミュレータと同じですから、どこかの
印刷待ち行列(OUTQ) に印刷スプールが出力されますので、印刷業務が動作しない
というわけではありません。
しかし多くの適用業務は端末名等で OUTQ を割り振っている場合は Web では端末名を
固定することができませんので省略時のプリンター(OUTQ) に印刷スプールが出力されてしまいます。

これに対して構内でAutoWebを使用している場合は端末名も固定することができますので
従来どおりの OUTQ に印刷スプールを出力することができます。

ここでは AutoWeb ではなく、一般的な Webで遠隔地であっても処理可能な印刷の方法を紹介します。
Webでの印刷は、

【印刷スプールを、PDF に変換して、PDF をブラウザにリダイレクトする。】

という手法が一般的に用いられます。
つまり印刷スプールを動的に、その場で PDF化して、IFS に一時保存してその場所のリンクをブラウザに
戻すだけです。
( PDF化を行うには Spoolライター Ver4.0 が必要となります。)
ブラウザにPDFが表示されてしまえば PDFリーダーによって、ユーザーはローカルのプリンターに
印刷することもできますし、ローカルPCに PDFを保存することもできます。
このような印刷の仕組みを作成するには、CLP による CGI で実現することができます。
CGI は、どのような言語であってもかまわないのですが、CLP によるCGI が、この場合は最も簡単です。

このサンプルを実行するには Adobe Acrobat Reader が必要です。
Adobe Acrobat Reader はこちらから無料でダウンロードできます。

1.印刷の実行

1.商品ジャンルとシリーズ名の選択

画面が表示されましたら、そのままで「実行」ボタンを押して
印刷を指示してください。

2.印刷結果の表示

2.製品を選択

印刷結果が ブラウザ内に Acrobat Reader で PDF として
表示されます。
(画像は Acrobat Reader Ver.8.0 です)

プレビュー画面内のツールバーで「印刷」や「保存」を
実行できます。

■印刷指示のための CLP-CGI

■ サンプルソース: http://218.44.135.18/QSYS.LIB/PGMRLIB.LIB/QCLLESRC.FILE/PRINTER.MBR

   --------------------------------------------------------------------------------------------
   0001.00              PGM                                                                
   0002.00 /*-------------------------------------------------------------------*/         
   0003.00 /*    PRINTER : WORKSHOP 印刷のサンプル   CLP-CGI                    */         
   0004.00 /*                                                                   */         
   0005.00 /*    CRTCLMOD QTEMP/PRINTER  SRCFILE(MYSRCFILE/QCLLESRC) AUT(*ALL)  */         
   0006.00 /*    CRTPGM   CGIBIN/PRINTER   MODULE(QTEMP/PRINTER)                */         
   0007.00 /*             BNDSRVPGM(ASNET.COM/RPGENGINE5) ACTGRP(*NEW) AUT(*ALL)*/         
   0008.00 /*                                                                   */         
   0009.00 /*-------------------------------------------------------------------*/         
   0010.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(80)                           
   0011.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                           
   0012.00              DCL        VAR(&USER) TYPE(*CHAR) LEN(10) +                        
   0013.00                           VALUE('QTMHHTTP  ')                                   
   0014.00              DCL        VAR(&JOB) TYPE(*CHAR) LEN(10) +                         
   0015.00                           VALUE('AURORA_EGN')                                   
   0016.00              DCL        VAR(&JOBNBR) TYPE(*CHAR) LEN(6)                         
   0017.00              DCL        VAR(&HNSFROM) TYPE(*CHAR) LEN(4) /* +                   
   0018.00                            品種コード FROM */                                   
   0019.00              DCL        VAR(&HNSEND) TYPE(*CHAR) LEN(4) /* +                    
   0020.00                            品種コード END */                                    
   0021.00              DCL        VAR(&SHFROM) TYPE(*CHAR) LEN(10) /* +                   
   0022.00                            商品コード FROM */                                   
   0023.00              DCL        VAR(&SHEND) TYPE(*CHAR) LEN(10) /* +                    
   0024.00                            商品コード END */                                    
   0025.00              DCL        VAR(&VALUE) TYPE(*CHAR) LEN(256)                        
   0026.00              DCL        VAR(&FIELD) TYPE(*CHAR) LEN(48)                         
   0027.00              DCL        VAR(&HTML) TYPE(*CHAR) LEN(256) +                       
   0028.00                           VALUE('/AS400-NET.USR/PROJECT/PRINTER/PRINT+          
   0029.00                           ER.HTML')                                             
   0030.00              DCL        VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00')              
   0031.00              DCL        VAR(&PDF_FILE) TYPE(*CHAR) LEN(48)                      
   0032.00              DCL        VAR(&FLD) TYPE(*CHAR) LEN(20) +                         
   0033.00                           VALUE('$(PDF_FILE)')                                  
   0034.00              DCL        VAR(&RTN) TYPE(*CHAR) LEN(5)                            
   0035.00              DCL        VAR(&DATETIME) TYPE(*CHAR) LEN(20)                      
   0036.00              DCL        VAR(&DATE) TYPE(*CHAR) LEN(6)                           
   0037.00              DCL        VAR(&TIME) TYPE(*CHAR) LEN(6)                           
   0038.00              DCL        VAR(&HH) TYPE(*DEC) LEN(2 0)                            
   0039.00              DCL        VAR(&HHC) TYPE(*CHAR) LEN(2)                            
   0040.00              DCL        VAR(&MM) TYPE(*DEC) LEN(2 0)                            
   0041.00              DCL        VAR(&MMC) TYPE(*CHAR) LEN(2)                            
   0042.00              DCL        VAR(&SS) TYPE(*DEC) LEN(2 0)                            
   0043.00              DCL        VAR(&SSC) TYPE(*CHAR) LEN(2)                            
   0044.00              DCL        VAR(&DIR) TYPE(*CHAR) LEN(256)                          
   0045.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))                 
   0046.00                                                                                 
   0047.00 /*-------------------------------------------------------------*/               
   0048.00 /*( 1 ) HTML からの入力値を取得する                            */               
   0049.00 /*-------------------------------------------------------------*/               
   0050.00              ADDLIBLE   LIB(SPOOLWTR)                                           
   0051.00              MONMSG     CPF2100                                                 
   0052.00              RTVJOBA    TYPE(&TYPE) DATETIME(&DATETIME)                         
   0053.00              CHGVAR     VAR(&DATE) VALUE(%SST(&DATETIME 3 6))                   
   0054.00              CHGVAR     VAR(&TIME) VALUE(%SST(&DATETIME 9 6))                   
   0055.00              CALLPRC    PRC(CGIPARM) PARM(('HNSFROM')) +                        
   0056.00                           RTNVAL(&VALUE)                                        
   0057.00              CHGVAR     VAR(&HNSFROM) VALUE(&VALUE)                             
   0058.00              CALLPRC    PRC(CGIPARM) PARM(('HNSEND')) +                         
   0059.00                           RTNVAL(&VALUE)                                        
   0060.00              CHGVAR     VAR(&HNSEND) VALUE(&VALUE)                              
   0061.00              CALLPRC    PRC(CGIPARM) PARM(('SHFROM')) +                         
   0062.00                           RTNVAL(&VALUE)                                        
   0063.00              CHGVAR     VAR(&SHFROM) VALUE(&VALUE)                              
   0064.00              CALLPRC    PRC(CGIPARM) PARM(('SHEND')) +                          
   0065.00                           RTNVAL(&VALUE)                                        
   0066.00              CHGVAR     VAR(&SHEND) VALUE(&VALUE)                               
   0067.00                                                                                 
   0068.00 /*-------------------------------------------------------------*/               
   0069.00 /*( 2 )  印刷プログラム PGM202 を呼び出して実行する            */               
   0070.00 /*-------------------------------------------------------------*/               
   0071.00              OVRPRTF    FILE(QPRINT) HOLD(*YES) SECURE(*YES) +                  
   0072.00                           OVRSCOPE(*JOB)                                        
   0073.00              OVRDBF     FILE(LSHOHNS) TOFILE(QTRFIL/LSHOHNS) +                  
   0074.00                           SECURE(*YES) OVRSCOPE(*JOB)                           
   0075.00              OVRDBF     FILE(HINSHU) TOFILE(QTRFIL/HINSHU) +                    
   0076.00                           SECURE(*YES) OVRSCOPE(*JOB)                           
   0077.00              CALL       PGM(QTROBJ/PGM202) PARM(&HNSFROM &HNSEND +              
   0078.00                           &SHFROM &SHEND)                                       
   0079.00              DLTOVR     FILE(QPRINT LSHOHNS HINSHU) LVL(*JOB)                   
   0080.00                                                                                 
   0081.00 /*-------------------------------------------------------------*/               
   0082.00 /*( 3 )  QPRTJOB の JOB 番号を検索する                         */               
   0083.00 /*-------------------------------------------------------------*/               
   0084.00              CALL       PGM(ASNET.COM/PRTJOBNO) PARM(&USER &JOBNBR)             
   0085.00 /*-------------------------------------------------------------*/               
   0086.00 /*( 4 )  SPOOL ライターによって PDF に変換して IFS に保管する  */               
   0087.00 /*-------------------------------------------------------------*/               
   0088.00              CHGVAR     VAR(&PDF_FILE) VALUE('PDF' *CAT &JOBNBR +               
   0089.00                           *TCAT '.PDF')                                         
   0090.00              SPOOLWTR/CVTSPLF SPLF(QPRINT) JOB(&JOBNBR/&USER/&JOB) +            
   0091.00                           SPLNO(*LAST) OUTPUT(*PDF) OPTION(*IFS) +              
   0092.00                           TOSTMF(&PDF_FILE) +                                   
   0093.00                           TODIR('/AS400-NET.USR/PROJECT/PRINTER')               
   0094.00              DLTSPLF    FILE(QPRINT) JOB(&JOBNBR/&USER/&JOB) +                  
   0095.00                           SPLNBR(*LAST)                                         
   0096.00              RMVLIBLE   SPOOLWTR                                                
   0097.00                                                                                 
   0098.00 /*-------------------------------------------------------------*/               
   0099.00 /*( 5 )  リダイレクト用の HTML テンプレートをオープンする      */               
   0100.00 /*-------------------------------------------------------------*/               
   0101.00              CALLPRC    PRC(OPENHTML) PARM((&HTML *BYVAL)) RTNVAL(&RTN)         
   0102.00                                                                                 
   0103.00 /*-------------------------------------------------------------*/               
   0104.00 /*( 6 ) PDF の名前を HTML テンプレートにセットする             */               
   0105.00 /*-------------------------------------------------------------*/               
   0106.00              CHGVAR     VAR(&VALUE) VALUE(&PDF_FILE)                            
   0107.00              CALLPRC    PRC(SETFLD) PARM((&FLD *BYVAL) (&VALUE *BYVAL))         
   0108.00                                                                                 
   0109.00 /*-------------------------------------------------------------*/               
   0110.00 /*( 7 ) HTML テンプレートをブラウザに送出して完了              */               
   0111.00 /*-------------------------------------------------------------*/               
   0112.00              CALLPRC    PRC(WRITE)                                              
   0113.00                                                                                 
   0114.00 /*-------------------------------------------------------------*/               
   0115.00 /*( 8 ) 10 分後に PDF を削除するように SBMJOB                  */               
   0116.00 /*-------------------------------------------------------------*/               
   0117.00              CHGVAR     VAR(&HH) VALUE(%SST(&TIME 1 2))                         
   0118.00              CHGVAR     VAR(&MM) VALUE(%SST(&TIME 3 2))                         
   0119.00              CHGVAR     VAR(&SS) VALUE(%SST(&TIME 5 2))                         
   0120.00              CHGVAR     VAR(&MM) VALUE(&MM + 10)                                
   0121.00              IF         COND(&MM >= 60) THEN(DO)                                
   0122.00              CHGVAR     VAR(&HH) VALUE(&HH + 1)                                 
   0123.00              CHGVAR     VAR(&MM) VALUE(1)                                       
   0124.00              ENDDO                                                              
   0125.00              CHGVAR     VAR(&HHC) VALUE(&HH)                                    
   0126.00              CHGVAR     VAR(&MMC) VALUE(&MM)                                    
   0127.00              CHGVAR     VAR(&SSC) VALUE(&SS)                                    
   0128.00              CHGVAR     VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC)              
   0129.00              CHGVAR     VAR(&DIR) +                                             
   0130.00                           VALUE('/AS400-NET.USR/PROJECT/PRINTER/' +             
   0131.00                           *CAT &PDF_FILE)                                       
   0132.00              SBMJOB     CMD(RMVLNK OBJLNK(&DIR)) JOB(RMVLNK) +                  
   0133.00                           SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE)             
   0134.00              RETURN                                                             
   0135.00                                                                                 
   0136.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG)                       
   0137.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */             
   0138.00              SNDPGMMSG  MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP)                
   0139.00              ENDDO      /*  バッチ  */                                          
   0140.00              ELSE       CMD(DO) /*  対話式  */                                  
   0141.00              SNDPGMMSG  MSG(&MSG) MSGTYPE(*DIAG)                                
   0142.00              ENDDO      /*  対話式  */                                          
   0143.00              ENDPGM                                                             
   --------------------------------------------------------------------------------------------

▲ 上へ戻る