サンプルプログラムはこちらから!
第4回目は第3回目に続き、題名にもあるようにDEFファイル(物理ファイル)に書込むまでになります。
ソース・プログラムは当連載第1回でご案内したサンプル・ライブラリーに格納してありますので、全容はそちらでご確認ください。
1. DEFとは
第3回で説明した通り、表示編集情報を持つファイルです。
DEFファイルはXML形式ファイルです。XMLファイルを採用した理由は、データを抽出するのは面倒ですが拡張性に優れ可読性が高いためです。
またXML整形ツールやDTDを作成する事でデータの検証が行える利点もあります。サンプルではDTDを作成していません。
コラム
今回XMLを採用した理由は、CSVはセパレータ文字や制御文字のエスケープ処理はローカルルールが多く明確に規定されていないためです。
また最近ではJSONフォーマットを好まれる人もいますが、JSONは可読性が低く構文に誤りがあった時に見つけにくい問題があります。
生成されたサンプルのDEFファイルです。
(※ピボット集計・グラフ描画の記述を除いたもの)
1.1 DEFファイル出力(UTLOUTDEF)
DEFファイル出力は前述のCSVCOLとCSVEDTによりCSVTXTファイルに出力します。
CSVTXTは事前にライブラリーリストに存在するライブラリーにCRTPFで作成します。UTLOUTDEFを実行する前にCRTDUPOBJでQTEMPに作成後、OVRDBFでQTEMPのものを使用するようにします。
XMLファイルもSQLと同様にレコード長の長いテキストファイルに書き出す事になります。
上記はUTLOUTDEFを実行するまでのILECLPの抜粋です。
上記はCSVTXTのDDSソースです。
1.1.1 実行時パラメータ
UTLOUTDEFは7つのパラメータが必要です。実行時にパラメータとして渡します。
項目 | 内容 | タイプ |
---|---|---|
ID | CSVCOLで定義したID | 入力 |
データ件数 | データ件数(SELECT COUNT(*)で取得した件数) | 入力 |
カラム数 | 出力するカラム数 | 出力 |
シート名 | 出力するEXCELシート名 | 入力 |
TABLEスタイル | シートに作成するテーブルのスタイル | 入力 |
TABLE名 | シートに作成するテーブル名 | 入力 |
出力ファイル名 | 出力するEXCELファイル名の先頭名 | 入力 |
- TABLEスタイルでEXCELの1行毎の色分けを実現しています。設定する値はEXCELのテーブルスタイルを参照願います。
- 上記パラメータのシート名から出力ファイル名及びCSV作成プログラム名をパラメータ取得プログラムで取得しています。
(参考) EXCELのテーブルスタイル
1.1.2 XMLデータ定義(UTLOUTDEF)
CSVCOLL1をパラメータ&IDで読込みID毎に異なるDEFファイルを作成します。
XMLデータはDSで定義したものを出力します。定義しているXMLの一部が下記になります。
下記がXML出力コードです。ヘッダー/明細/フッター出力を別プロシージャ―にしています。
(#WRITE_DEF_HD, #WRITE_DEF_IT, #WRITE_DEF_FT)
XMLヘッダー出力(#WRITE_DEF_HD)
以上がXMLヘッダー出力になります。DS定義に手間がかかるだけで何も難しい事はありません。
CCSID=5026で作成して問題ありません。IFSに転送する時にEBCDIC(5026)からASCIIコードに変換(漢字も含む)されます。
XML明細出力(#WRITE_DEF_IT)
XMLフッター出力(#WRITE_DEF_FT)
以下の画面が今回サンプルプログラムで出力したものです。
このファイル(CCSID=5026)をFTPもしくはCPYTOIMPFでIFSに出力するとUNIXでのテキストファイルになります。
(コラム)
余談ですがASCIIコード(American Standard Code for Information Interchange)は名称の通りアメリカで制定された7ビットコード体系です。
JISコードはASCIIコードをベースに8ビットコード体系に拡張しカタカナ等を追加したものです。
現在ではASCIIコードは8ビットでカタカナも使えるという認識になっていますが本来はJISコードになります。
とは言え現在ではUNICODE(UTF-8)が主流ですがUNICODEの1バイト系文字はASCIIコードがベースとなっています。
地域によりアクセント文字の追加が行われています。(ISO8859にサフィックスが付くコード体系)
但し、CPYTOIMPFはレコードの後ろブランクはカットされませんのでデータ件数が多くなる場合は避けた方がよいかと思います。
DEFファイルはXMLファイルですが、IBMiの世界ではレコード長の長い物理ファイルです。
CSVファイルも同じですが、格納される列データが多くなる事が想定されますので、レコード長をより長くしています。
日本アイ・ビー・エム株式会社が毎月開催しているIBM Powerユーザーのための自由な語り場「IBM Power Salon」(月1回、第二水曜日の朝9時から開催)をご存じでしょうか?
https://www.ibm.com/blogs/systems/jp-ja/ibm-power-salon/
2023年1月11日に開催された第14回の、株式会社 電業様による「惜しみなく共有しちゃいます、根っからのエンジニアが語る、IBM i 内製化のリアル。」では、既存IBM i環境を見事に活用し、自作でIBM i と自動倉庫をつなげDXを実現された素晴らしい事例が披露されました。
https://video.ibm.com/recorded/132452956
とはいえ、1時間の講演時間では語りきれなかった詳細は、きっと他のIBM i ユーザーの方にも参考になるはず!ということで、株式会社電業 総務部 竹本伸明様に“内製DX”について具体的にご説明いただきます。読めばきっと、「IBM i でここまでできるんだ!」と目から鱗が落ちるはずです!