注文書のFAX送信

ここでは注文書をまとめてバッチ処理で仕入先へFAX送信する適用業務の例を紹介します。

必要条件

FAX送信のためのFAXモデムが装填されたWindowsまたはWindowsサーバーが
IBM iと接続可能なネットワーク上に存在すること。
詳細はFAX送信のための設定(LINK)を参照してください。

サンプルのデータ・ベース構成

発注ファイル (QTRFIL/HATTU)
仕入先マスター(QTRFIL/SIREMT)

処理の概要

コマンド: FAXHAT によって仕入先と発注日期間を指定して入力して
CLP: FAXHATCL によって処理します。

コマンド : FAXHAT

処理画面
                        	 注文書 FAX 送信  (FAXHAT)          
                                                               
選択項目を入力して,実行キーを押してください。                 
                                                               
仕入先     から  . . . . .                  文字値         
        まで  . . . . .   9999           文字値         
発注日 (YYMMDD)    から  . .                  数値           
    (YYMMDD)    まで  . .   99999999       数値           
出力  . . . . . . . . . . . . .   *FAX          *, *PRINT, *FAX 
																

										  終り
F3= 終了    F4=プロンプト   F5= 最新表示    F12= 取り消し                      
F13= この画面の使用法                    F24= キーの続き                    
【 コマンド : FAXHAT 】
0001.00              CMD        PROMPT(' 注文書 FAX 送信 ')                 
0002.00              PARM       KWD(FROMSIR) TYPE(*CHAR) LEN(4) +           
0003.00                           PROMPT(' 仕入先     から ')          
0004.00              PARM       KWD(TOSIR) TYPE(*CHAR) LEN(4) +             
0005.00                           DFT(9999) PROMPT('          +     
0006.00                            まで ')                                  
0007.00              PARM       KWD(DATEFROM) TYPE(*DEC) LEN(8 0) +         
0008.00                           PROMPT(' 発注日 (YYMMDD)    から ')    
0009.00              PARM       KWD(DATEEND) TYPE(*DEC) LEN(8 0) +          
0010.00                           DFT(99999999) PROMPT('     +           
0011.00                             (YYMMDD)    まで ')                  
0012.00              PARM       KWD(OUTPUT) TYPE(*CHAR) LEN(6) RSTD(*YES) + 
0013.00                           DFT(*PRINT) VALUES(* *PRINT *FAX) +       
0014.00                           PROMPT(' 出力 ')                          

CLP : SNDHATCL

SNDHATCLは入力された選択値をRPGプログラム SNDHATに渡して
発注ファイルを抽出して処理します。

SNDHATCLでは仕入先毎にRPG: SNDHAT で注文書を出力し
CVTSPLFによってメール送信します。

【 CLP: FAXHATCL 】
0001.00              PGM        PARM(&SIRFROM &SIREND &DATEFROM &DATEEND +        
0002.00                           &OUTPUT)                                        
0003.00 /*-------------------------------------------------------------------*/   
0004.00 /*   FAXHATCL   :    注文書 FAX 送信                                 */   
0005.00 /*                                                                   */   
0006.00 /*   2018/02/01  作成                                                */   
0007.00 /*-------------------------------------------------------------------*/   
0008.00              DCL        VAR(&SIRFROM) TYPE(*CHAR) LEN(4)                  
0009.00              DCL        VAR(&SIREND) TYPE(*CHAR) LEN(4)                   
0010.00              DCL        VAR(&DATEFROM) TYPE(*DEC) LEN(8 0)                
0011.00              DCL        VAR(&DATEEND) TYPE(*DEC) LEN(8 0)                 
0012.00              DCL        VAR(&OUTPUT) TYPE(*CHAR) LEN(6)                   
0013.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)                    
0014.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                    
0015.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                    
0016.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)                 
0017.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)                 
0018.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)                     
0019.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)                  
0020.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +               
0021.00                           VALUE('*ESCAPE   ')                             
0022.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +               
0023.00                           VALUE(X'000074') /* 2 進数  */                  
0024.00              DCL        VAR(&ERR) TYPE(*CHAR) LEN(1)                   
0025.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +               
0026.00                           VALUE(X'00000000')                           
0027.00              DCL        VAR(&DFTCCSID) TYPE(*DEC) LEN(5 0)             
0028.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))        
0029.00                                                                        
0030.00 /*( 環境の取得 )*/                                                     
0031.00              RTVJOBA    TYPE(&TYPE) DFTCCSID(&DFTCCSID)                
0032.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */    
0033.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')               
0034.00              ENDDO      /*  バッチ  */                                 
0035.00              ELSE       CMD(DO) /*  対話式  */                         
0036.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')               
0037.00              ENDDO      /*  対話式  */                                 
0038.00                                                                        
0039.00 /*( パラメータの検査 )*/                                               
0040.00              CHGJOB     CCSID(5035)                                    
0041.00                                                                        
0042.00 /*( プログラムの実行 )*/                                               
0043.00              OVRDBF     FILE(HATTUL1) TOFILE(QTRFIL/HATTUL1) +         
0044.00                           SECURE(*YES) OVRSCOPE(*JOB)                  
0045.00              CALL       PGM(QTROBJ/FAXHAT) PARM(&SIRFROM &SIREND +     
0046.00                           &DATEFROM &DATEEND &OUTPUT)                  
0047.00              DLTOVR     FILE(HATTUL1) LVL(*JOB)                        
0048.00              CHGJOB     CCSID(&DFTCCSID)                               
0049.00              RETURN                                                    
0050.00                                                                        
0051.00  APIERR:                                                               
0052.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))           
0053.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))       
0054.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                 
0055.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')              
0056.00              GOTO       SNDMSG                                         
0057.00                                                                        
0058.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +            
0059.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +  
0060.00                           SNDMSGFLIB(&MSGFLIB)                         
0061.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                  
0062.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +    
0063.00                           TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)            
0064.00              MONMSG     MSGID(CPF2400) EXEC(RETURN)                    
0065.00              ENDDO                                                     
0066.00              ELSE       CMD(DO)                                        
0067.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +           
0068.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +            
0069.00                           MSGTYPE(&MSGTYPE)                            
0070.00              MONMSG     MSGID(CPF2400) EXEC(RETURN)                    
0071.00              ENDDO                                                     
0072.00              ENDPGM  

