動機
標準のCSVダウンロード機能を利用しつつ、出力するCSVの内容を編集したかった。
サポートのページになかったので調べた内容を記載する。
Wagbyのバージョン
8.2.0
やりたいこと
- CSVのヘッダー行を出力しないようにしたい。
- 出力する各カラムの内容を修正(整形)したい。
CSVのヘッダー行を出力しないようにする
前段
Wagbyで作成するアプリケーション上で行うことはあまり推奨されていないらしい。
別途ETLツールとかを使って加工できるならそっちのほうが楽かもしれない。
Wagbyで作成するアプリケーション上で行う場合
自動生成されるJavaを継承したクラスを作成し、CSV出力メソッドの内容を変更する必要がある。
継承するクラス:Downloadモデル名ProcessBean
public Object outputAllData(DbDownloadProcessor out, Map paramMap, boolean getallmodelitem) {
...
// Output header line
Collection<String> targetitems =
(Collection<String>) getParameter("targetitems");
String[] _data = ((jp.jasminesoft.wagby.app.test.TestPCSVHelper)p.appctx.getBean("TestPCSVHelper")).toCsvDataHeader(null, colMap, (ActionParameter)p, getallmodelitem, targetitems);
out.write(_data);
...
}
上記メソッドをオーバーライドして記述してあるヘッダー出力処理を削除したメソッドを作成することでヘッダーなしのCSVが作成できる。
この処理はWagbyバージョンアップ時に変更される可能性があるため、バージョンアップしたときは継承元の処理が変わっていないか確認したほうが良い。
出力する各カラムの内容を修正(整形)する
サポートページで紹介されていないため、標準のカスタムポイントではないようだが、各行を読み込んで出力するタイミングで呼ばれるjavascriptがあり、そこで内容を編集することが可能。
javascript名:モデル名 + Helper_beforeShowInDownload.js
/**
* Javaから呼ばれるメソッド
*/
function process() {
// ストアモデルの内容を書き換えられる
test.id = "hoge";
}
なおこの時CSVに出力するカラムだけでなく、ストアモデルにはモデルの1レコードすべてが格納されている。