サービス・プログラム(*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
に変更しておくこと。
サービス・プログラムは多くのプログラムで共有して使用されることを目的としているため、
毎回、上記のように上位プログラムの中でプロシージャーのプロトタイプを定義するのは
重複作業が発生していまうので、一般には プロトタイプを別の RPGソースに登録しておいて、
/COPY MYSRCLIB/QRPGLESRC,PROTOTYPE
のようにして、使用することが多い。EnterpriseServer の RPGエンジン(*SRVPGM
) を使用する場合も
/COPY
によってプロトタイプをインクルードして使用する。
多くのサービス・プログラムを社内で使用して開発することを想定すると数多いサービス・プログラムを
いちいち指定するのは面倒だし、サービス・プログラムがどのライブラリーに保管されているのかを
確かめる必要がある。
このような用途のために提供されているのがバインド・ディレクトリー(*BNDDIR
) である。
バインド・ディクトリーの作成や保守は簡単で、いわばライブラリー・リストの同じようなものである。
CRTBNDDIR
でバインド・ディレクトリーを作成して、
ADDBNDDIRE
でサービス・プログラムをバインド・ディレクトリーに追加したら
CRTPGM
では、バインド・ディレクトリーを指定するだけで、バインド・ディレクトリーが
参照されてサービス・プログラムを指定しなくてもサービス・プログラムが
バインドされてコンパイルすることができる。
もう少し進んで、RPGソース自身にもバインド・ディレクトリーを指定することができる。
H BNDDIR(MYOBJLIB/MYDIR)
のように H-仕様書にバイント・ディレクトリーを直接、指定しておけば
CRTPGM
での指定は一切、不要になる。