RPG : FAXHAT

RPGプログラム: FAXHAT の中からコマンド:CVTSPLFを呼出してPDF変換を
行い処理したスプールは DLTSPLFコマンドで削除します。

【 RPG: FAXHAT 】
0001.00 H DFTNAME(FAXHAT) DATEDIT(*YMD/) BNDDIR('QC2LE')                        
0002.00 F********** 注文書 FAX 送信 ******************************************  
0003.00 FHATTUL1   IF   E           K DISK                                      
0004.00 FSIREMT    IF   E           K DISK                                      
0005.00 FBUHINM    IF   E           K DISK                                      
0006.00 FQPRINT    O    F  132        PRINTER OFLIND(*INOF) USROPN              
0007.00 F                                     FORMLEN(66)                       
0008.00 F                                     FORMOFL(62)                       
0009.00 F********************************************************************** 
0010.00                                                                         
0011.00  * CRTBNDRPG  PGM(QTROBJ/FAXHAT)  SRCFILE(QTRSRC/QRPGLESRC)             
0012.00  * DFTACTGRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)               
0013.00                                                                         
0014.00  *-------------------------------------------------------------------*  
0015.00  *  2020/12/23 : 作成                                                   
0016.00  *-------------------------------------------------------------------*  
0017.00  *( 作業変数 )                                                          
0018.00 D AR              S              1A   DIM(256)                          
0019.00 D CMD             S           1024A                                     
0020.00 D N               S              4S 0                                   
0021.00 D TRUE            S              1A   DIM(256)                          
0022.00 D TRUE#           S              4B 0 INZ(0)                            
0023.00 D FALSE#          S              4B 0 INZ(-1)                           
0024.00 D QUOT            C                   CONST(X'7D')                                
0025.00 D OE              C                   CONST(X'0E')                                
0026.00 D OF              C                   CONST(X'0F')                                
0027.00 D NULL            C                   CONST(X'00')                                
0028.00                                                                                   
0029.00 D HDR             S             32    DIM(1) CTDATA PERRCD(1)               見出し
0030.00 D LIN             S              1    DIM(132)                                    
0031.00                                                                                   
0032.00 D SYSTEM          PR            10I 0 EXTPROC('ヘモヘホオテ')                           
0033.00 D   CMD                           *   VALUE OPTIONS(*STRING)                      
0034.00                                                                                   
0035.00 C*-------------------------------------------------------------------------+      
0036.00 C     *ENTRY        PLIST                                                  |      
0037.00 C                   PARM                    FROMSIR           4            |      
0038.00 C                   PARM                    TOSIR             4            |      
0039.00 C                   PARM                    DATEFROM          8 0          |      
0040.00 C                   PARM                    DATEEND           8 0          |      
0041.00 C                   PARM                    OUTPUT_           6            |      
0042.00 C*-------------------------------------------------------------------------+      
0043.00 C*----------------------------------------------------+                           
0044.00 C     SETKEY        KLIST                                                         
0045.00 C                   KFLD                    HTSRCD                                
0046.00 C                   KFLD                    HTDATE                                
0047.00 C                   KFLD                    HTHTNO                                
0048.00 C                   KFLD                    HTGYO                                         
0049.00 C*----------------------------------------------------+                                   
0050.00 C                   MOVEA     *ALL'-'       LIN                                           
0051.00 C                   MOVEL     FROMSIR       HTSRCD                                        
0052.00 C                   MOVEL     DATEFROM      HTDATE                                        
0053.00 C                   MOVE      *LOVAL        HTHTNO                                        
0054.00 C                   MOVE      *LOVAL        HTGYO                                         
0055.00 C     SETKEY        SETLL     HATTUL1                                                     
0056.00 C                   DO        *HIVAL                                       DO-*HIVAL      
0057.00 C                   SETOFF                                       50                       
0058.00 C                   READ      HATTUL1                                50                   
0059.00 C   50              LEAVE                                                                 
0060.00 C     SETKEY        SETLL     HATTUL1                                                     
0061.00 C*----------------------------------------------------+                                   
0062.00 C     EQLKEY        KLIST                                                                 
0063.00 C                   KFLD                    HTSRCD                                        
0064.00 C                   KFLD                    HTDATE                                        
0065.00 C*----------------------------------------------------+                                   
0066.00 C                   EXSR      OVRPRTF                                                     
0067.00 C                   OPEN      QPRINT                               90                     
0068.00 C     *IN90         IFEQ      *OFF                                         QPRINT         
0069.00 C                   DO        *HIVAL                                         DO-*HIVAL-EQL
0070.00 C                   SETOFF                                       50                       
0071.00 C     EQLKEY        READE     HATTUL1                                50                   
0072.00 C   50              LEAVE                                                                 
0073.00 C                   SETOFF                                       99                       
0074.00 C     HTSRCD        CHAIN     SIREMT                             99                       
0075.00 C                   SETOFF                                       99                       
0076.00 C     HTBHCD        CHAIN     BUHINM                             99                       
0077.00 C*( 明細印刷 )                                                                            
0078.00 C*-------------------------------------------------------------------------+              
0079.00 C                   SETON                                        42        |              
0080.00 C                   EXSR      OUTPUT                                       |              
0081.00 C*-------------------------------------------------------------------------+              
0082.00 C                   ADD       1             KENSU             7 0           件数          
0083.00 C                   ENDDO                                                    DO-*HIVAL-EQL
0084.00 C                   CLOSE     QPRINT                                                      
0085.00  *                                                                                        
0086.00 C                   SELECT                                                 SELECT         
0087.00 C                   WHEN      OUTPUT_ = '*     '                                          
0088.00 C                   EXSR      DSPLY                                                       
0089.00 C                   WHEN      OUTPUT_ = '*PRINT'                                          
0090.00 C                   EXSR      PRINT                                                       
0091.00 C                   WHEN      OUTPUT_ = '*FAX  '                                          
0092.00 C                   EXSR      SNDFAX                                                      
0093.00 C                   ENDSL                                                  SELECT         
0094.00 C                   EXSR      DLTOVR    
0095.00  *
0096.00 C                   ENDIF                                                  QPRINT    
0097.00  *                                                                                   
0098.00 C                   ENDDO                                                  DO-*HIVAL 
0099.00 C                   SETON                                        LR                  
0100.00 C                   RETURN                                                           
0101.00 C******************************************************                              
0102.00 C     OVRPRTF       BEGSR                                                            
0103.00 C******************************************************                              
0104.00 C                   IF        OUTPUT_ = '*     ' OR                        OVRPRTF   
0105.00 C                             OUTPUT_ = '*MAIL '                                     
0106.00  /FREE                                                                               
0107.00    SYSTEM('OVRPRTF FILE(QPRINT) HOLD(*YES) USRDTA('' 注文書 '') -                    
0108.00      SECURE(*YES) OVRSCOPE(*JOB)');                                                  
0109.00  /END-FREE                                                                           
0110.00 C                   ELSE                                                   OVRPRTF   
0111.00  /FREE                                                                               
0112.00    SYSTEM('OVRPRTF FILE(QPRINT) USRDTA('' 注文書 '') -                               
0113.00      SECURE(*YES) OVRSCOPE(*JOB)');                                                  
0114.00  /END-FREE                                                                           
0115.00 C                   ENDIF                                                  OVRPRTF   
0116.00 C                   ENDSR                                                            
0117.00 C******************************************************                              
0118.00 C     DLTOVR        BEGSR                                                            
0119.00 C******************************************************                              
0120.00  /FREE                                                           
0121.00    SYSTEM('DLTOVR FILE(QPRINT) LVL(*JOB)');                      
0122.00    SYSTEM('DLTSPLF    FILE(QPRINT) SPLNBR(*LAST)');              
0123.00  /END-FREE                                                       
0124.00 C                   ENDSR                                        
0125.00 C******************************************************          
0126.00 C     DSPLY         BEGSR                                        
0127.00 C******************************************************          
0128.00  /FREE                                                           
0129.00    SYSTEM('DSPSPLF    FILE(QPRINT) SPLNBR(*LAST)');              
0130.00  /END-FREE                                                       
0131.00 C                   ENDSR                                        
0132.00 C******************************************************          
0133.00 C     PRINT         BEGSR                                        
0134.00 C******************************************************          
0135.00 C                   ENDSR                                        
0136.00 C******************************************************          
0137.00 C     SNDFAX        BEGSR                                        
0138.00 C******************************************************          
0139.00  /FREE                                                           
0140.00    CMD = 'SPOOLWTR/CVTSPLF SPLF(QPRINT) JOB(*) SPLNO(*LAST) ' +  
0141.00          ' OUTPUT(*PDF) ' +                                      
0142.00          'OPTION(*FAX) RECIPIENT((' + %TRIMR(SRFAX) + ' '' +     
0143.00          %TRIMR(SRNMJ) + '')) ' +                                
0144.00          ' FROM(0669938746) FAX_SUBJ('' 注文書 '')' +                  
0145.00          ' FAXFROM('' 株式会社オフィスクアトロ '')' +                  
0146.00          ' COVERPAGE(*NO)';                                            
0147.00    SYSTEM(CMD);                                                        
0148.00  /END-FREE                                                             
0149.00 C                   ENDSR                                              
0150.00 C******************************************************                
0151.00 C     OUTPUT        BEGSR                                              
0152.00 C******************************************************                
0153.00 C  N40              SETON                                        4041  
0154.00 C                   EXCEPT                                             
0155.00 C   OF              SETOFF                                       40OF  
0156.00 C                   SETOFF                                       414243
0157.00 C                   SETOFF                                       444546
0158.00 C                   SETOFF                                       474849
0159.00 C                   ENDSR                                              
0160.00 OQPRINT    E    41                     2 06                            
0161.00 O                       UDATE         Y      8                         
0162.00 O                                           14 ' 作成 '                
0163.00 O                       HDR(1)              82                         
0164.00 O                                          128 'PAGE.'                 
0165.00 O                       PAGE          Z    131                         
0166.00 O          E    41                     1                               
0167.00 O                       HTSRCD               4                         
0168.00 O                       SRNMJ               38            
0169.00 O                                           42 ' 様 '     
0170.00 O          E    41                     1                  
0171.00 O                       LIN                132            
0172.00 O          E    41                     1                  
0173.00 O                                            8 ' コード ' 
0174.00 O                                           20 ' 品 名 ' 
0175.00 O                                           42 ' 単価 '   
0176.00 O                                           60 ' 発注数 ' 
0177.00 O                                           80 ' 金額 '   
0178.00 O          E    41                     1                  
0179.00 O                       LIN                132            
0180.00 O          E    42                     2                  
0181.00 O                       HTBHCD              12            
0182.00 O                       BHNAME              33            
0183.00 O                       HTTANK        J     44            
0184.00 O                       HTSUR         J     60            
0185.00 O                       HTKING        J     80                       
0186.00 **  HDR
0187.00  注文書                                                             
【 解説 】

