UDATEは RPGの中でも今日の日付を設定するのに頻繁に使用されているし
馴染みも多い。
御社のプログラム資産の中でもUDATEを使用しているプログラムは
多いはずである。
印刷帳票には出力日付としてほとんど必ずと言ってよいほど
UDATE が印刷出力されている。
しかしUDATEの使用には少し注意がある。
それは UDATEとはジョブが投入された日であることだ。
つまりジョブが挙がりっぱなし、つまり表示端末ジョブを点けっぱなしである
場合は UADTEとあくる日になっても全く変わらないということである。
例えば 2020年1月30日に5250エミュレータを接続してON にして
休日明けの2020年2月3日に出勤してこの人が同じ端末で仕事をしたとする。
そのジョブのUDATEは 1月30日のままで変わっていない。
UDATE を使った印刷を行うと 1月30日のままで出力される。
PCをオンにしたままで帰る人はいなかったとしても
現在、多くの企業で IBM iは毎朝IPLするのではなく
ほとんど年間を通じてオンににしたままという企業もめずらしくはない。
このとき社内でバッチJOBが待機しているようであれば
そのバッチJOBのUDATEは変わらないままである。
HTTPサーバーやFTPサーバーもオンになったままであれば
CGI出力のUDATEが変わらないということもある。
( 弊社のHTTPサーバー: ALSKAはこの問題は考慮されているので
UDATEを使っている場合も正しく更新される)
[ UDATEの問題を避ける方法 ]
0028.00 D*( プログラム状況データ構造 ) 0029.00 D INFDS_THIS SDS 0030.00 D PROC_NAM *PROC 0031.00 D ROUTINE *ROUTINE 0032.00 D 512A 0033.00 D PGMINFO 1 512 0034.00 D LINE_NUM 21 28 0035.00 D CPFID 40 46 0036.00 D CPFDTA 91 170 0037.00 D ERRMSGID 46 51 0038.00 D JOBDAT 191 198 0039.00 D JOB 244 253 0040.00 D EXEDAT 276 281 0041.00 D CURUSR 358 367
[解説]
RPG のプログラム構造の中でも
0040.00 D EXEDAT 276 281
はつねに更新されているので点けっぱなしのJOBであっても
正しい日付を取得することができる。