PEXA Serviceについて

チュートリアル

テストツール

定義ファイル

基本プロセス

拡張プロセス

Condition

セッション

モデル

リファレンス

環境設定

iteratorプロセス概要

繰り返し処理を行うためのプロセスです。
内部にネストしてプロセスを記述することで、内部のプロセスを指定回数分ループして実行できます。

このプロセスは集合(配列、Collection、Portfolio)に格納された処理対象に対して件数分のループ処理を行います。
ループの回数を決めるのは、操作対象の集合内にある要素数となります。

condition指定時の挙動について

iteratorプロセスでは、後述するcontinue_conditionセクションおよび evaluate_conditionセクションでループを制御する条件を指定できます。

上記のconditionは、それぞれプログラミング言語でのループ処理におけるbreakおよびcontinueを行うための条件に当たります。

これらの条件を指定した場合、条件式の評価はループ開始前に行われます。そのため、条件によっては一度もループが行われないまま終了する場合があります。

挙動としては、Java言語等におけるwhileによるループに近いと考えてください。



iteratorフォーマットタイプ書式
(プロセス名
    format_type  iterator
    (iterator
        source宣言部(1)
        iterator_item宣言部(0|1)
        counter宣言部(0|1)
        continue_conditionセクション(0|1)
        evaluate_conditionセクション(0|1)
        evaluate_counter宣言部(0|1)
        processセクション(1)
    )
)

記述注:
    属性        あらかじめ決められた値を選択する(true/falseなど)
    宣言部      値または、値のリストを設定する
    セクション  入れ子で他の属性、宣言部、セクションを保持する可能性がある
                (値又は、値のリストが設定される場合もある)

    (1):必須
    (0|1):オプション
    (1以上):一個以上必須
    (0以上):0個以上(オプション)
source宣言部

概要
ループ処理の対象となる集合(配列、Collection、Portfolio)を指定します。
セッション値を指定して下さい。


iterator_item宣言部

概要
現在のループカウンタにおける処理対象の値の格納セッションキー名を指定します。
ここでセッションキー名を指定しておくと、そのキーでListから取り出された処理対象の要素がServiceSessionにセットされます。

省略時はデフォルトでiterator_itemというセッションキーになります。

注意!
iteratorプロセスを二重三重にネストさせて使用する場合は内部のiteratorはこのキーを必ず宣言して、 それぞれのiteratorプロセス毎に別々のセッションキーを指定するようにして下さい。 そうしないとループ時の処理対象値が同じキーで上書きされてしまい、予期しない動作を引き起こします。


counter宣言部

概要
ループカウンタの格納セッションキー名を指定します。
evaluate_conditionで指定された条件に合致しなかった場合はカウントされません。
そのため、evaluate_counterとの関係は以下のようになります。

  「counter <= evaluate_counter」


continue_conditionセクション

概要
ループを続行するための条件を指定します。
この条件に合致しなかった場合は、ループがその場で終了してiteratorプロセスから抜けることになります。
これは、プログラミング言語でのループにおけるbreakを行うための条件にあたります。

条件式はモデル評価式Session評価式の2通りが指定できます。
モデル評価式を使用する場合は、iterator_itemがデータモデルであることを前提として、そのモデルの内容を評価します。
Session評価式を使用する場合は、iterator_itemおよびそれ以外のSession値に対しての評価を行います。

記述方法は省略形式と詳細形式があります。

省略形式:

;---------------------------------------------------------------
; 省略形式で指定すると、iterator_itemをモデルと見なしてのモデル評価式となる。
; 下記の例だと、iterator_itemのOrderAcceptedFlagという現象型の値で判定。
;---------------------------------------------------------------
(ループ
    format_type    iterator
    (iterator
        source                @検索結果
        continue_condition    "OrderAcceptedFlag = ACCEPTED"
        {process
            :
            :
        }
    )
)
詳細形式(item_filter):
;---------------------------------------------------------------
; 詳細形式でitem_filterと指定すると、明示的にモデル評価式となる。
; この場合は、省略形式と同じ挙動になる。
;---------------------------------------------------------------
(ループ
    format_type    iterator
    (iterator
        source                @検索結果
        (continue_condition
            item_filter    "OrderAcceptedFlag = ACCEPTED"
        )
        {process
            :
            :
        }
    )
)
詳細形式(session_filter):
;---------------------------------------------------------------
; 詳細形式でsession_filterと指定すると、明示的にセッション評価式となる。
; この場合は、iterator_itemにも、それ以外のSession値に対しても評価できる。
;---------------------------------------------------------------
(ループ
    format_type    iterator
    (iterator
        source                @検索結果
        (continue_condition
            session_filter    "@iterator_item/OrderAcceptedFlag = ACCEPTED"
        )
        {process
            :
            :
        }
    )
)


