今回のSmartPad4i Tipsでは、CLプログラムやRPG(ILE RPG)/COBOLプログラム実行中のジョブ情報取得方法をご紹介いたします。
ジョブを実行中のユーザープロファイル情報やジョブ番号をSmartPad4iプログラム側で取得することにより、例えば、データの登録、変更、削除を行う際に更新者情報を書き込むことなどに使用できます。
また、接続元のユーザーによって処理を分岐するようなアプリを作成することもできます。
ジョブ情報を取得する方法
Tipsでは、IBMi側のプログラムでジョブ情報を取得する方法を利用している言語ごとにご紹介いたします。ジョブを実行しているユーザープロファイル名とジョブ番号を取得する例とします。
RPGプログラムでジョブ情報を取得する方法
RPGプログラムやILE PRGプログラムでは、プログラム状況データ構造を取得してジョブの情報を取得できます。
プログラム状況データ構造(Program Status Data Structure)はプログラム実行時の情報が格納されている構造体です。
SmartPad4iのRPGⅢプログラムでは、メイン・ソース・セクションに定義します。
RPGⅢでの記述
I(プログラム状況データ構造) IINFDSP SDS I プログラム名
I 1 10 PGM
I* ジョブ名
I 244 253 JOB
I* ユーザー名
I 254 263 USER
I* ジョブ番号
I 264 269 JOBNBR
USERフィールドにプログラムを実行しているユーザープロファイルが格納されます。
ジョブ番号JOBNBRフィールドに格納されます。
また、プログラム状況データ構造からは、他にも、
プログラム名やジョブ名など様々な情報も取得できます。
ILE RPGでの記述
ILERPGでは、ジョブ実行時のユーザープロファイルとジョブの現行ユーザープロファイルを取得することができます。
ジョブ実行時のユーザープロファイルはRPGⅢと同じく254~263桁目に格納されています。
ILERPGでは、さらに拡張として現行のユーザープロファイルを取得することができます。
358~367桁目に格納されています。
D SDS
D SPLIBC 81 90
*
* DATA STRUCTURES
* <YOURCODE>
* YOUR D SPECIFICATIONS (2)
D USER 254 263
D JOBNBR 264 269 0
D USER2 358 367
* </YOURCODE>
COBOLプログラムでジョブ情報を取得する方法
COBOLプログラムではプログラム状況データ構造を使用できないため、CLプログラムを利用してジョブ情報を取得する必要があります。
CLプログラム中ではRTVJOBAコマンドでジョブの情報を取得できます。
PGM PARM(&USER &JOBNBR)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6)
RTVJOBA USER(&USER) NBR(&JOBNBR)
ENDPGM