PEXA Serviceについて

チュートリアル

テストツール

定義ファイル

基本プロセス

拡張プロセス

Condition

セッション

モデル

リファレンス

環境設定

目次
  1. ServiceSession条件式について
  2. 基本比較式書式
  3. 比較式の結合
  4. ServiceSessionキーの値どうしの比較
  5. パスの利用
  6. Session上のモデルに対する評価式
  7. Directiveの返値に対する評価式


ServiceSession条件式について

ServiceSession条件式は、ServiceSession上に格納されているSession値に対する判定処理を行うために使用される。
この条件式は、以下のような箇所で使用される。


基本比較式書式

基本書式1:(左辺がSession値)

  @評価対象ServiceSessionKey名 比較演算子 比較値
左辺にSession値を指定する上記の形式となる。
この場合、左辺側には必ず先頭にアットマークを付けること。


基本書式2:(左辺がDirective)
  &Directive 比較演算子 比較値
応用的な使用方法として、左辺側にDirectiveを指定する場合もある。
この場合についての詳細は別セクションにて説明するので、詳しくはこちらを参照すること。

ServieSesionKeyの値と比較値を比較演算子に基づき比較する。
比較演算子としては下記の演算子を使用することができる。
演算子				概要
-------------------------------------------------------------------------------------------------------
>                 評価対象が比較値よりも大きい
<                 評価対象が比較値よりも小さい
>=                評価対象が比較値よりも大きいか等しい
<=                評価対象が比較値よりも小さいか等しい
=                 評価対象と比較値が等しい
!=                評価対象が比較値と等しくない
like              評価対象が比較値の文字列を含む
in                評価対象が比較値の集合のいずれかに該当する(比較値が専用の記述形式となる)
not in            評価対象が比較値の集合のいずれにも該当しない(比較値が専用の記述形式となる)
is null           評価対象が存在しない
is not null       評価対象が存在する
is changed        評価対象のモデルまたは、パス指定された現象型名に対応する観測値が変更されている
is not changed    評価対象のモデルまたは、パス指定された現象型名に対応する観測値が変更されていない
is space          評価対象の値がホワイトスペースである
is not space      評価対象の値がホワイトスペースでない
右辺の比較値は以下の指定方法がある。
演算子毎のグループ毎についての解説はこちら。

右辺に固定値を指定する

文字列による直接指定の場合、値を元のオブジェクトに変換できる文字列表現で指定する。
元の値が文字列や数値であればそのまま記述する。
Phenomenonであればそれぞれの区分値の文字列表現で指定する。

記述例:

	@支払額 >= 100

比較値に空白を含む場合はシングルクオートでクオートする。

記述例:
	@支払額 >= '100'
	@ワークフロー申請コメント = 'コメント1 コメント2'


右辺にSession値を指定する

ServiceSessionキー名を指定する場合は比較値の先頭の"@"に続けてServiceSessoinキー名を記述する。
また、ServiceSessionキーの値がモデルの場合、"/"に続けてパスを記述することができる。
ただし、比較値の型は現象型に対応する型に変換可能な物である必要がある。

また、値が複数値(Collectionや配列)になっている場合は、使用できる演算子はin演算子のみとなります。

記述例:比較値がSession値(単数値)

    @支払額X >= @支払額Y
記述例:比較値がSession値(複数値)
    @病棟No in (@病棟Noリスト)
なお、比較値に指定されたServiceSessionKeyの値がnullの場合、いかなる評価対象との比較でも"偽"として扱われる。
また、
	is null
	is not null
	is changed
	is not changed
	is space
	is not space
については比較値は存在しない。


右辺にDirectiveを指定する

評価値には数値、文字列などの他にDirectiveを指定することもできる。
Directiveとは'&'で始まる文字列で、評価時に一定のルールに基づいて値に変換される。

値を返すようなDirectiveを右辺で指定することができます。
詳しくはDirectiveの一覧を参照してください。

記述例1 : 当月作成されたものかどうかを判断する

(before_condition
    filter    " @作成日 >= &StartOfMonth and @作成日 < &StartOfNextMonth "
    error     "作成日が当月以外です。"
)
記述例2 : 記述例1を別のDirectiveで表現してみる
(before_condition
    filter    " @作成日 >= '&FirstDateOfOfMonth:{&Today}' and @作成日 < '&FirstDateOfNextMonth:{&Today}' "
    error     "作成日が当月以外です。"
)
!!!注意!!!
この場合に注意する点として、パラメータをとるDirectiveは上記の記述例のようにDirective全体をシングルクオートで囲む必要があります。 Directiveのリファレンスにも書式についての説明があるので、以下を参照してください。


右辺にパスを指定する

比較対象ServiceSessionKeyの値がモデル(Observableのサブクラス)の場合、 @Key名に続けてモデルが保持する項目にアクセスするパスを続けて記述することができる。

書式 : 

"評価対象  比較演算子  @比較対象ServiceSessionKey名/モデルの保持する現象型名/..."

記述例 : 
(before_condition
    filter    " @予定開始日  > @Order/有効期間開始日  and  予定開始日 < @Order/有効期間終了日 "
    error     "予定開始日が有効期間外です。"
)
パスの書式については、こちらを参照してください。


