【iDempiere Lab】レポートのCSVダウンロードのダブルクォーテーション

iDempiereのレポートからCSV形式でダウンロードしてみると、ダブルクォーテーションで囲まれているデータと囲まれていないデータがある事に気が付きます。

そのダブルクォーテーションで囲まれるデータと囲まれていないデータの違いについて調査及び研究し、その成果をまとめています。

一覧レポート
一覧レポート
ダウンロードしたCSVデータ
ダウンロードしたCSVデータ

ソースコード

 CSVのデータにダブルクオテーションを付ける処理は、ReportEngineクラスのcreateCSVvalue()メソッドで行われています。

ReportEngineクラスcreateCSVvalueメソッド
ReportEngineクラスcreateCSVvalueメソッド

このロジックでは、delimiterという変数に格納されている",(カンマ)"と、Character.isLetterOrDigit()メソッドで"false"が返された場合に、"(ダブルクオテーション)が付けられている事が分かります。

Character.isLetterOrDigit()メソッドは、Java Doc上では「指定された文字が汎用文字または数字かどうかを判定します。」と説明されています。

つまり、汎用文字か数字以外の文字がダウンロードするデータに含まれている場合、"(ダブルクオテーション)が付けられるようになっています。

具体的に言うと、"-(ハイフン)"や"_(アンダーバー)"、"/(スラッシュ)"などが含まれていると、"(ダブルクオテーション)が付けられるようになっています。

ダブルクォーテ―ションで囲まれているデータと囲まれていないデータの混在しているCSVについて

iDempiereのCSVダウンロードの仕様だと、ダブルクオテーションで囲まれているデータと囲まれていないデータが混在する事になります。

この事に少し気持ち悪さを感じるかもしれませんが、iDempiereのインポート処理としては、CSV形式の一般的な記述のお作法に則っていれば、ダブルクオテーションで囲まれているデータと囲まれていないデータが混在していても、問題無くインポート処理してくれます。

試しに、勘定科目のインポートを行ってみました。

ダブルクォーテーションの混在するCSVデータ
ダブルクォーテーションの混在するCSVデータ

CSVデータは"ダブルクォーテーションで囲まれているデータと囲まれていないデータが混在しています。

いずれも、問題無くインポートする事ができました。

CSVのインポート処理は、各アプリケーションに依存する部分があるかもしれませんが、"(ダブルクォーテーション)の処理についてちゃんとサポートしているアプリケーションであれば、混在していても問題無く処理してくれるのではないかと思います。

もし、iDempiereのCSVデータをインポートするアプリケーション側で"(ダブルクォーテーション)のあるorなしの混在が上手く処理できない場合は、しょうがないのでReportEngineクラスのcreateCSVvalue()メソッドをカスタマイズして、強制的に"(ダブルクォーテーション)を付けるなどして頂ければと思います。

参考サイト