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等
5.2. マッピング関数カテゴリの作成¶
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. マッピング関数の作成¶
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 には、フロー実行中の変数等が格納されています。