大小比較

下記の比較演算子を利用する場合

	<
	>
	<=
	>=
比較値は、下記の条件を満たす必要がある
  • ServiceSessionKeyの値の型がStringからのコンストラクタを持つ
  • 比較値(文字列)をパラメータに上記のコンストラクタでコンストラクトが可能
  • ServiceSessionKeyの値の型がjava.lang.Comparableのインタフェースを実装している
ServiceSessionKeyの値の型がjava.lang.Numberのサブクラスの場合上記の条件を満たす。
なお、java.lang.Booleanの場合、JDK1.4まではjava.lang.Comparableを実装していないため3番目の条件に抵触するが、JDK1.5以降からはjava.lang.Comparableを実装しているため、利用可能。
ServiceSessionKeyの値の型がjava.lang.Integerの場合、文字列に小数点などを含んでいると2番目の条件に抵触する

ただし、ServiceSessionKeyの値の型がjava.util.Dateの場合は、下記のフォーマットの文字列で比較値を記述することができる。
	yyyy/MM/dd:HH:mm:ss
	yyyy/MM/dd:HH:mm
	yyyy/MM/dd:HH
	yyyy/MM/dd

なお、"HH","MM","SS"について省略された場合はそれぞれ、"00"が設定された物と見なされる。


同一比較

下記の比較演算子を利用する場合、

	=
	!=
比較値は、下記の条件を満たす必要がある
  • ServiceSessionKeyの値の型がStringからのコンストラクタを持つ
  • 比較値(文字列)をパラメータに上記のコンストラクタでコンストラクトが可能


like演算子

下記の演算子の場合

	like
下記の条件を満たす必要がある
  • 評価対象のServiceSessoinキーの型が文字列
  • 比較値が文字列である


in演算子

比較対象に対して、複数の比較値の集合を一度にぶつけて判定するための演算子です。
in演算子を使用する場合、比較値の集合を以下の形式で表します。

記述:

	評価対象 in (比較値1 比較値2 比較値3 .....)
これは、以下と等価になります。
	(評価対象 = 比較値1) or (評価対象 = 比較値2) or (評価対象 = 比較値3) or .....

右辺の比較値集合全体を括弧でくくります。内部は"半角スペース区切り"で複数個の比較値を指定できます。
また、この比較値一つ一つは固定値、セッション値(単数値)、セッション値(複数値)、Directiveが指定できます。複数値が指定された場合は自動的に内部で括弧内に展開されるイメージとなります。

例1:
セッション値"病棟Noリスト"に病棟Noの値が複数個入っている場合

@病棟No in (@病棟Noリスト)

例2:
区分値を固定で複数個指定する場合

@ModelOperationCategory in (CREATE UPDATE REMOVE)

なお、inの逆に「比較値集合のどれにも該当しない」という判定をしたい場合は"not in"で比較して下さい。


is space演算子

比較対象がnullの代わりにホワイトスペースになっているようなケースで使用できる比較演算子です。
下記の演算子の場合

	is space
	is not space
下記の条件を満たす必要があります。
  • 評価対象のServiceSessoinキーの型が文字列


is changed演算子

評価対象がデータモデルの場合に、そのデータモデルに対して何かしらの変更が行われたかを判定できる比較演算子です。
下記の比較演算子の場合、

	is changed
	is not changed
評価対象ServiceSessionキーがモデル(Observableのサブクラス)のみで使用できる。
Observableのサブクラス以外に使用した場合はシステム例外が発生する
記述例:
	@交通費精算書 is changed



比較式の結合

比較式同士は、論理演算子による結合が可能である。
論理演算子には"and"と"or"を利用することができる
また"()"でグループ化した比較式同士を比較演算子で結合することも可能である。

記述例:

	@支払額 > 0 and @支払額 <= 100
	(@支払額 > 0 and @支払額 <= 100) or @支払額合計 <= 10000


ServiceSessionキーの値どうしの比較

比較値の代わりにServiceSessionキーの値を指定することができる

	@評価対象ServiceSessionKey名 比較演算子 @比較対象ServiceSessionKey名
比較演算子には下記の演算子を使用できる
	>
	<
	>=
	<=
	=
	!=
評価対象ServiceSessionKeyの値または比較対象ServiceSesionKeyの値のいずれか又は両方がnullの場合、判定結果には"偽"が返る。
null = nullは偽と判断される。両者がnullであることを判定したい場合は
	@評価対象ServiceSessionKey is null and @比較対象ServiceSessionKey is null
で判定する。

演算子が下記の場合、
	<
	>
	<=
	>=
比較可能な条件は下記の条件を満たす必要がある
  • 評価対象ServiceSessionKeyの値の型と比較対象ServiceSessionKeyの型が同じで、かつ値の型がjava.lang.Comparableを実装している。


パスの利用

評価対象ServiceSessoinKey、比較対象ServiceSessionKeyのいずれでもその値がモデル(Observableのサブクラス)の場合、 @Key名に続けてモデルが保持する項目にアクセスするパスを続けて記述することができる。

	@評価対象ServiceSessionKey名/モデルの保持する現象型名/...

