1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WagbyのCSVダウンロード機能で出力内容をカスタマイズする

Posted at

動機

標準のCSVダウンロード機能を利用しつつ、出力するCSVの内容を編集したかった。

サポートのページになかったので調べた内容を記載する。

Wagbyのバージョン

8.2.0

やりたいこと

  • CSVのヘッダー行を出力しないようにしたい。
  • 出力する各カラムの内容を修正(整形)したい。

CSVのヘッダー行を出力しないようにする

前段

Wagbyで作成するアプリケーション上で行うことはあまり推奨されていないらしい。
別途ETLツールとかを使って加工できるならそっちのほうが楽かもしれない。

Wagbyで作成するアプリケーション上で行う場合

自動生成されるJavaを継承したクラスを作成し、CSV出力メソッドの内容を変更する必要がある。

継承するクラス:Downloadモデル名ProcessBean

DownloadTestProcessBean.java
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

TestHelper_beforeShowInDownload.js
/**
 * Javaから呼ばれるメソッド
 */
function process() {
    // ストアモデルの内容を書き換えられる
    test.id = "hoge";
}

なおこの時CSVに出力するカラムだけでなく、ストアモデルにはモデルの1レコードすべてが格納されている。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?