8. フロートリガ¶
本章では、 IM-Propagation を利用したフローを実行するトリガを追加する方法を解説します。
IM-Propagation の詳細は「IM-Propagation 仕様書」を参照してください。
トリガを追加するには、以下のクラスを作成する必要があります。
- カテゴリ
- 受信するデータを格納するためのクラス
- データ変換クラス (Decoder)
- データ処理クラス (Procedure)
- マッピング設定
カテゴリは一度作成を行ったら、再利用することが可能です。
注意
ここでは、「IM-Propagationプログラミングガイド」 - 「データを送る側の実装」を用いて送られてきたデータを受信した際にフローを実行するトリガを例に説明を行います。
データの送信側の実装が存在しない場合、トリガ設定を行ってもフローは実行されません。
8.1. カテゴリの作成¶
はじめに、トリガが所属するカテゴリの作成を行います。
カテゴリは全てJavaクラスで作成する必要があります。
カテゴリは jp.co.intra_mart.foundation.logic.trigger.category.TriggerEventCategory インタフェースを実装したカテゴリクラスを作成してください。
package org.example.logicdesigner.trigger; import jp.co.intra_mart.foundation.logic.trigger.category.TriggerEventCategory public class MyTriggerCategory implements TriggerEventCategory { @Override public String getCategoryId() { return "my_trigger_category"; } @Override public String getDisplayName() { return "サンプルカテゴリ"; } @Override public int getSortNumber() { return 100; } }
getCategoryId には、カテゴリのIDとなる文字列を返却するよう実装します。getCategoryIdには、 im_ で始まる文字列は利用できません。 getDisplayName は、画面上に表示されるカテゴリ名を返却するよう実装します。多言語化を行う場合には、MessageManager API等を利用して利用者のロケールに沿ったカテゴリ名を返却するよう実装を行う必要があります。 getSortNumber は、カテゴリを表示する際に利用するソート順です。getSortNumberの値が小さい数ほど先頭に表示されます。
8.2. 受信するデータを格納するためのクラスの作成¶
受信するデータを格納するためのクラス(以下、「独自モデル」)を用意します。
独自モデルについては、「IM-Propagationプログラミングガイド」 - 「受信するデータを格納するためのクラスを作成する」を参照してください。
package org.example.logicdesigner.trigger; public class MyTriggerData { private String resourceId; private String url; public String getResourceId() { return resourceId; } public String getUrl() { return url; } public void setResourceId(String resourceId) { this.resourceId = resourceId; } public void setUrl(String url) { this.url = url; } }
独自モデルのプロパティに利用可能なデータ型は以下の通りです。
- プリミティブ型
- 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.Binary
- jp.co.intra_mart.foundation.service.client.file.Storage
- java.util.Map
- java.lang.Object
上記のデータ型を内包する java.util.Collection インタフェース、または java.util.List インタフェースを利用することが可能です。
Collection、Listを利用した場合には、そのプロパティのゲッタメソッドに @TypeHint アノテーションを付与し、Collection、Listが内包する型を指定する必要があります。
@TypeHint(String.class) public List<String> getListData() { return listData; }
8.3. データ変換クラスの作成¶
次に、「送受信モデル(Generic)」を「独自モデル」に変換する機能を提供するクラス(以下、「データ変換クラス」)を用意します。
データ変換クラスについて、詳しくは「IM-Propagationプログラミングガイド」 - 「受信側のデータ変換クラス(Decoder)を作成する」を参照してください。
package org.example.logicdesigner.trigger; import jp.co.intra_mart.foundation.propagation.exception.ConvertException; import jp.co.intra_mart.foundation.propagation.receiver.AbstractDecoder; public class MyTriggerDecoder extends AbstractDecoder<SampleGenericData, MyTriggerData> { @Override public MyTriggerData decode(final SampleGenericData generic) throws ConvertException { MyTriggerData data = new MyTriggerData(); data.setResourceId(generic.getResourceId()); data.setUrl(generic.getUrl()); return data; } @Override public Class<SampleGenericData> getGenericDataClass() { return SampleGenericData.class; } }
8.4. データ処理クラスの作成¶
次に、メインのクラスとなるデータ処理クラスを実装していきます。
データ処理クラスは、jp.co.intra_mart.system.logic.trigger.propagation.LogicFlowPropagationTrigger クラスを継承して作成してください。
また、データ処理クラスには jp.co.intra_mart.foundation.logic.annotation.TriggerEvent アノテーションを付与する必要があります。 TriggerEventアノテーションが付与されたクラスは起動時にフローを実行するトリガとして読み込まれます。
package org.example.logicdesigner.trigger; import jp.co.intra_mart.foundation.logic.annotation.TriggerEvent; import jp.co.intra_mart.system.logic.trigger.propagation.LogicFlowPropagationTrigger; @TriggerEvent(eventId="my_trigger", category=MyTriggerCategory.class, index=1) public class MyTrigger extends LogicFlowPropagationTrigger<MyTriggerData> { }
- TriggerEvent アノテーションには、そのトリガのID(eventId)、所属するカテゴリ(category)、設定画面に表示する際に利用されるソート番号(index)を指定してください。
- 継承した LogicFlowPropagationTrigger クラスで受信データのマッピングおよびトリガ設定で設定されたフローの実行が行われますので、データ処理クラスでフロー実行の処理を実装する必要はありません。
8.5. マッピング設定の作成¶
次に、ここまで作成した「データ変換クラス」「データ処理クラス」を紐付けるためのマッピング設定を作成します。
詳しくは「IM-Propagationプログラミングガイド」 - 「マッピング設定を作成する」を参照してください。
<?xml version="1.0" encoding="UTF-8"?> <propagation-receivers-config xmlns="http://www.intra-mart.jp/propagation/receivers-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/propagation/receivers-config propagation-receivers-config.xsd"> <receiver source="jp.co.intra_mart.module_name.function_name.propagation.SenderModuleData" operationType="DATA_CREATED"> <decoder class="org.example.logicdesigner.trigger.MyTriggerDecoder"/> <procedure class="org.example.logicdesigner.trigger.MyTrigger"/> </receiver> </propagation-receivers-config>