Help us understand the problem. What is going on with this article?

Yellowfinのカスタムフォーマッターを作って数値のマイナスを△(三角)で表示する

経理関係の資料などでマイナスの数値を「△100,000」のように表記するケースがあります。
Yellowfinでは カスタムフォーマッター を使えばこのような表示を実現することができます。

カスタムフォーマッター等の Yellowfinのプラグイン はJavaで開発します。
今回はEclipse(を日本語化した Pleiades)を用いています。

なお、開発方法はYellowfinのオンラインマニュアルに記載があります。
プラグイン開発の基礎
カスタムフォーマッターの作成
本記事では端折りながら進めていきますので、適宜マニュアルを参照してください。

Javaプロジェクトの作成

新規Javaプロジェクトを作成します。Javaのバージョンは7にせよとマニュアルに書かれているので、JREはjava7を選択しておきます。
image001.png

「次へ」をクリックし、「デフォルト出力フォルダー」を <プロジェクト名>/ROOT/WEB-INF/classes に変更します。
image002.png

プロジェクトを右クリックし、「インポート」を選択します。
image003.png

「ファイル・システム」を選択し、「次へ」をクリックします。
image004.png

<Yellowfinインストールディレクトリ>/appserver/webapps/ROOT に移動します。「ROOT」を選択し、「Open」をクリックします。
image005.png

ROOT配下のすべてを選択し、「拡張」項目で「Create links in workspace(ワークスペース内にリンクを作成)」チェックボックスにチェックを入れます。
image006.png

プロジェクトの構成

プロジェクトを右クリックし、メニューから「ビルド・パス」>「ビルド・パスの構成」を選択します。
image007.png

「ライブラリー」をクリックします。
image008.png

「JARの追加」ボタンをクリックし、検索バーに「i4」と入力します。検索結果から「i4-core.jar」と「i4-mi.jar」を選択します。
image009.png

srcフォルダー配下に、META-INF という名前で新規フォルダーを作成します。そのフォルダー配下に services という名前の新規フォルダーを作成します。
image010.png
image011.png

servicesフォルダー配下に、com.hof.mi.interfaces.CustomFormatter というファイルを作成します。
image012.png
image013.png

作成したファイルに com.company.yellowfin.formatters.SankakuFormatterと記述します。これが作成するカスタムフォーマッターの完全修飾クラス名になります。
image014.png

カスタムフォーマッターの作成

プロジェクトを右クリックし、「新規」>「パッケージ」を選択します。新規パッケージの名前は com.company.yellowfin.formatters とします。(先ほど設定した完全修飾クラス名と合わせます)
image015.png
image016.png

作成したパッケージを右クリックし、「新規」>「ファイル」を選択します。ファイル名は SankakuFormatter.java とします。(こちらも完全修飾クラス名と合わせておきます)
image017.png
image018.png

SankakuFormatter.javaに以下のコードを貼り付けます。

SankakuFormatter.java
package com.company.yellowfin.formatters;
import java.text.NumberFormat;

import com.hof.mi.interfaces.CustomFormatter;

public class SankakuFormatter extends CustomFormatter {
    public String getName() {
            return "三角フォーマッター";
    }
    public boolean acceptsNativeType(int type) {
            // We only handle numeric types
            if (type == TYPE_NUMERIC) return true;
            return false;
    }
    public String render(Object value, int renderType) throws Exception {
            if (value == null) return null;
            if (renderType == RENDER_LINK) {
                  // Return a generic version of the value
                  return value.toString();
            }

    // Create a String representing the value
    NumberFormat nf = NumberFormat.getNumberInstance();
    String mark = "";
    String valStr = value.toString();
    double valNum = Double.parseDouble(valStr);
    double val = valNum;
    if (valNum < 0 ) {
        mark = "△";
        val = Math.abs(val);
        }
    return mark + nf.format(val);
    }
}

image019.png

ちなみに、参考にしたコードの例がオンラインマニュアルにあります。

JARファイルの作成

プロジェクトを右クリックし、「エクスポート」を選択します。
image020.png

「JARファイル」を選択します。
image021.png

.settingsとROOT以外 をすべて選択し、JARファイル名(ここでは SankakuFormatter.jar としました)を指定してエクスポートします。
image022.png

Yellowfinに新規プラグイン追加

Yellowfinのプラグイン管理画面から、作成したJARファイルを新規プラグインとして追加します。
image023.png

Yellowfinレポートでの使用例

今回作成したカスタムフォーマッターは 三角フォーマッター という名前にしています。名前はSankakuFormatter.java内の getName() の箇所で指定しています。
このフォーマッターを使うと、マイナスの数値を「△」の記号付きの書式にすることができます。

例えば以下のような単純なデータがあったとします。
image024.png

この数値に対して、書式で「三角フォーマッター」を指定します。
image025.png

すると、マイナスの数値が三角記号で表示されるようになりました!
image026.png

一見すると記号付きの文字列に改変されたように思えますが、実際は見かけの書式を変更しただけで、データ自体は数値型のままですので、条件付き書式を適用することも可能です。
image027.png
image028.png

おまけ:今回作ったJARファイル

作成したJARファイルをGithubに置いています。よろしければご利用ください!
https://github.com/hadatuna/SankakuFormatter

hadatuna
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした