intra-mart Accel Platform IM-LogicDesigner拡張プログラミングガイド 第3版 2016-12-01

5. マッピング関数

本章では、 IM-LogicDesigner の持つマッピング機能で利用可能なマッピング関数の定義方法について解説します。

5.1. マッピング関数の引数と戻り値

マッピング関数で利用可能な引数と戻り値は以下の通りです。

  • プリミティブ型
  • java.lang.String
  • java.lang.Boolean
  • java.lang.Byte
  • java.lang.Character
  • java.lang.Short
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Float
  • java.lang.Double
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.util.Calendar
  • java.util.Date
  • java.util.Locale
  • java.util.TimeZone
  • jp.co.intra_mart.foundation.i18n.datetime.DateTime
  • jp.co.intra_mart.foundation.i18n.datetime.Duration
  • java.sql.Date
  • java.sql.Timestamp
  • jp.co.intra_mart.foundation.logic.data.basic.ByteArrayBinary
  • jp.co.intra_mart.foundation.logic.data.basic.InputStreamBinary
  • jp.co.intra_mart.foundation.service.client.file.PublicStorage
  • jp.co.intra_mart.foundation.service.client.file.SessionScopeStorage
  • java.util.Mapを実装するクラス java.util.HashMap等
上記のデータ型を内包する java.util.Collection インタフェースまたは、java.util.List インタフェースの実装クラス(ArrayList, LinkedList等)を利用することが可能です。

マッピング関数の引数、戻り値と関連付けられているデータ型が一致していない場合には自動的にデータ型の変換が行われた後、マッピング関数が呼びだされます。
マッピング関数の引数、戻り値が配列/リスト形式であり、関連付けられているデータ型が配列/リスト形式でない場合には自動的に変換が行われます。
変換の詳細に関しては IM-LogicDesigner 仕様書、マッピングの章を参照してください。

5.2. マッピング関数カテゴリの作成

マッピング関数には、その関数の所属するカテゴリが存在します。
カテゴリを作成するには、 jp.co.intra_mart.foundation.logic.data.mapping.function.MappingFunctionCategory インタフェースを実装したカテゴリクラスを作成する必要があります。
package org.example.logicdesigner.data;

import jp.co.intra_mart.foundation.logic.data.mapping.function.MappingFunctionCategory;

public class MyFunctionCategory implements MappingFunctionCategory {

    @Override
    public String getCategoryId() {
        return "my_func_category";
    }

    @Override
    public String getDisplayName() {
        return "サンプルカテゴリ";
    }

    @Override
    public int getSortNumber() {
        return 100;
    }
}
  • getCategoryId では、一意となるカテゴリIDを返却するよう実装してください。
    getCategoryIdには、 im_ で始まるIDは利用できません。
  • getDisplayName は、画面上に表示されるカテゴリ名として利用されます。
    多言語化を行う場合には、MessageManager API等を利用して利用者のロケールに沿ったカテゴリ名を返却するよう実装を行う必要があります。
  • getSortNumber は、画面上に表示する際に利用されるソート番号です。標準で提供されるカテゴリは10, 20, 30...と連番で指定が行われています。

5.3. マッピング関数の作成

マッピング関数を作成するには、 jp.co.intra_mart.foundation.logic.data.mapping.Function インタフェースを実装する必要があります。
実装を容易にするための jp.co.intra_mart.system.logic.data.mapping.function.AbstractFunction クラスが用意されています。
マッピング関数として起動時に検出対象となるよう、 jp.co.intra_mart.foundation.logic.annotation.MappingFunction アノテーションをクラスに指定してください。
作成したマッピング関数は、アノテーションを付与することにより起動時に自動的に検出、登録が行われます。その為設定ファイルは不要です。
マッピング関数は、フロー定義に含まれるマッピング毎にインスタンスが作成されます。マッピング関数はスレッドセーフとなるよう実装する必要があります。
package org.example.logicdesigner.data;

import java.math.BigDecimal;

import jp.co.intra_mart.foundation.logic.annotation.MappingFunction;
import jp.co.intra_mart.foundation.logic.data.mapping.MappingContext;
import jp.co.intra_mart.foundation.logic.exception.FunctionInvocationException;
import jp.co.intra_mart.system.logic.data.mapping.StandardArgumentType;
import jp.co.intra_mart.system.logic.data.mapping.StandardReturnType;
import jp.co.intra_mart.system.logic.data.mapping.function.AbstractFunction;

@MappingFunction(category = MyFunctionCategory.class, index = 100)
public class MyFunction extends AbstractFunction {

    private static final long serialVersionUID = -1;

    @Override
    public String getId() {
        return "my_tax_function";
    }

    @Override
    public String getName() {
        return "tax";
    }

    @Override
    public String getDescriptionMessageKey() {
        return "MESSAGE.ID";
    }

    @Override
    protected void initialize() {
        addArgumentType(StandardArgumentType.BIGDECIMAL);
        addArgumentType(StandardArgumentType.BIGDECIMAL, "scale");
        setReturnType(StandardReturnType.BIGDECIMAL);
    }

    @Override
    public Object execute(MappingContext context, Object... arguments) throws FunctionInvocationException {
        BigDecimal argument = (BigDecimal) arguments[0];
        return argument.multiply(new BigDecimal("1.08"));
    }
}
  • @MappingFunction アノテーションでは、カテゴリと、カテゴリ内で利用されるソート番号を指定しています。

  • getId には、一意となるマッピング関数のIDを返却するよう実装してください。
    getIdには、 im_ で始まるIDは利用できません。
  • getName では、画面上に表示する際に利用されるマッピング関数名を返却するよう実装します。関数名は全て英数字を指定してください。

  • getDescriptionMessageKey では、マッピング関数を画面上に配置した際に表示する説明を示すメッセージキーを返却するよう実装します。実装は任意です。

  • initialize は、マッピング関数初期化時に呼び出されます。ここでは、引数および戻り値のデータ型を指定してください。

  • execute は実際にマッピング関数が呼び出された際に実行されます。

  • execute に渡される引数 MappingContext には、フロー実行中の変数等が格納されています。