intra-mart Accel Platform IM-LogicDesigner仕様書 第13版 2019-08-01

4.1. ロジックフロー

ロジックフローの構成要素と、動作仕様について説明します。

4.1.1. バージョニング(履歴管理)

IM-LogicDesignerでは、ロジックフローのバージョニング(履歴管理)を行います。

4.1.1.1. バージョン番号

バージョンにはバージョン番号が定義されます。
バージョン番号は、整数値の1から順に1つずつインクリメントして割り振られます。

コラム

バージョン番号の追加先

新しいバージョン番号は、常に最も新しいバージョンの番号を基準に割り振られます。
バージョンの削除処理によって途中の番号が抜けた状態であっても、抜けた部分を埋めるようなバージョン番号の割り振りは行われません。
バージョン番号はロジックフローの履歴管理の他に、「フロールーティング」において対象フローのバージョンを明示的に指定するために利用されます。

注意

制御要素「フロー呼び出し」について

フロー呼び出しで指定したロジックフローは、対象フローが持つバージョンに関わらず最新のバージョンが利用されます。
そのため、バージョン間でロジックフローの入力値/出力値の情報が変わった場合、「フロー呼び出し」を利用しているフローにも影響が出ることに注意してください。

4.1.1.2. バージョンの持つ情報

各バージョンは、ロジックフローの持つ全ての情報を保持します。
バージョンが扱う情報の具体例は以下の通りです。
  • ロジックフロー図
  • ロジックフロー名/カテゴリ
  • プロパティ
  • マッピング
  • フローの入出力値
  • 定数値

注意

期間化情報について

ロジックフローのバージョンでは、期間化の情報は持ちません。

4.1.1.3. バージョン削除

バージョンの削除には、論理削除が利用されます。
ただし、ロジックフローの持つ全てのバージョンが論理削除された場合に限り、論理削除されていたバージョン全てが物理削除されます。

4.1.2. 国際化

IM-LogicDesignerでは、ロジックフローの名称の国際化に対応しています。

4.1.2.1. 標準表示名

ロジックフローの名称は、各ロケール用(日本語、英語、中国語)の表示名と標準表示名を持ちます。
原則としてIM-LogicDesignerでは、ユーザのロケールに合わせた表示名を利用します。
対象のユーザのロケールに合致する表示名が定義されていない場合、IM-LogicDesignerはその代替として標準表示名を利用します。

コラム

ロケールの決定

表示名に利用されるロケールの決定の詳細は、「アクセスコンテキスト仕様書」 - 「アカウントコンテキスト」- 「プロパティの解決順序」のロケールの項を参照してください。

4.1.3. フローカテゴリ

フローカテゴリは、ロジックフローの利用用途や適用範囲を分類するための情報です。
IM-LogicDesignerはロジックフローの管理・分類するための情報としてフローカテゴリを利用します。
フローカテゴリは自身を一意に表すIDと、国際化に対応したカテゴリ名で構成されます。

4.1.3.1. バージョンとカテゴリ

フローカテゴリはロジックフローと1:1で紐付きます。
ロジックフローが複数のバージョンを持っている場合でも、フローカテゴリは全てのバージョンで同じカテゴリが定義されます。
例えば、これまでのバージョンで”カテゴリA”を指定しており、最新のバージョンで”カテゴリA”の代わりに”カテゴリB”を指定した場合、過去のバージョンのカテゴリも全て”カテゴリB”に更新されます。

4.1.3.2. カテゴリの削除

フローカテゴリの削除には、物理削除が利用されます。
またフローカテゴリは、そのカテゴリに属するロジックフローが無い場合のみ削除可能です。