evaluate_conditionセクション

概要
繰り返し対象の評価条件を指定します。
この条件に合致しなかった場合は、その回のループをスキップして次の評価対象に対するループに進みます。iteratorプロセス自体は続行されます。
これは、プログラミング言語でのループにおけるcontinueを行うための条件にあたります。

条件式はモデル評価式Session評価式の2通りが指定できます。
モデル評価式を使用する場合は、iterator_itemがデータモデルであることを前提として、そのモデルの内容を評価します。
Session評価式を使用する場合は、iterator_itemおよびそれ以外のSession値に対しての評価を行います。

記述方法は省略形式と詳細形式があります。

省略形式:

;---------------------------------------------------------------
; 省略形式で指定すると、iterator_itemをモデルと見なしてのモデル評価式となる。
; 下記の例だと、iterator_itemのOrderAcceptedFlagという現象型の値で判定。
;---------------------------------------------------------------
(ループ
    format_type    iterator
    (iterator
        source                @検索結果
        evaluate_condition    "OrderAcceptedFlag = ACCEPTED"
        {process
            :
            :
        }
    )
)
詳細形式(item_filter):
;---------------------------------------------------------------
; 詳細形式でitem_filterと指定すると、明示的にモデル評価式となる。
; この場合は、省略形式と同じ挙動になる。
;---------------------------------------------------------------
(ループ
    format_type    iterator
    (iterator
        source                @検索結果
        (evaluate_condition
            item_filter    "OrderAcceptedFlag = ACCEPTED"
        )
        {process
            :
            :
        }
    )
)
詳細形式(session_filter):
;---------------------------------------------------------------
; 詳細形式でsession_filterと指定すると、明示的にセッション評価式となる。
; この場合は、iterator_itemにも、それ以外のSession値に対しても評価できる。
;---------------------------------------------------------------
(ループ
    format_type    iterator
    (iterator
        source                @検索結果
        (evaluate_condition
            session_filter    "@iterator_item/OrderAcceptedFlag = ACCEPTED"
        )
        {process
            :
            :
        }
    )
)


evaluate_counter宣言部

概要
繰り返し評価回数の格納セッションキーを指定します。
evaluate_conditionで指定された条件式に合致しなかった場合もカウントされます。
そのため、counterとの関係は以下のようになります。

  「evaluate_counter >= counter」


processセクション

概要
繰り返し処理を行うプロセスを記述します。
ネストさせて記述する形になりますので、Service定義ファイルのprocessセクションと同一の書式となります。



記述例

;---------------------------------------------------------
; 複写元のMeisai部の分だけ繰り返し
;---------------------------------------------------------
(複写元の交通費精算書明細の数だけ繰り返す
    format_type iterator
    (iterator
        source  @複写元交通費精算書/交通費精算書明細
        {process
            ;---------------------------------------------------------
            ; Meisai部を複写する
            ;---------------------------------------------------------
            (交通費精算書明細を複写する
                format_type mapping
                (mapping
                    create "force"
                    commit "false"
                    (@複写した交通費精算書明細:交通費精算書明細
                        備考    @iterator_item/備考
                        申請額  @iterator_item/申請額
                        到着地  @iterator_item/到着地
                        出発地  @iterator_item/出発地
                        行き先  @iterator_item/行き先
                        行番号  @iterator_item/行番号
                        往復種別    @iterator_item/往復種別
                        乗り物種別  @iterator_item/乗り物種別
                        領収書番号  @iterator_item/領収書番号
                        使用日  @iterator_item/使用日
                    )
                )
            )
            ;---------------------------------------------------------
            ; 複写したMeisai部を複写先のSheet部に設定する
            ;---------------------------------------------------------
            (複写した交通費精算書明細を交通費精算書に追加する
                format_type mapping
                (mapping
                    create "false"
                    commit "false"
                    (@複写先交通費精算書
                        交通費精算書明細    @複写した交通費精算書明細
                    )
                )
            )
        }
    )
)


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2010-04-13 11:51:29 #$
  • バージョン : $Revision: 4973 $



Copyright © 2006, Atrris Corporation