パスの書式については、こちらを参照してください。
また条件付のパスを記述することも可能。ただし、空白を含む場合は全体をシングルクオートで囲む必要がある。

記述例:
	'@交通費精算書/交通費精算書明細[RemovedFlag=NOT_REMOVED]' is not null


Session上のモデルに対する評価式

モデルの保持する値に対する条件式を記述することができる。

	@モデルを保持するServiceSessionKey名 { モデル内の現象型に対する評価式 }
上記の式は、ServiceSessionKey名に対応するモデルについて"{}"内の条件式を、適用してその結果により真偽の判定を行う。
モデルに対する条件式を複数結合して評価する場合などは、モデル評価式で記述した方が簡潔に記述できかつ高速に動作する。

{}内の条件式について、モデル条件式の左辺値にはモデルが保持する現象型名を記述する。
右辺値には比較値又はServiceSessionキーに対応する値を設定することができる。

モデル条件式の書式については以下で解説する

モデル条件式基本書式

現象型名 比較演算子	比較値

比較値には数値、文字列の指定の他に、モデルが保持する現象型名に対応する観測値、Directive、ServiceSession保持する値を利用することができる。
	現象型名 比較演算子 $現象型名	(注1)
	現象型名 比較演算子 &Directive
	現象型名 比較演算子 @ServiceSessonKey名 (注2)
注1:
モデルフレームワークで利用しているモデル評価式では比較対象の現象型名の記述に${現象型名}での記述が許されるが、ServiceSession条件式内のモデル評価式では利用することができない。

注2:
モデルフレームワーク内のモデル評価式では指定できない。サービス記述時のみ利用できる。

モデル評価式で使用可能な比較演算子は下記の通り(ServiceSession条件式で記述可能な演算子に同じ)。
演算子				概要
-------------------------------------------------------------------------------------------------------
>                   評価対象が比較値よりも大きい
<                   評価対象が比較値よりも小さい
>=                  評価対象が比較値よりも大きいか等しい
<=                  評価対象が比較値よりも小さいか等しい
=                   評価対象と比較値が等しい
!=                  評価対象が比較値と等しくない
like                評価対象が比較値の文字列を含む
in                  評価対象が比較値の集合のいずれかに該当する(比較値が専用の記述形式となる)
not in              評価対象が比較値の集合のいずれにも該当しない(比較値が専用の記述形式となる)
is null             評価対象が存在しない
is not null         評価対象が存在する
is changed          評価対象のモデルまたは、パス指定された現象型名に対応する観測値が変更されている
is not changed      評価対象のモデルまたは、パス指定された現象型名に対応する観測値が変更されていない
is space            評価対象の値がホワイトスペースである
is not space        評価対象の値がホワイトスペースでない
記述例1:比較値
	@交通費精算書{ 支払額 = 100 }
	@交通費精算書{ 作成日 >= '2004/01' and 作成日 < '2004/05/01' }
記述例1の内容は、モデル評価を使用しない下記の条件式と等価である。
	@交通費精算書/支払額 = 100
	@交通費精算書/作成日 >= '2004/01' and @交通費精算書/作成日 < '2004/05/01'

記述例2:ServiceSessoinキーの保持する値と比較
	@交通費精算書{ 支払額 = @支払額 }
	@交通費精算書{ 作成日 >= @検索開始日 and 作成日 < @検索終了日 }

記述例3:同じモデル内の現象型同士を比較
モデルに対する評価式の右辺値にはモデル内の他の現象型の値を指定することもできる。
その場合は、右辺値の前に$で指定する。
	@交通費精算書{ 作成者No != $最終更新者No }
記述例3の内容は、モデル評価式を利用しない下記の記述と等価である。
	@交通費精算書/作成者No != @交通費精算書/最終更新者No



Directiveの返値に対する評価式

左辺側にDirectiveを指定することで、Directiveが返す値に対する評価式を記述することができます。

Directiveを左辺にする場合の基本書式

  &Directive 比較演算子 比較値
このようにすることで、たとえば検索結果のリストの件数をDirectiveで取得し、その数が1以上かどうかという判定を行うことができます。

記述例1 : 検索結果の件数をチェック
;;--------------------------------
;;検索結果が1件以上なかったらスキップする
;;--------------------------------
(before_condition
    filter    " '&Size:{@検索結果リスト}' > 1 "
    error     &Skip
)
記述例2 : 左辺のDirectiveで直接検索を実行して件数をチェック
;;---------------------------------------
;;左辺のDirectiveで直接検索を実行して件数をチェック
;;---------------------------------------
(before_condition
    filter    " '&Size:{&Search:{モデルA}{Code = AAA}{}}' > 1 "
    error     &Skip
)
!!!注意!!!
この場合に注意する点として、パラメータをとるDirectiveは上記の記述例のようにDirective全体をシングルクオートで囲む必要があります。 Directiveのリファレンスにも書式についての説明があるので、以下を参照してください。


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2009-06-10 13:52:48 #$
  • バージョン : $Revision: 3740 $



Copyright © 2006, Atrris Corporation