4.1.4. 制御要素

  • 開始

    フローの開始地点を表す制御要素です。
    フローは必ずこの要素で開始する必要があります。
    また、1つのフローに配置できる開始要素は1つのみです。
  • 終了

    フローの終了地点を表す制御要素です。
    フローはこの要素かエラー終了で終了する必要があります。
  • エラー終了

    フローが異常終了したことを表す要素です。
    処理がこの要素に到達した場合、ErrorEndEventException がスローされます。
  • 分岐

    任意の条件で処理を分岐させる制御要素です。
    指定された条件が満たされた場合は then のルートの処理が実行されます。満たされていない場合は else のルートの処理が実行されます。
    分岐条件は EL式で記述します。 EL式の記述方法は「EL式」を参照してください。
  • 繰り返し

    処理の繰り返しを行う制御要素です。
    指定された繰り返し回数または繰り返し対象の配列数分、処理を繰り返します。
    ただし、繰り返し条件が指定されている場合は条件を満たしている間のみ繰り返しを行います。
    繰り返し条件はEL式で記述します。EL式の記述方法は「EL式」を参照してください。

    コラム

    繰り返し対象の取得

    繰り返し処理中の該当要素および該当要素番号はセッション内で保持されます。
    EL式で該当要素を指定する場合は「 ${繰り返し開始要素のエイリアス.item} 」を指定してください。
    また、 該当要素番号を指定する場合は「 ${繰り返し開始要素のエイリアス.index} 」を指定してください。
  • フロー呼び出し

    任意のフローを呼び出す制御要素です。
    フロー内から別のフローを呼び出します。呼び出されたフローにはフロー呼び出し制御要素の入力パラメータが受け渡されます。
    呼び出されたフロー内で、呼び出し元フローのパラメータ(定数や各タスクの実行結果)を直接参照することはできません。
  • 変数操作

    フローに定義した変数に対して、値の代入操作を行う制御要素です。
    変数の初期化や、他のタスクから取得した値を変数に格納する際にこの制御要素を利用します。

4.1.5. タスク

  • 汎用タスク

    メールの送信、ログ出力といった汎用的な処理を行うタスクです。
    各タスクの詳しい説明は「汎用タスク」を参照してください。
  • ストレージ操作

    intra-mart Accel Platform のStorage サービスAPIを利用してファイルの操作を行うタスクです。
    各タスクの詳しい説明は「ストレージ操作」を参照してください。
  • 基盤機能

    intra-mart Accel Platform の基盤機能を利用した処理を行うタスクです。
    各タスクの詳しい説明は「基盤機能」を参照してください。
  • IMBox

    IMBox の各ボックスへメッセージを投稿するタスクです。
    各タスクの詳しい説明は「IMBox」を参照してください。

    注意

    このタスクを利用する場合は「IMBox」モジュールを含む環境を構築する必要があります。
  • Office365

    Office 365のSharePointのファイルサービスを扱うタスクです。
    各タスクの詳しい説明は「Office365」を参照してください。

    注意

    このタスクを利用する場合は「Office 365 連携」モジュールを含む環境を構築する必要があります。

4.1.5.1. 入出力値

各タスクでは入力値として必要となる値と実行結果として返却される値のデータ型が決まっています。
各タスクの入出力値のデータ型については「タスク一覧」を参照してください。

4.1.5.2. エイリアス

各エレメントにはエイリアス(別名)を付けることができます。また、複数のエレメントに対して同じエイリアスを付けることができます。

複数のエレメントに同じエイリアスを付けておくことで、実行されたタスクの処理結果を後続のタスクにマッピングできます。
例えば、分岐処理を含むフローで分岐内で実行されたタスクの実行結果を分岐結合後のタスクにマッピングしたい場合に使用します。
../../../_images/alias.png

図: エイリアス設定例

注意

同じエイリアスを指定するエレメントの戻り値の型が異なる場合、正しくマッピングが行われずエラーが発生する可能性があります。
そのため、タスクの戻り値の型が同じエレメントのみ同じエイリアスを指定するようにしてください。

4.1.6. 処理フロー

ロジックフローの実行はロジックセッションを生成して行われます。
ロジックセッションはフローの制御やタスクの処理といった一連の処理を行う処理単位です。実行するフロー単位で生成されます。
フロー呼び出しタスクで呼び出されたフローは呼び出し元とは別のセッションで実行されます。

