ルール・セットの作成および編集
この章では、Ensemble ルール・エディタを使用してルール・セットを開発する方法について説明します。
以下に示す 2 つのタイプのルール・セットがあります。
-
汎用ビジネス・ルール・セット — いずれか 1 つが真であることが判明するまで順次評価されるルールのリスト。“真” の場合は、ルールを呼び出したビジネス・プロセスの次のアクションが決定されます。どのルールも真でない場合は、ルール・セットからデフォルト値が返されます。これは、BPL <rule> 要素を使用して呼び出すルール・タイプです。
-
ルーティング・ルール・セット — メッセージ・ルーティング・プロダクションで使用するルール・セット。ルーティング・ルール・セットでは、受信メッセージ (制約) のタイプと内容に基づいて、各メッセージの正しい宛先と、送信前にメッセージの内容を変換する方法が決定されます。このルール・セットを呼び出すには、ルーティング・エンジン・ビジネス・プロセスを使用します。
ルール・セットの追加時には、[名前]Opens in a new tab、[有効期間開始日時]Opens in a new tab、および[有効期間終了日時]Opens in a new tab の 3 つのプロパティ・フィールドが表示されます。これらのフィールドを使用して、同じルール定義内のルール・セットを区別できます。これらは [一般] タブのルール・セット・リストに表示される値です。
ほとんどのビジネス・ルール定義は、常に有効なルール・セットを 1 つだけ持ちます。しかし、複数のルール・バージョンを定義し、有効期間の開始日時と終了日時に指定して、異なる期間にそれらのバージョンをアクティブにすることもできます。プロセスからのルールの呼び出し時には、常に 1 つのルール・セットのみが実行されます。
ルール・セットを追加するには、[一般] タブでルール・セット・リストが選択された状態で追加アイコンをクリックします。その後、そのルール・セットのタブをクリックするか、リストでそのルール・セットの行をダブルクリックすることによって、ルール・セットの編集を開始できます。ルール・セットを編集するときには、そのルール・セットのタブの上部にあるいずれかのアイコンをクリックするか、展開された [ルール・アシスタント] ペインでいずれかのアイコン (または、追加アイコンの場合は、下部にあるラベル付きの長方形) をクリックします。
ルール・セット・エディタや、開発しているルール・セットの操作に習熟してきたら、ルール・セットの表示中、プロパティ名の表示は不要と感じるかもしれません。その場合は、エディタ・ペインの右上にある緑色の四角形をクリックすることによって、プロパティ名の表示/非表示を切り替えることができます。
また、編集プロセス中、いずれかのプロパティに指定された値が有効でない場合は、プロパティ・ボックスの右上に感嘆符入りの小さな赤い円マークが表示されます。この警告マークをダブルクリックすると、有用なエラー・メッセージが表示されます。
以下の各節では、ルール・セットの作成に関連する編集タスクについて説明します。
ルールの追加
各ルール・セットには、ビジネス・プロセスの特定の機能を満たすために定義された 1 つ以上のルールが含まれます。
ルールの追加時には、以下のプロパティが表示されます。
このルールにオプションの名前を割り当てて、識別しやすくすることができます。
Ensemble の内部では、rule#n の形式のルール名が使用され、順番に番号が割り当てられます。Name プロパティに値を入力すると、その名前がクラス定義に表示されるとともに、ルール・ログで内部ルール名の横にかっこ入りで示されます。ルール・セット内のルールの順序を変えると、n の値が変わります。
この項目をダブルクリックすることによって、ルールの有効化と無効化を切り替えることができます。真の値は、そのルールが無効であり、したがってルール・セットの実行時にはスキップされることを意味します。
(ルーティング・ルールの場合のみ) — 制約プロパティはルーティング・ルールを区別します。ルール・セットを通過するメッセージが、そのルールに対して定義されている制約と一致すると、そのルール・ロジックが実行されます。制約の定義に関する詳細は、“ルール制約エディタの使用” を参照してください。
各ルールは、1 つ以上の一連の when 節とオプションの otherwise 節、およびいくつかのオプションのアクションで構成されます。ルールの追加時には、エディタでまず when 節を作成するよう促されます。そのルールがルーティング・ルールの場合は、その節の return アクションも提示されます。
ルール・セットのルールの開発時に留意すべき一般的な考慮事項について以下に示します。
-
ルール・セットの実行で return アクションが検出されると、ルール・セットの実行は終了し、そのルール定義クラスを呼び出したビジネス・プロセスに戻ります。
-
return を省略することによって、ルール・セット内の複数のルールの実行を制御できます。つまり、すべてのルールをチェックする必要がある場合は、どのルール節でも return アクションを使用しないようにします。そして、どのルール節も真として評価されなかった場合のために、ルール・セットの最後に return アクションで値を提供します。
-
1 つのルールに複数の when 節が含まれている場合は、真として評価された最初の when が示すアクションのみが実行されます。どの when 条件も真でない場合のアクションは、otherwise 節を使用して実行できます。
-
when 節ごとに条件プロパティを 1 つ指定します。汎用ビジネス・ルール・セットの一般的な設計は、一連の when 条件で構成されるルールを 1 つ組み込み、どの条件が真であるかに応じて値を返す、というものです。どの条件も真でない場合にデフォルト値を返すには、otherwise 節を return とともに使用します。
-
ルーティング・ルール・セットの一般的な設計は、複数のルールを使用してルールごとに異なる制約を定義し、制約に一致したメッセージのルーティング方法とルーティング先を示す when 節を各ルールに 1 つ組み込むというものです。
アクションの追加
ルール内の各節には、ゼロ個以上のアクションを関連付けることができます。アクションは、関連する when 条件が真の場合にのみ実行されます。ルール・セットまたはルール内の when または otherwise 節に追加できるアクションには、次のものがあります。
アクション | 説明 |
---|---|
assign | ビジネス・プロセスの実行コンテキストのプロパティに値を割り当てます。詳細は、"Ensemble ビジネス・プロセス言語 (BPL) リファレンス" の <assign> に関するエントリを参照してください。 |
return | ルールをそれ以上実行せずにビジネス・プロセスに戻ります。また、汎用ルールの場合、示された値を結果ロケーションに返します。 |
trace | このルールの特定の部分が実行されたときに、入力された情報がイベント・ログに追加されます。詳細は、"Ensemble ビジネス・プロセス言語 (BPL) リファレンス" の <trace> に関するエントリを参照してください。 |
debug | ルールの当該部分が実行されたときに、式のテキストと値がルール・ログに追加されます。debug アクションが実行されるのは、ルータ・ビジネス・プロセスの RuleLogging プロパティで d フラグが指定されている場合のみです。RuleLogging プロパティの詳細は、"Ensemble 仮想ドキュメント" の “ルールのロギング” を参照してください。 |
一部のアクションはルール・セット・レベルで追加できますが、論理的に常に意味をなすわけではありません。ほとんどのアクションはルールの when 節内に格納してください。この節の外部にアクションを配置して意味をなすのは、ルール・セット内のどのルールも実行されたなかったときに適用するデフォルトの戻り値を設定する場合です。
また、ルーティング・ルールには以下のアクションを追加できます。
アクション | 説明 |
---|---|
send | 必要に応じて変換処理を行った後に、特定のターゲットにメッセージを送信します。詳細は、“send アクションの変換とターゲットの選択” を参照してください。 |
delete | 現在のメッセージを削除します。 |
delegate | メッセージを別のルールに委託します。 |
関連するエディタの使用
ルール定義内のいずれかの項目のプロパティを選択したときに、そのプロパティに関連するエディタがある場合は、 (関数アイコン) が有効になります。以下のテーブルでは、項目、節、またはアクションのプロパティと、それぞれのプロパティをダブルクリックするか、ƒx をクリックしたときに開くエディタを示しています。
項目 | Property | 関連するエディタまたは編集処理 |
---|---|---|
ルール・セット | name | テキストを入力します。 |
effective begin | 日時セレクタ | |
effective end | ||
rule | name | テキストを入力します。 |
disabled | ダブルクリックして真と偽を切り替えます。 | |
constraint | ルール制約エディタ | |
when | condition | 式編集 |
assign | property | この割り当てのターゲットであるコンテキスト・プロパティの名前を入力します。これは、実行コンテキスト・オブジェクトのプロパティである必要があります。 |
value | 式編集 | |
return | 値 (汎用ルール・セットの場合のみ) | 式エディタ |
trace | value | 式編集 |
send | transform | データ変換セレクタ |
target | プロダクション構成項目セレクタ | |
delegate | rule name | ルール・クラスの [ファインダダイアログ] |
otherwise 節と delete アクションには、編集対象のプロパティはありません。
ルール制約エディタの使用
ルーティング・ルールには、それぞれのメッセージをどのルールを介してルーティングするか決定するために使用する制約プロパティがあります。このエディタを使用して、以下のプロパティから成るルールの制約値を構成します。
以下の項目のいずれかの構成名。
-
ビジネス・サービス (ルーティング・インタフェース用)
-
メッセージ・ルーティング・プロセス (別のルールがこのルーティング・ルール・セットに連鎖している場合)
[ソース] フィールドの横にある ([...]) をクリックしてプロダクション構成項目セレクタを呼び出します。このセレクタには、[一般] タブで指定したプロダクションで使用できるソース項目のリストが表示されます。[ソース] に必要な項目をまだ準備していない場合は、このフィールドを空白のままにし、項目の準備ができた時点でここに戻ることができます。
このルールによってルーティングする Ensemble メッセージ・オブジェクトを指定します。このフィールドの値は、以下のルーティング・ルール・タイプに応じて決まります。
-
HL7 メッセージ・ルーティング・ルール — デフォルトで EnsLib.HL7.MessageOpens in a new tab になります。新しいルール定義では、このプロパティの入力オプションは提示されません。
-
汎用メッセージ・ルーティング・ルール — [メッセージ・クラス] フィールドの横にある [...] をクリックして [ファインダダイアログ] を呼び出し、該当するメッセージ・クラスを選択します。メッセージ・クラスのカテゴリを選択して、選択肢を絞り込むことができます。
-
仮想ドキュメントのメッセージ・ルーティング・ルール — 定義されている仮想ドキュメント・クラスのリストから選択します。
エディタの以下のフィールドは、HL7 または仮想ドキュメントのルーティング・ルール・クラス (X12 や ASTM など) の編集時にのみ適用されます。汎用メッセージ・ルーティング・ルールの場合は、各制約フィールドへの入力は完了です。
そのメッセージ・クラスのメッセージ・カテゴリを指定します。
-
HL7 メッセージ・ルーティング・ルール — 組み込みスキーマ・カテゴリ・リストまたはカスタム・スキーマ定義の名前から選択します。
-
仮想ドキュメントのメッセージ・ルーティング・ルール — 選択した仮想ドキュメント・クラスに対して定義されているカテゴリ・タイプのリスト (組み込みのもの、またはインポートされたカスタムのスキーマに基づくもの) から選択します。
メッセージ構造を指定します。許容値はメッセージ・クラスに応じて異なります。
-
HL7 メッセージ・ルーティング・ルール — ソース・アプリケーションの MSH:9 フィールドに指定された HL7 メッセージ構造 (ADT_A08 や ORM_O01 など)。容易に検索できるよう、この MSH:9 の値は、Name という EnsLib.HL7.MessageOpens in a new tab プロパティに配置されます。
-
仮想ドキュメントのメッセージ・ルーティング・ルール — 選択した仮想ドキュメント・クラスに対して定義されているカテゴリ・タイプのリスト (組み込みのもの、またはインポートされたもの) から選択します。
[ドキュメント名] テキスト入力フィールドには、複数の値を入力します。これにより、ルールは、指定した [ドキュメント名] の値には一致し、それ以外には一致しないようになります。
いずれかのフィールドを空白のままにすると、Ensemble はすべての値がそのルールに一致しているとみなします。
[制約エディタ] は、Ensemble 2012.1 より前のバージョンから変換したルール・セットの編集時には、通常とやや異なる動作をします。リストに追加する項目を選択するボックス付きの [スキーマ・ドキュメント・タイプ] フィールドが表示されることがあります。
[スキーマ・カテゴリ] および [スキーマ・ドキュメント・タイプ] は実際の HL7 メッセージ構造を表します。これらの値は DocType と呼ばれる EnsLib.HL7.MessageOpens in a new tab プロパティに格納されます。DocType は、2.4:ADT_A08 のようにコロンで区切られた 2 つの部分から成る文字列です。
-
左側は [スキーマ・カテゴリ] です。これは、組み込みスキーマ・カテゴリの名前またはカスタム・スキーマ定義の名前です。
-
右側は [スキーマ・ドキュメント・タイプ] です。これは、ADT_A08 や ORM_O01 など、特定されたスキーマ内の HL7 メッセージ構造です。
プロダクション構成項目セレクタの使用
このエディタでは、メッセージのソースまたはメッセージのルーティング・ターゲットとして構成項目を選択できます。[一般] タブで入力したプロダクションで定義されているプロダクション構成項目のリストから選択します。ルール定義の [一般] タブでプロダクションを選択していないと、このエディタの呼び出し時に次の警告が表示されます。
ルールの [一般] タブでプロダクション名が指定されていません。注意のうえ プロダクションに選択したターゲットが存在していることを確認します。
その場合は、現在のネームスペースで定義されているプロダクション構成項目のリストから選択します。プロダクションのルールの開発時には、構成項目の名前を入念に確認してください。
send アクションの変換とターゲットの選択
send アクションを追加するときには、以下のプロパティも入力します。
-
Transform — (オプション) メッセージを Target に送信する前に変換する場合は、1 つ以上の DTL データ変換の完全なパッケージおよびクラス名を入力します。[変換] フィールドをダブルクリックして [データ変換セレクタ] を呼び出し、ネームスペースで定義されている 1 つ以上のデータ変換を選択します。
複数のデータ変換は、連鎖している順に左から右に表示されます。
-
Target — 以下の 1 つ以上のプロダクション項目の構成名を入力します。
-
ビジネス・オペレーション (外部アプリケーションへのメッセージのルーティング用)
-
ルーティング・プロセス (別のルーティング・ルール・セットへの連鎖用)
[ターゲット] フィールドをダブルクリックしてプロダクション構成項目セレクタを呼び出し、1 つ以上のプロダクション構成項目を選択します。
-
これらのフィールドに入力する項目がまだ存在していない場合、プロダクションに実際にそれらの項目を含めるときに、入力した名前に誤りがないか必ず確認してください。
情報をルールに渡す場合、RuleUserData プロパティに値を割り当てることができます。この値には、aux.RuleUserData の変換からアクセスできます。aux 変数の使用に関する詳細は、DTL 変換の開発の “構文ルール” の章にある “有効な式” を参照してください。
式編集の使用
条件または値を選択して をクリックすると、式編集が起動します。式編集は以下の 4 つのプロパティでアクティブになります。
-
when の condition — 詳細は、"When の条件の定義" を参照してください。
-
assign の value
-
汎用ビジネス・ルールの return の value
-
trace の value — これはトレース・メッセージのテキストです。この値には、リテラル文字列または評価対象となる式を指定できます。式の場合は、該当する <process> 要素の language 属性で指定されているスクリプト言語を使用する必要があります。
式を定義するときには、以下のテーブルに示すアイコンを使用して複数の条件をネストできます。
アイコン | アクション |
---|---|
クリックすると、選択したノードが式の上方向に移動します。 | |
クリックすると、選択したノードが式の下方向に移動します。 | |
クリックすると、選択したノードを親ノードとマージできます。 | |
クリックすると、リストから演算子を選択し、選択したノードをその演算子のオペランドにすることができます。 | |
クリックすると、リストから Ensemble 関数を選択し、選択したノードをその関数の引数にすることができます。 | |
クリックすると、兄弟ノードを追加できます。 | |
クリックすると、選択したノードを削除できます。 |
アクションが使用できない場合は、そのアイコンが淡色で表示されます。条件や値を式ダイアグラムに追加するときには、エディタ上部の青色のバーに式のテキストが表示されます。
以下の各節では、式の値の入力について詳しく説明します。
when 条件の定義
ルール定義内では、1 つの条件は 2 つの値とこれらの値間の比較演算子で構成されます。以下に例を示します。
Amount <= 5000
条件が真でない場合は、偽となります。条件にはその他の可能な値はありません。この種の結果はブーリアン値の結果と呼ばれます。Ensemble では、ブーリアン値の結果を整数値の 1 (真の場合) または 0 (偽の場合) のどちらかとして格納します。通常、内部表現について気にする必要はありませんが、ルーティング・ルールで制約プロパティを使用するときには、制約が満たされたときに、関連する when 節が常に実行されるようにする必要がある場合があります。その場合は、when の条件プロパティに値 1 を入力します。
ルール内には複数の条件を含めることができます。その場合は、条件をすべて評価および比較し、ルール全体を真または偽として判断する必要があります。条件どうしのロジックは、AND 演算子または OR 演算子を使用して制御します。以下に例を示します。
IF Amount <= 5000 AND CreditRating > 5 OR CurrentCustomer = 1
この例では、[式編集] ダイアログが次のように表示されます。
上記のルールには、Amount <= 5000、CreditRating > 5、CurrentCustomer = 1 という 3 つの条件があります。これらの各条件は真か偽のいずれかになります。AND 演算子および OR 演算子が考慮される前に、これらの条件がすべて評価されます。
AND および OR は、真の値および偽の値に対してのみ機能します。以下のように、演算子は 2 つのブーリアン値の間に配置され、それら 2 つの値に基づいて、1 つのブーリアン値の結果を返します。
演算子 | 結果が真となる状況 |
---|---|
AND | 両方の値が真の場合。 |
OR | 少なくとも 1 つの値が真であるか、両方の値が真の場合。1 つの値が偽でもう一方の値が真の場合でも、全体としての結果は真になります。 |
1 つのルールの中に複数の AND 演算子または OR 演算子が存在する場合、AND 演算子が OR 演算子よりも優先されます。つまり、ルール内のすべての AND 演算が先に実行されます。その後、OR 演算子が考慮されます。例えば、以下のようなロジックがあるとします。
IF Amount <= 5000 AND CreditRating > 5 OR CurrentCustomer = 1 AND CreditRating >= 5
このロジックは、以下のように処理されます。
IF (Amount <= 5000 AND CreditRating > 5) OR (CurrentCustomer = 1 AND CreditRating >= 5)
この例では、[式編集] ダイアログが次のように表示されます。
上記のルールは、誰かが 5,000 未満の金額を要求し、さらにその人の信用等級が平均よりも優れている場合に真となります。またこのルールは、現在の銀行顧客の誰かが任意の金額を要求し、さらにその人の信用等級が平均以上である場合に真となります。両方の条件が真であるか、これらのどちらかが真であることが必要になります。両方の条件が偽の場合、全体としてのルールは偽となります。
上記のルールは具体的に以下のように機能します。
-
以下の AND 式があるとします。
IF Amount <= 5000 AND CreditRating > 5
この式は、真または偽の結果をもたらします。この結果を “SafeBet” と呼びます。
-
以下の AND 式があるとします。
IF CurrentCustomer = 1 AND CreditRating >= 5
この式は、真または偽の結果をもたらします。この結果を “KnownEntity” と呼びます。
-
ルール内の AND 演算が完了すると、以下のように OR 演算が始まります。
IF SafeBet is true OR KnownEntity is true
-
OR ロジックに関する知識に基づくと、このルール全体は、顧客が SafeBet であって KnownEntity でない場合、または顧客が SafeBet ではなく KnownEntity である場合に真となります。さらに、顧客が SafeBet と KnownEntity の両方である場合にも、このルールは真となります。
式の値
条件、あるいは assign、return、または trace アクション内では、値は以下の項目のいずれかになります。
-
数値 (整数または小数)。1.1 や 23000 など。
-
文字列値。"NY" のように二重引用符で囲む必要があります。
-
プロダクションが <rule> 要素を使用して BPL ビジネス・プロセスからルールを呼び出す場合、BPL で <context> および <property> 要素を使用して定義された汎用永続変数 context のプロパティを指定できます。プロパティ名は大文字と小文字が区別されます。これを引用符で囲んではなりません。
PlaceOfBirth
-
使用可能なさまざまな演算子、リテラル値、および context のプロパティを使用した式。以下に例を示します。
((2+2)*5)/154.3 "hello" & "world" Age * 4 (((x=1) || (x=3)) && (y=2))
-
Min()、Max()、Round(n,m)、SubString() などの、Ensemble の組み込み関数。関数名にはかっこが含まれている必要があります。また、Round の数値 n や m などの入力パラメータも含める必要があります。関数に入力値がない場合は、中身が空の左右のかっこを含める必要があります。
-
メッセージ・オブジェクトを表す Document 変数。
ルール・セットのタブでフィールドに値を挿入する場合には、テキスト・ボックスに直接入力できます。構文が間違っているか、そのフィールドのデータ型として不適切な場合には、変更を保存しようとしたときに赤いエラー記号が表示されます。
ルール定義で [コンテキスト・クラス] の設定を正しく入力していれば、式編集でプロパティを選択したときに、BPL ビジネス・プロセスの [コンテキスト・クラス] に指定されているビジネス・プロセス実行コンテキストのプロパティが選択肢としてテキスト・ボックスに表示されます。
式の演算子
式編集で をクリックすることによって、リストから演算子を選択し、選択したノードをその演算子のオペランドにすることができます。
使用可能な算術式は以下のとおりです。
演算子 | 意味 |
---|---|
+ | 加算 (2 進および単項) |
– | 減算 (2 進および単項) |
* | 乗算 |
/ | 除算 |
使用可能な論理演算子は以下のとおりです。これらの演算子は 1 (真) または 0 (偽) の整数値を返します。
演算子 | 意味 | 式が真となる状況 |
---|---|---|
AND (&&) | および | 両方の値が真の場合。 |
OR (||) | または | 少なくとも 1 つの値が真の場合。両方の値が真であるか、1 つの値のみが真である必要があります。 |
! | 偽 (単項) | 値が偽の場合。 |
= | 等しい | 2 つの値が等しい場合。 |
!= | 等しくない | 2 つの値が等しくない場合。 |
> | より大 | 演算子の左側の値が演算子の右側の値よりも大きい場合。 |
< | より小 | 左側の値が演算子の右側の値よりも小さい場合。 |
>= | 以上 | 左側の値が右側の値よりも大きいか、または 2 つの値が等しい場合。 |
<= | 以下 | 左側の値が右側の値よりも小さいか、または 2 つの値が等しい場合。 |
[ | Contains | 文字列は右側のサブ文字列を含みます。Contains のパターン・マッチングは、完全一致です。左側の値が “Hollywood, California” で、右側の値が “od, Ca” の場合は一致と見なされますが、値が “Wood” の場合は一致と見なされません。 |
使用可能な文字演算子は以下のとおりです。
演算子 | 意味 |
---|---|
& | 文字列の連結演算子。 |
_ | リテラル文字列、式、または変数を結合するバイナリの連結。 |
複数の演算子が式に含まれているとき、演算子は先頭から後方に向かって以下のような優先順位で評価されます。
-
次の論理演算子すべて : ! = != < > <= >=
-
乗算と除算 : * /
-
加算と減算 : + –
-
文字列の連結 : &
-
論理 AND : &&
-
論理 OR : ||
式の関数
ルール定義内では、式には Ensembleユーティリティ関数の 1 つへの呼び出しを含めることができます。このような関数には、他のプログラミング言語で使い慣れている数学的な処理関数または文字列処理関数などがあります。
[式編集] で をクリックすることによって、リストから関数を選択し、選択したノードをその関数の引数にすることができます。
使用可能なユーティリティ関数のリストとそれらをビジネス・ルールまたは DTL データ変換で使用するための適切な構文については、"ビジネス・ルールの開発" の “Ensemble ユーティリティ関数” を参照してください。
式の例
ルール定義内では、式は、値とプロパティを組み合わせて値を返すための公式です。以下に例を示します。
式 | 算出値 |
---|---|
((2+2)*5)/154.3 | 0.129617628 |
"hello" & "world" | "helloworld" |
Age * 4 | Age が、context プロパティ (BPL で <context> および <property> 要素を使用して定義された汎用永続変数 context のプロパティ) で、その数値が 30 である場合、この式の値は 120 です。 |
1+2.5*2 | 6 |
2*5 | 10 |
Min(Age,80,Limit) | この式では、組み込み関数 Min が使用されます。Age が値 30 を持つ context プロパティであり、同じくプロパティである Limit の値が 65 であるとき、この式の値は 30 になります。 |
Round(1/3,2) | 0.33。この式では、組み込み関数Round が使用されます。 |
x<65&&A="F"||x>80 | この式では、演算子の優先順位規則が使用されます (詳細は、"式の演算子" で説明します)。A が F の文字列値を持つ context プロパティであり、同じくプロパティである x が 38 の整数値を持っている場合、この式は 1 の整数値を持ちます。この整数値には、Ensemble の規則に従って、真または偽の意味があります。つまり、整数値 1 は真、整数値 0 は偽を意味します。 |
Min(10,Max(X,Y)) | この式では、ユーティリティ関数 Min および Max が使用されます。X が数値 9.125 を持つ context プロパティであり、(同じくプロパティである) Y の数値が 6.875 であるとき、この式の値は 9.125 になります。 |
(((x=1) || (x=3)) && (y=2)) | この式では、複雑な論理リレーションシップ内での優先順位を明確に示すため、かっこが使用されます。 |
その値として式を取るプロパティを選択すると、ルール・セット・ダイアグラムの上部に空白のテキスト・フィールドが表示されます。このフィールドには任意の文字列を入力できるため、正しい構文を入力するよう注意してください。式を作成するときのルールは以下のとおりです。
-
式には、前述のように、数値、文字列、context プロパティ、式、関数、またはこれらの有効な組み合わせを使用して、任意の値を記述できます。
-
式の中の空白は無視されます。
-
前述の任意の演算子を使用できます。
-
デフォルトの演算子優先順位を上書きするか、式を読みやすくする場合は、かっこを使用して式の部分をグループにまとめ、優先順位を示すことができます。例えば、以下のようになっているとします。
1+2.5*2 = 6
これは以下のように変更できます。
(1+2.5)*2 = 7
-
ビジネス・ルールでは、(((x=1) || (x=3)) && (y=2)) のように、かっこを使用して複雑な論理式をグループ化できます。
[式編集] を呼び出すと、式のグラフィック表現の上部に、その式のテキスト表現を示す青色のバーが表示されます。
ビジネス・ルール通知の追加
あるルールを実行するたびに特定のアクションが実行されるようにルール通知を設定できます。ルールに関連する大半のアクティビティとは異なり、通知にはプログラミングが必要です。Ens.Rule.NotificationOpens in a new tab のサブクラスを定義して、そのサブクラスの %OnNotify メソッドを上書きする必要があります。このメソッドのシグニチャは次のとおりです。
ClassMethod %OnNotify(pReason As %String,
pRule As Ens.Rule.RuleDefinition)
As %Status
使用可能な pReason の値は次のとおりです。
-
BeforeSave
-
AfterSave
-
Delete
実行時に Ensemble フレームワークは自動的に Ens.Rule.NotificationOpens in a new tab のサブクラスを検索し、%OnNotify 内のコードを使用してルールの実行時に行う操作を判断します。