knowledge IBM i(AS/400)においてコマンド出力したスプールファイルをテキストとしてFTPダウンロードするサンプル(日本語対応)

本記事では、IBM i(AS/400)にてコマンド出力したスプールファイルをテキストファイルとしてFTPダウンロードするサンプルを紹介します。
なお、AutoMateのFTPアクションではASCIIモードかBinaryモードしか使えずtype Bが使えないので、日本語のテキストをIBM iからダウンロードした際に文字化けしてしまいます。
そのため、FTP専用一時ファイルとWindowsのコマンドを用いた方法にて回避しています。

以下の例では、「DSPMSG QSYSOPR」の結果をテキストダウンロードするサンプルとなっております。
なお、IBM iのコマンドが失敗する等、AutoMateとは直接関係のない部分に関するお問い合わせには弊社ではお答え致しかねますのでご留意ください。

<AMVARIABLE NAME="var_IP" VALUE="192.168.0.0" />
<AMVARIABLE NAME="var_USER" VALUE="QSECOFR" />
<AMVARIABLE NAME="var_Pass" VALUE="QSECOFR" />
<AMVARIABLE NAME="var_FTPTXT" DESCRIPTION="FTP専用一時ファイル">%GetDesktopDirectory()%\FTP.txt</AMVARIABLE>
<!--スプールコピー専用ファイルは事前に「CRTPF FILE(%var_LibName%/%var_FileName%) RCDLEN(134) IGCDTA(*YES) SIZE(*NOMAX)」で作成すること-->
<AMVARIABLE NAME="var_LibName" VALUE="TSTLIB" DESCRIPTION="スプールコピー専用ファイルのライブラリ" />
<AMVARIABLE NAME="var_FileName" VALUE="PRTFILE" DESCRIPTION="スプールコピー専用ファイルのファイル" />
<!--スプールファイル名はコマンドにより異なるので用途に応じて変更すること-->
<AMVARIABLE NAME="var_SpoolName" VALUE="QPDSPMSG" DESCRIPTION="スプールファイル名" />
<AMREGION NAME="AutoMateのFTPアクションだと「quote type B」が使えずダウンロードしたファイルの日本語が文字化けするので、FTP専用の一時ファイルを作成" COLLAPSE="no" />
<!--接続先・ユーザー・パスワードを指定-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%" APPEND="no">open %var_IP%
%var_USER%
%var_Pass%</AMFILESYSTEM>
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%" DATA="quote site namefmt 1" />
<!--SHIFT JIS KANJIモードにする-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%" DATA="quote type B" />
<!--DSPMSG QSYSOPRをスプール化-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%" DATA="quote rcmd DSPMSG QSYSOPR OUTPUT(*PRINT)" />
<!--物理ファイルにスプールをコピー-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%">quote rcmd CPYSPLF FILE(%var_SpoolName%) TOFILE(%var_LibName%/%var_FileName%) JOB(%var_USER%/QPRTJOB) SPLNBR(*LAST)</AMFILESYSTEM>
<!--テキストダウンロード ダウンロード先はデスクトップの「QSYSOPR.txt」-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%">get /QSYS.LIB/%var_LibName%.LIB/%var_FileName%.FILE/%var_FileName%.MBR %GetDesktopDirectory()%\QSYSOPR.txt</AMFILESYSTEM>
<!--スプールコピー専用ファイルをクリア-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%">quote rcmd CLRPFM %var_LibName%/%var_FileName%</AMFILESYSTEM>
<!--スプールを削除-->
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%">quote rcmd DLTSPLF FILE(%var_SpoolName%) JOB(%var_USER%/QPRTJOB) SPLNBR(*LAST)</AMFILESYSTEM>
<AMFILESYSTEM ACTIVITY="write_file" FILE="%var_FTPTXT%" DATA="quit" />
<AMENDREGION />
<!--一時ファイルを使用してFTPを実行-->
<AMRUN FILE="ftp -i -s:%var_FTPTXT%" WAITFOREND="YES" />
<!--FTP専用一時ファイルを削除-->
<AMFILESYSTEM ACTIVITY="delete" SOURCE="%var_FTPTXT%" />