フロー実行時には以下の流れで処理が実行されます。
  1. セッションの生成を行います。

    セッションの生成時にユーザ定義定数やシステム定数といった定数値が設定されます。
    それぞれの値が設定される変数名については「利用可能な暗黙的な変数」を参照してください。
  2. 実行時に引数に渡された入力値をセッションに設定します。

    入力値をセッション内に保持します。
    入力値が設定される変数名については「利用可能な暗黙的な変数」を参照してください。
  3. トランザクションの制御

    トランザクションの使用が有効かつ呼び出し元でトランザクションが開始されていない場合、トランザクションを開始します。
    トランザクションの使用が無効になっているか、呼び出し元でトランザクションが開始されている場合は処理をスキップします。
  4. 開始要素の取得

    フロー定義情報から開始要素を取得します。
  5. 次の要素の取得

    開始要素の次に実行される要素を取得します。
    • 次の要素が分岐要素の場合

      分岐条件の評価を行い、次に実行される要素の取得を行います。
    • 次の要素が繰り返し開始要素の場合

      繰り返し対象を取得し、繰り返しを行う場合は次に実行される要素の取得を行います。
      繰り返しを終了する場合はペアになっている繰り返し終了要素の次に実行される要素の取得を行います。
    • 次の要素が繰り返し終了要素の場合

      ペアになっている繰り返し開始要素へ戻ります。
  6. タスクの実行を行います。

    1. タスクのインスタンスを取得します。

      • セッション内にタスクのインスタンスが存在する場合は、そのインスタンスを取得します。
      • セッション内にインスタンスが存在しない場合は、新しいインスタンスを生成しプロパティの値を設定します。
    2. タスクのマッピング定義情報、セッション情報を元にマッピングを実行し入力データを生成します。

    3. 生成した入力データを引数に受け渡し、タスクを実行します。

    4. タスクの処理が終了後、エイリアスをキーにして戻り値をセッションに設定します。

      処理が終了したタスクのインスタンスはセッション内で保持され、繰り返しや分岐で再度同じタスクが呼び出された際に再利用されます。
  7. 終了要素またはエラー終了要素に到達するまで、次の要素の取得とタスクの実行が繰り返されます。

  8. 終了処理を実行します。

    • 終了要素に到達した場合

      1. 終了要素のマッピング定義情報、セッション情報を元にマッピングを実行し出力データを生成します。
      2. フロー内でトランザクションを開始していた場合はトランザクションをコミットします。
      3. 各要素の終了処理を呼び出します。
      4. 生成した出力データを返却します。
    • エラー要素に到達した場合

      1. フロー内でトランザクションを開始していた場合はトランザクションをロールバックします。
      2. 各要素の終了処理を呼び出します。
      3. ErrorEndEventException をスローします。

コラム

永久ループの検出

セッション内で各要素が実行される際に実行回数のカウントを行っています。
標準では、同じ要素が100回以上呼び出される場合、永久ループが発生している可能性があると判断して例外をスローします。

繰り返し処理内の要素については繰り返し終了要素に到達した時点でカウンタを初期化するため、100回を超える繰り返し処理を行ってもエラーになることはありません。

4.1.6.1. 入出力設定

フロー定義では、フロー実行時に受け渡される値(入力値)とフローの実行結果として返却される値(出力値)のデータ型を定義する必要があります。
この定義情報はデータマッピングを行う際に利用されます。
実際の入力データと設定されたデータ型が異なる場合、マッピング時にエラーが発生する可能性があるので注意してください。

4.1.6.2. トランザクション制御

セッション内でトランザクションを使用するかどうかはフロー設定で指定できます。
フロー設定「トランザクションを使用する」にチェックを入れた場合、フローの実行直後にトランザクションが開始され、すべてのタスクの処理が終わった際にトランザションがコミットされます。

フローの呼び出し元でトランザクションが既に有効になっている場合はフロー内でトランザクション制御を行わず、呼び出し元のトランザクション制御に依存します。

注意

デバッグ機能でのトランザクション制御

ロジックフローのデバッグ機能において、ステップ実行やブレイクポイントを使用して、途中のエレメントで処理を一時停止できます。
処理を一時停止した場合、トランザクションが使用されている場合でも、それまでのトランザクションはコミットされます。
従って、途中まで実行されたエレメントが行った変更は、元に戻りませんので注意してください。

4.1.7. データ

4.1.7.1. データ型

IM-LogicDesigner では以下のデータ型が利用可能です。