仕入先のメール・アドレスは

0006.00 FMAILADR   IF   E           K DISK    EXTFILE('QUSRTEMP/MAILADR')

にコマンド WRKMAILADR(メール・アドレスの登録) によって宛先として 登録されています。
注文データは仕入先毎にまとめて注文書にして印刷しますので

0073.00 C     EQLKEY        READE     HATTUL1                                50

によって仕入先別にまとめて読み取っています。
注文書を印刷出力してからは
表示のときは

0129.00    SYSTEM('DSPSPLF    FILE(QPRINT) SPLNBR(*LAST)'); 

 で表示装置に表示して
 FAXのときは

0139.00  /FREE                                                           
0140.00    CMD = 'SPOOLWTR/CVTSPLF SPLF(QPRINT) JOB(*) SPLNO(*LAST) ' +  
0141.00          ' OUTPUT(*PDF) ' +                                      
0142.00          'OPTION(*FAX) RECIPIENT((' + %TRIMR(SRFAX) + ' '' +     
0143.00          %TRIMR(SRNMJ) + '')) ' +                                
0144.00          ' FROM(0669938746) FAX_SUBJ('' 注文書 '')' +                  
0145.00          ' FAXFROM('' 株式会社オフィスクアトロ '')' +                  
0146.00          ' COVERPAGE(*NO)';                                            
0147.00    SYSTEM(CMD);                                                        
0148.00  /END-FREE

で、CVTSPLFコマンドでIBM iから直接、相手方へメール送信します。
SYSTEMコマンドで IBM iのコマンドを実行することができます。
これは

0001.00 H DFTNAME(FAXHAT) DATEDIT(*YMD/) BNDDIR('QC2LE') 

によって バインド・ディレクトリー QC2LE を定義していますので
RPGプログラムからC言語の関数を呼べるようになっています。
関数systemは

0033.00 D SYSTEM          PR            10I 0 EXTPROC('system')                           
0034.00 D   CMD                           *   VALUE OPTIONS(*STRING)

によって大文字の関数SYSTEMとして再定義されています。
SYSTEM関数に渡すコマンド文はRPGのフリー・フォーマットで書かれていることに
注意してください。
このように文字列の結合処理はフリー・フォーマットで記述したほうが
見た目にも直観的でわかりやすくなります。
QCMDEXC関数を呼び出すよりもSYSTEM関数を利用したほうが
わかりやすく工数も少なくて済みます。