RPG

143. ILE入門 (3)

サービス・プログラム(*SRVPGM) ができたところで、次に上位のプログラムから
サービス・プログラムで EXPORT されたいる公開プロシージャーを利用する方法について解説しよう。
上位のプログラムで公開プロシージャーを利用するのは簡単で、

というだけである。

■ サービス・プログラムをバインドする。

上位のプログラムの例を下記に紹介する。

------------------------------------------------------------------------------------
0001.00 H DFTNAME(PGM101) DATEDIT(*YMD/)                                        
0002.00 F**********  商品マスターの照会 *************************************** 
0003.00 FSMP001FM  CF   E             WORKSTN                                   
0004.00 FSHOHIN    IF   E           K DISK                                      
0005.00 F*********************************************************************  
0006.00 D*( RTV_HSNAME  のプロトタイプ宣言 )                                    
0007.00 D RTV_HSNAME      PR            14A                                     
0008.00 D  HNSCOD                        4A   Value                             
0009.00 C*----------------------------------------------------+                 
0010.00 C     START         TAG                                                 
0011.00 C                   EXFMT     DSPHEAD                                   
0012.00 C*----------------------------------------------------+                 
0013.00 C*( CF03 )- 終了                                                        
0014.00 C     *IN03         IFEQ      *ON                                       
0015.00 C                   SETON                                        LR     
0016.00 C                   RETURN                                              
0017.00 C                   END                                                 
0018.00 C*( 商品マスターを検索 )                                                
0019.00 C                   SETOFF                                       90     
0020.00 C     SHCODE        CHAIN     SHOHIN                                    
0021.00 C     *IN90         IFEQ      *OFF                                  
0022.00 C                   EVAL      HNSNAM = RTV_HSNAME(SHSCOD)           
0023.00 C                   END                                             
0024.00 C*----------------------------------------------------+             
0025.00 C     DSPLY         TAG                                             
0026.00 C                   EXFMT     DSPDTA01                              
0027.00 C*----------------------------------------------------+             
0028.00 C*( CF03 )- 終了                                                    
0029.00 C     *IN03         IFEQ      *ON                                   
0030.00 C                   SETON                                        LR 
0031.00 C                   RETURN                                          
0032.00 C                   END                                             
0033.00 C                   GOTO      DSPLY                                 
0034.00 C     END           TAG                                             
------------------------------------------------------------------------------------
【 実行結果 】

実行すると下記のように品種名「ビデオデッキ」が参照されて表示される。

【 解説 】
0006.00 D*( RTV_HSNAME  のプロトタイプ宣言 )          
0007.00 D RTV_HSNAME      PR            14A           
0008.00 D  HNSCOD                        4A   Value   

によって、プロシージャーのプロトタイプを宣言している。
プロシージャーの使用方法は、

0022.00 C                   EVAL      HNSNAM = RTV_HSNAME(SHSCOD)  

という簡単なものである。

CRTRPGMOD MODULE(QTEMP/SMP001) SRCFILE(MYSRCLIB/QRPGLESRC) DBGVIEW(*SOURCE) AUT(*ALL)

としてライブラリー QTEMP にモジュール SMP001 を作成してから、

CRTPGM PGM(MYOBJLIB/SMP001) MODULE(QTEMP/SMP001) BNDSRVPGM(MYOBJLIB/SMP002) ACTGRP(*NEW) AUT(*ALL)

ここで活動化グループ(ACTGRP) は、必ず *NEW に変更しておくこと。

■ /COPY によってプロトタイプを宣言する。

サービス・プログラムは多くのプログラムで共有して使用されることを目的としているため、
毎回、上記のように上位プログラムの中でプロシージャーのプロトタイプを定義するのは
重複作業が発生していまうので、一般には プロトタイプを別の RPGソースに登録しておいて、

/COPY MYSRCLIB/QRPGLESRC,PROTOTYPE

のようにして、使用することが多い。EnterpriseServer の RPGエンジン(*SRVPGM) を使用する場合も
/COPY によってプロトタイプをインクルードして使用する。

■ バインド・ディレクトリーを使う。

多くのサービス・プログラムを社内で使用して開発することを想定すると数多いサービス・プログラムを
いちいち指定するのは面倒だし、サービス・プログラムがどのライブラリーに保管されているのかを
確かめる必要がある。
このような用途のために提供されているのがバインド・ディレクトリー(*BNDDIR) である。
バインド・ディクトリーの作成や保守は簡単で、いわばライブラリー・リストの同じようなものである。

CRTBNDDIR  でバインド・ディレクトリーを作成して、
ADDBNDDIRE でサービス・プログラムをバインド・ディレクトリーに追加したら

CRTPGM では、バインド・ディレクトリーを指定するだけで、バインド・ディレクトリーが
参照されてサービス・プログラムを指定しなくてもサービス・プログラムが
バインドされてコンパイルすることができる。

■ バインド・ディレクトリーを宣言する。

もう少し進んで、RPGソース自身にもバインド・ディレクトリーを指定することができる。

H BNDDIR(MYOBJLIB/MYDIR)

のように H-仕様書にバイント・ディレクトリーを直接、指定しておけば
CRTPGM での指定は一切、不要になる。