2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IBM i (旧AS400)の自己学習メモ コマンド/ツール/運用 *FILE SAVFオブジェクトを取り扱う

Posted at

自己学習メモインデックス

IBM i (旧AS400)の自己学習メモ インデックス

概要

AS400を利用していると、開発会社に開発してもらったプログラムなどを、***.SAVFという拡張子のファイルで連携し、顧客環境へ展開してUATや本番リリースを行うケースがあります。(あるようです)
そこで、*FILE SAVFオブジェクトが自分でも取り扱えるようになると便利かなと思い、いじってみることにしました。

この記事では、*FILE SAVFオブジェクトのことをSAVFファイルと呼称します。

SAVFファイルの取り扱い

指定したオブジェクトをSAVFファイルに保存してローカルPCに取得する

空のSAVFファイルを作成する

crtsavf file(yamaguchi1/testsavf) TEXT('テスト用のSAVF')
スクリーンショット 2020-06-22 8.09.35.png

SAVOBJコマンドで指定したオブジェクトをSAVFファイルに保管する

ここでは、QCLSRCQSAVTSTSRCの2つのファイルをSAVFファイルに保管しています。
CLEAR(*REPLACE)は、既に存在するSAVFファイルの中身を削除してから置き換えるという指定です。

SAVOBJ OBJ(QCLSRC QSAVTSTSRC) LIB(YAMAGUCHI1) DEV(*SAVF) SAVF(YAMAGUCHI1/TESTSAVF) CLEAR(*REPLACE)

保管したSAVFファイルの中身を確認する

DSPSAVFコマンドで保管したSAVFファイルの中身を確認することができます。
また、Display Saved Objectsの画面から、Optionに5を指定することで、そのファイルの中身(メンバー)まで確認することが可能です。

dspsavf file(yamaguchi1/testsavf)

as400.gif

AS400上にあるSAVFファイルをFTPで取得する

まずはftpコマンドを利用して ftp {AS400のサーバー}を実行し、ログインIDとパスワードを入力します。
私の自己学習用の環境がMacなのでbrew install tnftpでFTPコマンドが利用できるように事前にセットアップしています。
Windows10の環境であれば、ftpコマンドは標準搭載されていたかと思いますので、コマンドプロンプトでそのまま実行できるはずです。

ftpコマンドで接続
$ ftp pub400.com

Connected to pub400.com.
220-QTCP at PUB400.COM.
220 Connection will close if idle more than 16 minutes.
Name (pub400.com:you_name_is_yu): YAMAGUCHI
331 Enter password.
Password: 
230 YAMAGUCHI logged on.
Remote system type is .
ftp> 

FTPには転送モードとしてアスキーモードとバイナリモードが存在します。
ざっくりと

  • アスキーモード:テキストファイルを転送する時に使う(改行コードが自動的に修正されて転送される)
  • バイナリモード:テキストファイル以外のファイルを転送する時に使う(ファイルがそのまま転送される)

みたいな感じです。
SAVFファイルは、テキストエディタなどで開いてみても、中身がなんなのかよくわからない化けた状態となっているファイルです。
そのため、アスキーモードではなくバイナリモードでデータ転送します。

バイナリモードに変更
ftp> bin
200 Representation type is binary IMAGE.

SAVFファイルが格納されているローカルPC側のディレクトリにカレントディレクトリを移動します。
lcdコマンドは、ローカルPC側のカレントディレクトリを移動するために利用するFTPコマンドを利用している場合のコマンドです。
l(エル)を付けない場合、FTPで接続している先(AS400)のディレクトリが移動してしまいます。

ローカル環境のカレントディレクトリを変更
ftp> lcd /Users/you_name_is_yu/Downloads
Local directory now: /Users/you_name_is_yu/Downloads

ftp> !pwd
/Users/you_name_is_yu/Downloads

転送先となるAS400側のライブラリにカレントディレクトリを移動します。

AS400側のライブラリにカレントディレクトリを移動
ftp> cd /QSYS.LIB/YAMAGUCHI1.LIB
250 "/QSYS.LIB/YAMAGUCHI1.LIB" is current library.

ftp> ls
229 Entering Extended Passive Mode (|||49527|).
125 List started.
......
-rwx------   1 YAMAGUCHI 0          24576 Jun 21 23:06 TESTSAVF.SAVF  <-- 事前に作成済みのSAVFファイル
250 List completed.

FTPのPUTコマンドを利用してSAVFファイルをAS400の指定したライブラリに転送します。

GETコマンドでファイルを取得
ftp> get TESTSAVF.SAVF
local: TESTSAVF.SAVF remote: TESTSAVF.SAVF
229 Entering Extended Passive Mode (|||36583|).
150 Retrieving member TESTSAVF in file TESTSAVF in library YAMAGUCHI1.
   247 KiB   18.04 KiB/s 
226 File transfer completed successfully.
253440 bytes received in 00:13 (18.04 KiB/s)

以上の手順で指定したオブジェクトをSAVFファイルに保管し、ローカルPCにダウンロードが完了です。
私の場合は開発者ではないので、どちらかというと開発会社から現行環境のオブジェクト提供依頼があった場合などに、エクスポートするような感じで利用することになろうかと思います。

受領したSAVFファイルをAS400に転送して展開する

開発会社に開発してもらったプログラムが、SAVFファイルになって納品されるケースを想定し、
その受領したファイルを自社環境のAS400に展開する方法についてまとめました。

