PEXA Serviceについて

チュートリアル

テストツール

定義ファイル

基本プロセス

拡張プロセス

Condition

セッション

モデル

リファレンス

環境設定

loopプロセス概要

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

このプロセスは、プログラミング言語的に言うとforループ的な挙動をとるループ処理を行います。
そのため、ループパラメータを指定して、それに対してループを行う毎に更新を行いつつ判定を行って処理を続行するかを判断します。

なお、無限ループに陥ることを極力避けるため、ループパラメータの省略や、更新時の型違いなどを許していません。
そのため、条件のみの指定といったwhile的な挙動はできないようになっています。

condition指定時の挙動について

loopプロセスでは、後述するloop_condition宣言部でループを制御する条件を指定します。

loop_conditionでは、ループを続行する条件を指定します。この条件式の評価はループの最初に行われます。
挙動としては、Java言語等におけるforによるループと考えてください。



loopフォーマットタイプ書式
(プロセス名
    format_type  loop
    (loop
        session_value宣言部(1)
        initial宣言部(1)
        update宣言部(1)
        loop_condition宣言部(1)
        counter宣言部(0|1)
        processセクション(1)
    )
)

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

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

概要
ループパラメータの格納セッションキー名を指定します。
initial宣言部およびupdate宣言部で指定された値がこのセッションキーで格納されます。


initial宣言部

概要
ループパラメータの初期値をSession値やDirectiveで指定します。
ここで指定された初期値が、初回のループ時にsession_value宣言部で指定されたキーに格納されます。

この値がnullだった場合はエラーとなります。


update宣言部

概要
ループパラメータの更新値をSession値やDirectiveで指定します。
ここで指定された値が、ループが実行される毎にsession_value宣言部で指定されたキーに格納されます。

この値が以下の条件に当たる場合は、正常にループを続行できない物と見なしてエラーとなります。

  • update値がnullの場合
  • 前回ループ時のsession_value値と違う型になっている場合
  • 旋回ループ時のseesion_value値から変化がない場合


loop_condition宣言部

概要
ループを続行するための条件を指定します。
この条件に合致しなかった場合は、ループがその場で終了してloopプロセスから抜けることになります。
この条件の判定は、ループの最初に行われます。プログラミング言語でのforループにおける条件に該当すると考えてください。

条件式はSession評価式で指定できます。
session_valueで指定されたループパラメータに対しての判定をこの条件式で行ってください。


counter宣言部

概要
ループカウンタの格納セッションキー名を指定します。
ループが実行された回数がjava.lang.Integerでこのセッションキーに格納されます。


processセクション

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



記述例

;----------------------------------------------------------------------
; 今週の開始日から終了日までの間の予定一覧を検索する
;
; 今週の開始日 = initial = &FirstDateOfWeek:{&Today}
; 一日毎に増分 = update = &AddDay:{@BasisDate}
; ループ条件 = loop_condition = "@BasisDate < &FirstDateOfNextWeek:{&Today}"
;----------------------------------------------------------------------
(今週一週間の分検索を行う
    format_type    loop
    (loop
        session_value    BasisDate
        initial          &FirstDateOfWeek:{&Today}
        update           &AddDay:{@BasisDate}
        loop_condition   "@BasisDate < &FirstDateOfNextWeek:{&Today}"
        counter          繰り返し回数
        {process
            ;--------------------------------------------------------------
            ; BasisDateの予定を検索して、予定一覧リストに追加していく(append=trueによる)
            ;--------------------------------------------------------------
            (予定を検索
                format_type    search
                (search
                    source           OrderSchedule
                    session_value    予定一覧リスト
                    filter           "ScheduleStartDate <= @BasisDate and @BasisDate < ScheduleEndDate"
                    append           true
                )
            )
        }
    )
)


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2009-04-03 20:53:53 #$
  • バージョン : $Revision: 3405 $



Copyright © 2006, Atrris Corporation