型名 タイプID 説明
String string 文字列
Boolean boolean 真偽値
Byte byte 1バイト整数(-128~127)
Character character 2バイト文字データ(u0000~uffff)
Short short 2バイト整数(-32768~32767)
Integer integer 4バイト整数(-2147483648~2147483647)
Long long 8バイト整数(-9223372036854775808~9223372036854775807)
Float float 4バイト単精度浮動小数点数
Double double 8バイト倍精度浮動小数点数
BigDecimal bigdecimal 任意精度の符号付き小数
BigInteger biginteger 任意精度の符号付き整数
Calendar calendar 日付操作用カレンダ
Date date 日付
Locale locale ロケール
TimeZone timezone タイムゾーン
IM DateTime imdatetime 日付
IM Duration imduration 期間
SQL Date sqldate java.sql.Dateに該当する日付型
SQL Timestamp sqltimestamp java.sql.Timestampに該当する日付型
Binary binary バイナリデータ
Storage storage intra-mart Accel Platform 上で利用可能なStorageを表現した型
Map map java.util.Mapに相当する型
Any any 不明な型

4.1.7.1.1. 構造体

標準型以外に、構造体として扱われる型があります。
構造体として扱われる型はobject型と表現されます。
また、構造体として扱われる型は配下に任意のプロパティを持つことが可能です。

4.1.7.1.2. 配列およびリスト

全ての型は、配列/リストとして複数の値を扱うことが可能です。

注意

配列/リストについて

IM-LogicDesigner では多次元配列は利用できません。

4.1.7.1.3. Map型およびそのキー

Map型は、全て文字列をキーとして扱います。
キーに対応したバリューは不明な型(Any)として扱われます。
Map型が更に構造体、またはMapを内包する事はできません。

4.1.7.2. ユーザ定義定数値

ロジックフロー定義内で共通的に利用可能な定数値を定義することが可能です。
ユーザ定義定数値はロジックフロー内のどこからでも参照が可能です。
定数値は全て文字列として扱われます。

4.1.7.3. システム定数値

システムが提供する定数値です。
システム定数値は、ロジックフロー内のどこからでも参照が可能です。
  • アカウントコンテキスト
  • ユーザコンテキスト
  • セッション情報

4.1.8. マッピング

4.1.8.1. マッピングルール

マッピングルールとは、マッピングを行う際に指定するマッピング元とマッピング先を繋ぐ線を指します。
タスクの呼び出しを行う前にマッピングを行いますが、マッピングは複数のマッピングルールを束ねたものとして扱います。
マッピングルールは一つのマッピングルールに対しマッピング元が複数存在する可能性があります。
複数のマッピング元が存在する条件として、マッピング関数が利用された場合が挙げられます。
また、マッピング関数が引数を受け付けない関数であった場合には、マッピング元は存在しません。
マッピングルールにおけるマッピング先は必ず一つです。

4.1.8.2. マッピングの流れ

