タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【AS400】CL-システム値の取り出し

CLからシステム値を取得する方法を書いてみました。

日付、時間であれば、RPGからだと、便利な組込関数の%DATE()や%TIME()でサクッと取り出せるのですが、それをCL上でやるにはどうするかという話になります。

RPGでの日付、時間の取得方法
C                   EVAL      W@DAT  = %DEC(%DATE()) 
C                   EVAL      W@TIM  = %DEC(%TIME()) 

AS400では、システム値検索 (RTVSYSVAL)という便利なコマンドがありました。
指定したシステム値を指定し、その値を変数に格納するという手法で、システムの日付や時間、その他の値も取得できました。

RTVSYSVALを使用したサンプル
PGM                                                             
    DCL  VAR(&W@DATE)   TYPE(*CHAR)  LEN(6)   /* システム日付 */
    DCL  VAR(&W@TIME)   TYPE(*CHAR)  LEN(6)   /* システム時刻 */
    DCL  VAR(&W@CURSYM) TYPE(*CHAR)  LEN(1)   /* 通貨記号 */
    DCL  VAR(&W@CCSID)  TYPE(*DEC)   LEN(5 0) /* CCSID */
    DCL  VAR(&W@CCSIDC) TYPE(*CHAR)  LEN(5)   /* CCSID (OUT) */
                                                                
   /*  システム値を変数へ確認 */                                
    RTVSYSVAL  SYSVAL(QDATE)    RTNVAR(&W@DATE)                 
    RTVSYSVAL  SYSVAL(QTIME)    RTNVAR(&W@TIME)                 
    RTVSYSVAL  SYSVAL(QCURSYM)  RTNVAR(&W@CURSYM)               
    RTVSYSVAL  SYSVAL(QCCSID)   RTNVAR(&W@CCSID)                
    CHGVAR  VAR(&W@CCSIDC)  VALUE(&W@CCSID)                     
                                                                
    SNDPGMMSG  MSG(&W@DATE)    MSGTYPE(*COMP)                   
    SNDPGMMSG  MSG(&W@TIME)    MSGTYPE(*COMP)                   
    SNDPGMMSG  MSG(&W@CURSYM)  MSGTYPE(*COMP)                   
    SNDPGMMSG  MSG(&W@CCSIDC)  MSGTYPE(*COMP)                   
ENDPGM                                                          

実行結果

> CALL PGM(TIGEROBJ/SAMP10C) 
  150121                     
  074500                     
  \                          
  05026                  

上記の通り、日付、時間、通過記号、デフォルトのCCSIDまで取り出すことができました!

オッケー! オッケー!!