Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


 出口プログラムを使用して独自のログを取得する方法

ValenceはIBMiと同じように一部処理について出口プログラム(ExitProgram)が設定できます。出口プログラムはログイン時やアプリケーション立ち上げ時など様々な場面で使用可能です。今回はユーザーがアプリケーションを起動した際に独自にログを取る方法を紹介いたします。

出口プログラムについて

出口プログラムを設定できる箇所は20250708.0verの段階で15か所存在します。


それぞれの出口プログラムのテンプレートはValenceのライブラリ「QRPGLESRC」に用意されおり、それぞれの出口プログラムが呼び出されるタイミングとテンプレートは以下のようになっております。

出口プログラム呼び出しタイミングテンプレート
Session login authenticationログイン認証されたときEXEXITPGML
セッションログインユーザーが正常ログインしたときEXEXITPGM
セッションログイン
-ユーザーテンプレート上書き
ユーザーが初めてvalenceにログインするときEXEXITPGMU
セッションログアウトユーザーがログアウトかタイムアウトしたときEXEXITPGM
パスワード変更パスワードが変更されたときEXEXITPGM
環境変更環境が変更されたときEXEXITPGM
ポーリングポーリングされたときEXEXITPGMP
新規CGIジョブの初期化新規CGIジョブが初回使用されるときEXEXITPGM
VVCALLでの、アプリケーション初期化アプリケーションが初めて起動されたときEXEXITPGM
VVCALLでの、前処理VVCALLからプログラムが呼出される直前EXEXITPGM
VVCALLでの、後処理プログラムの呼出し完了後EXEXITPGM
VVMAIL、前処理中メール送信の前に、VVMAILで呼び出されるときEXEXITPGMM
各クリーンアップまたはRCLACTGRPvvUtility_cleanUp が呼び出されたときEXEXITPGM
アプリバッジ制御プログラムアプリケーションのアイコンのバッジを制御するEXEXITBDG
Fusion5250デバイス名の上書き起動した5250セッションのデバイス名を動的に設定するEXEXITPGMF

アプリケーション起動時のログ取得方法

今回はアプリケーション起動時にログ取得するために、テンプレート【EXEXITPGM】を使用します。
出口プログラムは通常のRPGのテンプレートとは異なり、Valenceのシステムライブラリに配置する必要があります。
例えば、VALENCE6Tのインスタンスで使用するならばVALENCE6Tライブラリに出口プログラムを配置します。

また、SQLでログファイルに書き込むためにコンパイルの変更が必要となるため、テンプレート【EXEXITPGM】の拡張子を「RPGLE」から「SQLRPGLE」に変更します。テンプレートコピーの際に拡張子の変更をしてください。

ログ取得のRPGプログラムは下記にようになっております。
予め作成したログファイルに各アプリケーション起動ごとにSQLで書き込むようになっております。
今回は例として「SSID」、「ログイン名」、「現在時刻」、「アプリ名」、「ログインモード(desktop or mobile)」をログとして取得し、ログファイルはVALDOCLIB/S15641という物理ファイルを作成し利用します。

    **--------------------------------------------
     **  d specs
     **--------------------------------------------
     d exitDS        e ds                  extname(vvDSexit1)
     d sessionDS     e ds                  extname(vvsessdata) qualified
     d dataPtr2        s               *
     d outputData      s          65535a   varying                              up to len(500000)
     d length          s             10i 0
     d curCCSID        s              5i 0
      /include qcpylesrc,vvDspec

   **--------------------------------------------
     **  program start
     **--------------------------------------------
     d *n              pi
     d  IOexitDS                           like(exitDS)
     d  dataPtr                        *                                        (See VVCALL1)
     d  nowTime        s               Z
     d  sid            s             64a   varying
     d  loginname      s             20a   varying
     d  loginID        s              4a
     d  appID          s              4a
     d  appName        s             30a
     d  mode           s             30a   varying
      /free
       exitDS=IOexitDS;

       // use vvSessDS (passed in IOexitDS) to retrieve info regarding the session
       sessionDS=vvSessDS;

       // if you want to execute something in conjunction with the initial launch of an app...
       if vvExitMode='VVCALL_INIT';
              //SSIDの取得
              sid = %char(sessionDS.vvsessID);
              //ログイン名の取得
              loginname = sessionDS.vvLoginID;
              //時刻の取得
              nowTime = %timestamp();
             //ログインモード(desktop or mobile)の取得
              mode = sessionDS.VVMODE;
             //AppIDの取得
             appID=vvCallPgm;

          //AppIDからApp名を取得
           exec sql
             select VVAPPNAME INTO :appName
             From VVAPPS
             WHERE VVAPPID = :appID;

          //ログ用のファイルに書き込む
          exec sql
            INSERT INTO VALDOCLIB/S15641 (USRID,SESID,APPNM,LOGDT,MODE)
            VALUES(:loginname,:sid,:appName,:nowTime,:mode);

       endif;
       *inlr=*on;
vvExitMode='VVCALL_INIT';

テンプレート【EXEXITPGM】はvvExitModeでどの出口プログラムかを指定します。「VVCALL_INIT」は「VVCALLでの、アプリケーション初期化」の出口プログラムを指定しています。

プログラム完成後、「ポータル管理-設定」から出口プログラムに設定します。
出口プログラムに設定後はValenceの再起動が必要であるため、再起動を行います。

再起動後に、アプリケーション起動すると指定ファイルにログが書き込まれるようになります。

おわりに

今回はアプリケーション起動時にログを取得する出口プログラムを作成いたしました。出口プログラムは通常のRPGのテンプレートと異なり、システムライブラリへの配置や設定後の再起動等の注意点がございます。注意点に気を付けながら是非出口プログラムをご活用ください。