マッピングは、以下の流れで実行されます。
  1. マッピングルールを以下の条件でソートします。

    マッピング元が複数存在する場合、マッピング元に含まれる配列/リストの要素数が一番多いマッピング元をソート条件に利用します。
    マッピング元が存在しない場合には、含まれる配列/リスト要素数を0として扱います。
    マッピング元に含まれる配列/リスト要素数が多い順にソートを行います。
    配列/リストの要素数が同じ数である場合には、マッピング元の階層が浅い順にソートが行われます。
  2. ソートした順序でマッピングルールを適用します。

    1. マッピング元と、マッピング先に含まれる配列/リスト要素の数を取り出します。

      マッピング元、マッピング先に含まれる配列/リスト要素の数が一致しない場合には要素番号0が利用されます。

    2. マッピング元の値を取り出します。

      マッピング元となる値を取り出します。
      以降、階層中に配列/リストが含まれている場合には要素数分値の取り出し、ルールの適用を行います。
      配列/リスト要素は、階層が深い順に要素番号をインクリメントしながら取り出しが行われます。
    3. マッピング先に配列/リストが含まれている場合、それぞれの要素番号を決定します。

      マッピング元の配列/リスト要素の数が、マッピング先の配列/リスト要素よりも多い場合には、マッピング元の配列/リスト要素の階層が深い順にマッピング先の配列/リスト要素の要素番号として扱われます。
      マッピング元の配列/リスト要素の数より、マッピング先の配列/リスト要素が多い場合には、マッピング元の配列/リスト要素の階層が深い順にマッピング先の配列/リスト要素の要素番号を決定し、不足分となる配列/リスト要素の要素番号は全て0を利用します。
    4. マッピング元にマッピング関数が含まれている場合、マッピング関数の実行を行います。

      マッピング関数の引数の確認を行い、マッピング関数の引数が更にマッピング関数の結果であった場合には再帰的にマッピング関数の実行を行います。
      マッピング関数の引数のデータ型と、マッピング関数が受け付けるデータ型を比較し、変換を行います。
      マッピング関数の実行結果を以降のマッピング元の値として利用します。
    5. マッピング元のデータ型とマッピング先のデータ型を比較し、変換を行います。

      マッピング元とマッピング先のデータ型が一致した場合には変換は行いません。
      マッピング元とマッピング先のデータ型が一致している場合、マッピングは参照渡しで行われます。
      マッピング元とマッピング先のデータ型が一致していない場合、データ型の変換が行われます。データ型の変換に関しては、後述する「データ型」の変換を参照してください。
      マッピング元、マッピング先どちらかが配列/リスト要素であり、対になるデータが配列/リスト要素ではない場合には、配列の要素番号0が利用され変換が行われます。
    6. マッピング元の値をマッピング先の値に反映させます。

      1. マッピング元の階層構造に配列/リスト要素が含まれず、マッピング先に配列要素が含まれている場合、かつ、マッピング先の値が存在する場合

        マッピング先に配列/リストが含まれている場合、かつマッピング元に配列/リストが含まれていない場合には、マッピング元の値をマッピング先の配列/リスト要素全てに適用します。
      2. 上記以外の場合

        マッピング元の値をマッピング先に反映します。
        マッピング先の階層要素の上位オブジェクトの値が存在しない場合には、上位オブジェクトの生成が行われます。
        マッピング先の階層要素に含まれる配列/リスト要素の要素数が不足している場合には、配列/リスト要素の追加が行われます。
        マッピングルールの定義に何らかの不備があり、マッピング先の階層情報の取得が行えなかった場合には、値の反映は行われません。
    7. マッピングルールの適用を繰り返します。

      マッピング元の階層に配列/リスト要素が含まれている場合、要素番号をインクリメントしマッピングルールの適用を継続します。
      マッピング元の階層に配列/リスト要素が含まれていない、または配列/リスト要素を全て適用した場合にはマッピングルールの適用を終了します。

注意

Map型同士等、同じデータ型を持つ構造体をマッピングした場合、その値は全て参照渡しで行われます。
そのため、Map型同士をマッピングした後、Map型のキー値をマッピングした場合にはマッピング元の値に対しても変更が行われます。
マッピングルールの適用順序として、マッピング元の階層が浅い順にマッピングルールの適用が行われるため、Map型同士を接続、および、Map型のキー同士を接続した場合に発生します。

コラム

ロジックフローにおけるマッピングのデバッグ機能では、使用可能な入出力値を決定するために、ロジックフローと、マッピングを行っているタスクの情報を使用します。

4.1.8.3. データ型の変換

マッピングにおいて、異なるデータ型のマッピングはデータ型の変換が行われます。
データ型の変換における対応表は、「IM-LogicDesigner データ型変換 仕様書」を参照してください。

4.1.9. ジョブ

IM-LogicDesignerは、ジョブスケジューラを利用してロジックフローを実行するためのジョブクラスを持ちます。

4.1.9.1. ジョブクラス

ロジックフローを実行するジョブクラスは以下の通りです。
jp.co.intra_mart.foundation.logic.job.LogicFlowExecutorJob

コラム

ジョブスケジューラでの利用

IM-LogicDesignerでは標準で、ジョブクラスを利用してロジックフローを実行する「フロー実行」ジョブを提供しています。

4.1.9.2. パラメータ

ジョブクラスは以下のパラメータが設定可能です。
パラメータ キー名 必須/任意 説明
フローID flow_id 必須 ジョブクラスを利用して実行するロジックフローのフローIDを指定します。
ロジックフローの入力値 (実行するフローにより可変) 任意
実行するロジックフローの入力値を指定します。
キー名は、実行するロジックフローが要求する入力値名を指定してください。

注意

パラメータを利用した入力値指定時の注意点

パラメータにロジックフローの入力値を指定する場合、以下の点に注意してください。
  • 入力値は全て文字列(String型)として解釈されます。
    実行するロジックフローの入力値が文字列以外の場合、動作は保証されません。
  • パラメータは階層化されていない入力値のみ指定可能です。
    構造体」、および、配下の値はパラメータを利用して入力値として指定することはできません。