SAVFファイルはFTPによって転送できますが、事前に転送先のライブラリ(ここではYAMAGUCHI1ライブラリ)内に、予め*FILE SAVFオブジェクトを空でもなんでもいいので作成しておく必要があります。
作成済みのSAVFファイルに対してFTPで上書き転送することで、正しく転送できます。
事前にSAVFファイルを作成しなかった場合、物理ファイル・オブジェクトとして転送されてしまい、SAVF関連のコマンドで操作できないファイルとなってしまいます。

FTPでAS400にSAVFファイルを転送する

ftpコマンドで接続
$ ftp pub400.com

Connected to pub400.com.
220-QTCP at PUB400.COM.
220 Connection will close if idle more than 16 minutes.
Name (pub400.com:you_name_is_yu): YAMAGUCHI
331 Enter password.
Password: 
230 YAMAGUCHI logged on.
Remote system type is .
ftp> 

バイナリモードに変更する。

バイナリモードに変更
ftp> bin
200 Representation type is binary IMAGE.
ローカル環境のカレントディレクトリを変更
ftp> lcd /Users/you_name_is_yu/Downloads
Local directory now: /Users/you_name_is_yu/Downloads

ftp> !pwd
/Users/you_name_is_yu/Downloads

転送先となるAS400側のライブラリにカレントディレクトリを移動します。

AS400側のライブラリにカレントディレクトリを移動
ftp> cd /QSYS.LIB/YAMAGUCHI1.LIB
250 "/QSYS.LIB/YAMAGUCHI1.LIB" is current library.

ftp> ls
229 Entering Extended Passive Mode (|||49527|).
125 List started.
......
-rwx------   1 YAMAGUCHI 0          24576 Jun 21 23:06 TESTSAVF.SAVF  <-- 事前に作成済みのSAVFファイル
250 List completed.

FTPのPUTコマンドを利用してSAVFファイルをAS400の指定したライブラリに転送します。

PUTコマンドでAS400にSAVFファイルを転送
ftp> put TESTSAVF.SAVF TESTSAVF.SAVF
local: TESTSAVF.SAVF remote: TESTSAVF.SAVF
229 Entering Extended Passive Mode (|||17390|).
150 Sending file to member TESTSAVF in file TESTSAVF in library YAMAGUCHI1.
100% |******************************************************************************************|   247 KiB  100.79 KiB/s    00:00 ETA
226 File transfer completed successfully.
253440 bytes sent in 00:06 (38.98 KiB/s)

以上でSAVFファイルをAS400の指定したライブラリに転送が完了しました。

SAVFファイルの中身を確認する

SAVFファイルの中身を確認するにはDSPSAVFコマンドを使います。

dspsavf file(yamaguchi1/testsavf)
スクリーンショット 2020-06-24 7.19.01.png

SAVFファイルを指定したライブラリに展開(解凍)する

自己学習環境として利用しているPUB400.comでは、どうやらSAVOBJやSAVLIBで保管したSAVFファイルを、指定したライブラリへ展開するRSTOBJRSTLIBコマンドが権限制御されており、利用できません。
https://pub400.com/help.html
How can i load my data?の部分にその記載があります。

代わりに、RESTOBJRESTLIBコマンドを用意しているみたいなので、そのコマンドを使った展開方法をここには記載します。
※本来のAS400標準には存在しないコマンドのようなので、あくまでもPUB400.com環境でのみ動作するとご理解ください。

RESTOBJ LIBNAM(YAMAGUCHI1) SAVFNAM(TESTSAVF) SAVFLIB(YAMAGUCHI1) 

実行すると以下のようなメッセージが表示されます。
スクリーンショット 2020-06-24 7.26.26.png

しばらく待って、DSPMSGコマンドでメッセージ情報を再度確認してみると、次のようなメッセージが表示されます。
スクリーンショット 2020-06-24 7.28.39.png

ここにある以下の内容が重要です。

Your Savefile TESTSAVF  has been restored into temporary library TMP911787
  . Please copy the objects into one of your libraries and delete this    
  temporary library because of your storage is limited. Use command WRKLIB
  TMP* to see the library.                                                

TMP911787というライブラリに展開したオブジェクトが格納されているよ。
この中からオブジェクトを自分のライブラリにコピーして、一時ライブラリを削除してね。
なぜならあなたのストレージには制限があるから。ということです。

TMP911787の中身を確認してみます。
メッセージでヒントとしてコマンドを教えてくれているので、そのコマンドの通りに辿ってみます。

WRKLIB TMP*  
スクリーンショット 2020-06-24 7.39.03.png

OPT=12を指定してWork with Objectsの画面に遷移

スクリーンショット 2020-06-24 7.36.34.png

確かに展開されたオブジェクトが存在します。
コピーしたい場合は、OPTに3を設定して、To lbraryに自分のライブラリを指定すれば良いのかと思います。

スクリーンショット 2020-06-24 7.37.00.png

必要なオブジェクトのコピーが完了したら、 Work with Librariesの画面でOPT=4を指定して削除すれば、PUB400.comからの指示通りの挙動ではないかと思います。

スクリーンショット 2020-06-24 7.41.06.png スクリーンショット 2020-06-24 7.41.40.png

PUB400.com専用の操作となり、通常のAS400運用とは異なる内容にはなってしまいましたが、
自己学習するうえで、本番環境を自由に(何かをやっちまって障害を起こしても何もきにしないで)いじくりまわせるAS400の環境は他には無いと思います。
このぐらいの制限は気にせず、これからも活用させていただきたいなと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?