今回はDelphi/400から IBM i 上のファイルの情報をコマンドから取得する方法をご紹介いたします。
概要・設定方法
5250エミュレータ上では、IBM i(AS/400)上のファイルの
作成日時や作成ユーザーといった情報は DSPOBJD コマンドで表示されます。
この内容を Delphi/400 アプリケーションで受け取る方法をご紹介します。
Delphi/400 の TCmd400 コンポーネントを使用すると、
戻り値のある IBM i コマンドを実行できます。
DSPOBJD コマンド は戻り値がありませんが、
代わりに RTVOBJD コマンドを使用すると
ファイル情報を戻り値で受け取ることができます。
RTVOBJD では受け取る情報によってパラメータの指定が必要です。
パラメータの詳細は IBM のサイトにありますように、
たとえば作成日/時刻は CRTDATE 、作成ユーザーは CRTUSER です。
(参照)
https://www.ibm.com/docs/ja/i/7.2?topic=ssw_ibm_i_72/cl/rtvobjd.htm
TCmd400 から RTVOBJD を実行してCRTDATEとCRTUSERを取得する場合、
次のような手順になります。
- TCmd400のAS400プロパティにTAS400をセットします。
- コマンド結果を受け取るパラメータをParamsプロパティに2つ用意します。
今回はどちらも、文字(A)型にし、桁はそれぞれ 13桁 と 10桁とします。
(返される値が入る大きさにして下さい。)
- CommandLine プロパティに記述するコマンドは、
TCmd400のパラメータ番号を含めますので次のようになります。
(例)
RTVOBJD OBJ(ライブラリ/ファイル) OBJTYPE(*FILE) CRTDATE(&P.1) CRTUSER(&P.2)
- コード上では次のように実行して、パラメータを受け取ります。
CommandLine プロパティは設計画面からでも、こちらの例のようにコードからでもセットできます。
AS4001.Connect; Cmd4001.CommandLine.Text := 'RTVOBJD OBJ(ライブラリ/ファイル) '+ 'OBJTYPE(*FILE) CRTDATE(&P.1) CRTUSER(&P.2)'; Cmd4001.Execute; Edit1.Text := Cmd4001.Value[0]; //&P.1 Edit2.Text := Cmd4001.Value[1]; //&P.2
なおCRTDATE(作成日/時刻)の戻り値は
「1100810150044」といった13桁の値となっていますが、
1桁目 は世紀(’0’の場合は年19XXを、’1’は年20XX)、
2~7桁目の6桁が日付(年の下2桁+月日)、
8~13桁目の6桁が時刻(時分秒)となります。
(例)
1130308=2013/03/08
150044 =15:00:44
必要に応じて、Copy関数などで文字列を分割したり、
西暦の上2桁の ’20’ を + で連結して下さい。
(ミガロ.情報マガジン「MIGARO News!!」Vol.148 2013年3月号より)