iDempiereのレポートからCSV形式でダウンロードしてみると、ダブルクォーテーションで囲まれているデータと囲まれていないデータがある事に気が付きます。
そのダブルクォーテーションで囲まれるデータと囲まれていないデータの違いについて調査及び研究し、その成果をまとめています。
ソースコード
CSVのデータにダブルクオテーションを付ける処理は、ReportEngineクラスのcreateCSVvalue()メソッドで行われています。
このロジックでは、delimiterという変数に格納されている",(カンマ)"と、Character.isLetterOrDigit()メソッドで"false"が返された場合に、"(ダブルクオテーション)が付けられている事が分かります。
Character.isLetterOrDigit()メソッドは、Java Doc上では「指定された文字が汎用文字または数字かどうかを判定します。」と説明されています。
つまり、汎用文字か数字以外の文字がダウンロードするデータに含まれている場合、"(ダブルクオテーション)が付けられるようになっています。
具体的に言うと、"-(ハイフン)"や"_(アンダーバー)"、"/(スラッシュ)"などが含まれていると、"(ダブルクオテーション)が付けられるようになっています。
ダブルクォーテ―ションで囲まれているデータと囲まれていないデータの混在しているCSVについて
iDempiereのCSVダウンロードの仕様だと、ダブルクオテーションで囲まれているデータと囲まれていないデータが混在する事になります。
この事に少し気持ち悪さを感じるかもしれませんが、iDempiereのインポート処理としては、CSV形式の一般的な記述のお作法に則っていれば、ダブルクオテーションで囲まれているデータと囲まれていないデータが混在していても、問題無くインポート処理してくれます。
試しに、勘定科目のインポートを行ってみました。
CSVデータは"ダブルクォーテーションで囲まれているデータと囲まれていないデータが混在しています。
いずれも、問題無くインポートする事ができました。
CSVのインポート処理は、各アプリケーションに依存する部分があるかもしれませんが、"(ダブルクォーテーション)の処理についてちゃんとサポートしているアプリケーションであれば、混在していても問題無く処理してくれるのではないかと思います。
もし、iDempiereのCSVデータをインポートするアプリケーション側で"(ダブルクォーテーション)のあるorなしの混在が上手く処理できない場合は、しょうがないのでReportEngineクラスのcreateCSVvalue()メソッドをカスタマイズして、強制的に"(ダブルクォーテーション)を付けるなどして頂ければと思います。