以前に書いた「ヘッダレコード・データレコード・トレーラレコードとは」の続きです。
企業間でやりとりするファイルでよく見かけるフォーマットとして、レコードが「ヘッダレコード」「データレコード」「トレーラレコード」に分かれているフォーマットがあります。
簡単に言うと、それぞれのレコードの説明は以下のようになります。
【それぞれのレコードの説明】
・ヘッダレコード
ファイルの1レコード目のレコード。
一般的には、そのファイルが何日のデータなのかが記述される。
・データレコード
ファイルの中間レコード。
実際にやりとりするデータの中身が記述される。
・トレーラレコード
ファイルの最終レコード。
一般的には、そのファイルのデータレコード件数が記述される。
ここで、拡張性を確保するために、データレコードの種類を増やすという手段が有効になることがあります。
種類が異なるデータレコードをファイルに含める場合、データレコードのフォーマットを変えてしまうと、フォーマットが複雑になることで書き込み・読み込み処理が複雑になったり、フォーマット変更時の影響が全種類のデータレコードに出てしまったりします。
しかし、種類毎にデータレコードを用意することで、1つ1つのフォーマットが複雑になることを防いだり、フォーマット変更の影響が当該種類内のデータレコードに限定させることができます。
フォーマットと処理の例としては以下の通りです。
商品の種類毎にデータレコードの種類を変えることで、データ体系の違いを吸収している所がポイントです。
(1つのデータレコードにしてしまうと、1つのデータレコードに「食品商品コード」と「玩具商品コード」が含まれることになり、どちらを書き込むか・読みこむかの判断が必要になってしまいます。また、食品若しくは玩具にだけ新たな項目を追加する時に、追加が必要無い方の種類の商品の考慮も必要になってしまいます。)
【フォーマット例】
取扱商品ファイルを想定した例を記載します。
可変長のCSVファイルを想定します。
(固定長の場合も多いです。固定長の場合は、カンマ区切りではなくバイト数で区切ることになります。)
・ヘッダレコード
1項目目:ファイル区分(1がセットされる)
2項目目:ファイル作成日付(YYYYMMDD)
・食品データレコード
1項目目:ファイル区分(2がセットされる)
2項目目:食品商品コード(7桁の数値)
3項目目:商品名(全角文字)
4項目目:値段(数値)
・玩具データレコード
1項目目:ファイル区分(2がセットされる)
2項目目:玩具商品コード(6桁の数値)
3項目目:商品名(全角文字)
4項目目:値段(数値)
・トレーラレコード
1項目目:ファイル区分(9がセットされる)
2項目目:データレコードの件数(数値)
【ファイルのレコード例】
1 2 3 4 5 6 |
1,20210602 2,0000001,ほげ食品,100 2,0000002,ふが食品,250 3,000001,ほげ玩具,3000 3,000002,ふが玩具,10000 9,4 |
【ファイル受信時の処理例】
ヘッダレコードやトレーラレコードは、受信側のチェック処理に利用できます。
以下、ファイルを1レコード目から順番に読む場合の処理例について記載します。
・ファイル区分が1の時
1レコード目がファイル区分1でなければ異常終了。
(送信側が中間ファイル等誤ったファイルを送信することを想定)
バッチ日付と比較し一致しなければ異常終了。
(送信側が誤って過去ファイルを送信することを想定)
・ファイル区分が2の時
業務上必要な食品向けの処理を実行。
・ファイル区分が3の時
業務上必要な玩具向けの処理を実行。
・ファイル区分が9の時
最終レコードのファイル区分が9でなければ異常終了。
(ファイルを全件受信できていないことを想定)
件数がファイル区分2~3のレコード数と一致しなければ異常終了。
(ファイルを全件受信できていないことを想定)
いかがでしたでしょうか。
このテクニックは、レガシーなシステムでは良く使われるテクニックです。
レガシーなシステムの設計をする場合に、もしかしたら役に立つことがあるかもしれません。
コメント