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まで取り出すことができました!
オッケー! オッケー!!