Oracle® Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド 11g リリース1(11.1.1) B61409-01 |
|
前 |
次 |
この章では、式および条件を必要とするBPMN要素の式および条件の記述方法について説明します。Oracle BPMでは、異なるユーザーの要件に適応する2タイプの式エディタが提供されています。この章では、各式ビルダーで使用される式言語および記述する式で使用できる操作について説明します。
この章の内容は次のとおりです。
BPM要素では、動作を定義する条件または式を記述する必要がある場合があります。たとえば、500ドルを超えるすべての支出がマネージャによって承認されていることを確認する条件シーケンス・フローを使用するプロセスのフローを制御することがあります。
Oracle BPMでは、次の2つの式および条件の記述方法が提供されています。
シンプルな式ビルダーの使用
XPATH式ビルダーの使用
シンプルな式ビルダーではドット表記を使用し、その構文はJavaによく似ています。XPATH式ビルダーでは標準XPATH言語を使用します。
Oracle BPMでは式を使用して、次のBPMN要素を構成します。
条件シーケンス・フロー
複合ゲートウェイ
タイマー・イベント
データ・アソシエーション
ループ・マーカー
マルチインスタンス・マーカー
ユーザー・タスク拡張プロパティ
式の結果は、構成する要素のタイプに応じて異なります。表21-1は、各BPM要素で必要とされる式を説明しています。
表21-1 式タイプ
BPMN要素 | 式タイプ |
---|---|
条件シーケンス・フロー |
評価時にブール値となる条件。 |
複合ゲートウェイ |
評価時にブール値となる条件。 |
タイマー・イベント |
時間日付: 評価時に日時値となる式。 サイクル: 評価時に間隔値となる式。 |
データ・アソシエーション |
評価時にデータ・アソシエーションでの引数と同じタイプの値となる式。 |
ユーザー・タスク拡張プロパティ |
評価時に文字列値となる式。 |
ループ・マーカー |
評価時にブール値となる条件。 |
マルチインスタンス・マーカー |
ループ・カーディナリティ: 評価時に整数値となる式。 完了条件: 評価時にブール値となる条件。 |
式をサポートするBPM要素の構成ダイアログには、埋込みの式エディタおよび式ビルダーを起動するボタンがあります。後者は長い式を操作する場合に適しています。どちらの式ビルダーでも、使用可能な変数を参照できます。XPATH式ビルダーでは、使用可能な関数も参照できます。
条件シーケンス・フローを実装するには、条件を指定する必要があります。トークンが条件シーケンス・フローに到着すると、BPMNサーバー・エンジンが条件シーケンス・フローの条件を評価し、トークンがどのシーケンス・フローに従うかを決定します。
通常、条件はプロジェクトおよびプロセス・データ・オブジェクトの値に基づいていますが、要件には基づいていません。コンパイラが条件を評価する際に、条件はブール値となる必要があります。ブール値とならない条件を記述した場合、シンプルな式ビルダーではエラーが発生します。
複合ゲートウェイを実装するには、到着したトークンをゲートウェイが解放する時期を指定する条件を提供する必要があります。新規トークンが複合ゲートウェイに到着するたびに、BPMNサービス・エンジンはこの条件を評価します。条件がtrueと評価されると、複合ゲートウェイはtrueと評価されるまでに到着したすべてのトークンを解放します。
通常、条件は、複合ゲートウェイに到着したトークンの数に基づいています。たとえば、2つのトークンがマージ・ゲートウェイに到着した後でゲートウェイがトークンを解放するようにするとします。
例21-1は、2つのトークンがマージ・ゲートウェイに到着した後でゲートウェイに到着したトークンを解放するゲートウェイを構成する条件を示しています。
ターマー・イベントを実装するために、日付または間隔を指定するか、日付または間隔を計算する式を記述するかを選択できます。
通常、日付または間隔が固定しない場合に式を使用します。
次の例は、日付を表すタイマー・イベントで使用できる式を示しています。
'now' + '30m'
deadline - '1day'
arrivalDate.dateTime + '1h'
次の例は、間隔を表すタイマー・イベントで使用できる式を示しています。
waitToRetry.interval()
period(deadline)
式を使用して、タイマー・イベントの実装における日付または間隔を計算できます。
タイマー・イベントで式を使用するには:
タイマー・イベントを右クリックします。
「プロパティ」を選択します。
「実装」タブをクリックします。
「式の使用」を選択します。
「式」セクションで、条件を記述するのに使用する式ビルダーのタイプを選択します。
式が単純な場合、表示されたテキスト領域に式を記述できます。
複雑な式を処理する場合、テキスト領域の横にある「式ビルダーの起動」ボタンをクリックして、式ビルダーを起動できます。式を記述できる式ビルダーが表示されます。
「OK」をクリックします。
データ・アソシエーションで式を使用して、アクティビティ実装引数に関連付ける前に入出力値を変更できます。
通常、データ・オブジェクトとアクティビティ実装引数間に不一致がある場合に、式を使用します。次の例は、データ・アソシエーションで式を使用できる状況を説明しています。
データ・オブジェクトの値とサービスが必要とする引数間の不一致。
たとえば、アクティビティが起動するサービスがプロセスで使用する製品IDと異なる製品IDを使用するとします。この場合、製品IDのデータ・オブジェクトの内容をサービスが必要とする値に適合させる式を使用できます。
データ・オブジェクトのデータ型とサービスが必要とする引数のデータ型間の不一致。
たとえば、アクティビティが起動するサービスは文字列を使用してオーダーの状態を格納し、サービスは整数値でオーダーの状態を指定する必要があるとします。この場合、その文字列が指定する状態に対応する整数値を計算する式を使用します。
データ・アソシエーションで式を使用して、引数またはデータ・オブジェクトの値をマッピングする前に変更できます。
データ・アソシエーションで式を使用するには:
データ・アソシエーションを変更するアクティビティを右クリックします。
「プロパティ」を選択します。
「実装」タブをクリックします。
「データ・アソシエーション」セクションで、「アソシエーションの使用」を選択します。
「タイプ」リストから、データ・アソシエーションのタイプを選択します。
使用できる式のタイプは、選択するデータ・アソシエーションのタイプによって異なります。
「タイプ」リストの横にある「編集」ボタンをクリックします。
「データ・アソシエーション」ダイアログが表示されます。
式を使用して変更する入出力引数を特定します。
式が単純な場合、表示されたテキスト領域に式を記述できます。
複雑な式を処理する場合、入出力テキスト領域の横にある「式ビルダー」ボタンをクリックして、式ビルダーを起動できます。式を記述できる式ビルダーが表示されます。
「OK」をクリックします。
ループ・マーカーおよびマルチインスタンス・マーカーを使用して複数回実行するサブプロセスを構成できます。
ループ・マーカーおよびマルチインスタンス・マーカーを構成するには、サブプロセスを繰り返す方法を指定する式および条件を定義する必要があります。
ループ・マーカー
ループ・マーカーによって、条件に基づいてサブプロセスを複数回実行できます。サブプロセスの実行前または実行後に条件を評価するように、ループ・マーカーを構成できます。特定の反復回数後に停止するように、ループ・マーカーを構成することもできます。
ループ・マーカーを構成するには、BPMNサービス・エンジンがサブプロセスの繰返しを続行する必要があるかどうかを決定するループ条件を記述する必要があります。
マルチインスタンス・マーカー
マルチインスタンス・マーカーによって、データのセット上の各要素のサブプロセスを実行できます。BPMNサービス・エンジンがマルチインスタンス・ループ・マーカーを使用してサブプロセスを実行すると、インスタンスのセット、データのセット上の各要素のインスタンスが作成されます。パラレルまたは順番にこれらのインスタンスを処理するように、マルチインスタンス・マーカーを構成できます。
マルチインスタンス・ループ・マーカーの次のフィールドには、式を記述する必要があります。
ループ・カーディナリティ
この式は、サブプロセス内に作成するトークンの数を定義します。
完了条件
この式は、サブプロセスの繰返しを停止する時期を決定します。BPMNサービス・エンジンは、トークンがサブプロセスを完了するたびにこの条件を評価します。条件がtrueと評価されると、サブプロセスが完了したとみなされ、インスタンスはプロセス内の次のフロー・オブジェクトに移動します。
ループ・マーカーを構成して、サブプロセスを複数回実行できます。
ループ・マーカーを構成するには:
サブプロセスを右クリックします。
「プロパティ」を選択します。
「ループ特性」タブをクリックします。
「ループ」を選択します。
次のように、ループ条件を指定します。
式言語を選択します。
使用可能なオプションは「シンプル」または「XPath」です。
下のテキスト領域に、ループを駆動する条件を記述します。
オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。
オプションで、次のように、実行するループの最大回数を指定できます。
「ループ最大」を選択します。
数字を指定します。
「次より前」を選択してフロー・オブジェクトの実行前に条件を評価するか、選択解除してフロー・オブジェクトの実行後に条件を評価します。
「OK」をクリックします。
マルチインスタンス・マーカーを構成して、データのセットに基づいてサブプロセスを複数回実行できます。
マルチインスタンス・マーカーを構成するには:
サブプロセスを右クリックします。
「プロパティ」を選択します。
「ループ特性」タブをクリックします。
「MultiInstance」を選択します。
次のように、ループ・カーディナリティを指定します。
式言語を選択します。
使用可能なオプションは「シンプル」または「XPath」です。
下のテキスト領域に、ループ・カーディナリティの指定を記述します。
オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。
オプションで、次のように、完了条件を指定できます。
式言語を選択します。
使用可能なオプションは「シンプル」または「XPath」です。
下のテキスト領域に、ループが完了したかどうかを決定する条件を記述します。
オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。
データ出力を指定するには、「ループ・データ出力」フィールドの横にある「参照」ボタンをクリックします。
データ・オブジェクトまたはサブプロセスに渡す複合データ・オブジェクトの属性を選択できます。通常、選択したデータ・オブジェクトはアイテムのコレクションです。
データ入力を指定するには、「ループ・データ入力」フィールドの横にある「参照」ボタンをクリックします。
データ・オブジェクトまたはサブプロセスの結果を割り当てる複合データ・オブジェクトの属性を選択します。
オプションで、「順次」チェックボックスを選択して、次のトークンがサブプロセスの実行を開始する前に各トークンがサブプロセスを完了する必要があることを指定します。
「OK」をクリックします。
シンプルな式ビルダーには、式を入力するテキスト領域および使用できる変数のリストが含まれています。
シンプルな式ビルダーは、次の機能をサポートしています。
構文の強調表示
シンプルな式ビルダーでは、式内の構文を強調表示して、読取りおよび理解を容易にします。異なるデータ型の値には異なる色が使用されます。
自動コード補完
メソッドを呼び出すドットの入力後に数秒待機すると、シンプルな式ビルダーでは、そのデータ・オブジェクトで呼び出すことができる使用可能な関数のリストが表示されます。シンプルな式ビルダーに式を補完させる場合、[Ctrl]+[Space]
を押すことができます。
オンザフライのエラー・チェック
式を記述すると、シンプルな式ビルダーで式がチェックされます。コンパイルされていない式に赤い波線が引かれます。エラーの原因を見つけるには、赤い波線の上にカーソルを置き、エラーの説明を示すツールチップが表示されるのを待ちます。
図21-1は、シンプルな式ビルダーのダイアログを示しています。
式内のデータ・オブジェクトを使用して、データ・オブジェクトに基づいて計算を実行できます。
式内のデータ・オブジェクトを使用するには:
シンプルな式ビルダーを開きます。
データ・オブジェクトを挿入する場所にカーソルを置きます。
「変数」セクションから、データ・オブジェクトを選択します。
「式に挿入」をクリックします。
「式」テキスト領域に、選択したデータ・オブジェクトが表示されます。
シンプルな式ビルダーでは、次の演算子タイプを使用して、式を作成できます。
算術演算子
単項演算子
等号演算子と関係演算子
条件演算子
これらの演算子を使用して式および条件を作成し、プロセス・フローを駆動できます。一般に、これらの式は、プロセス内のデータ・オブジェクトに基づいて計算を実行します。式と条件はデータ・オブジェクトの値を使用して作成できますが、値は変更できません。
次の式の例では、演算子が使用されています:
totalAmount - discount
deadlineExpired and orderStatus !=complete
activationCount > 3
unitsSold <= 1200
'now' + '2m'
deadline - '1h'
not formComplete
表21-1、表21-2、表21-3、表21-4および表21-5は、シンプルな式ビルダーでサポートされている演算子を説明しています。
表21-2 算術演算子
演算子 | 名前 | 説明 |
---|---|---|
+ |
加算 |
数値データ型を加算します。 文字列同士を連結します。 間隔値を日時値に加算します。 |
- |
減算 |
数値データ型を減算します。 日時値から間隔値を減算します。 |
* |
乗算 |
数値データ型を乗算します。 |
/ |
除算 |
数値データ型を除算します。 |
rem |
剰余 |
除数が被除数で除算しきれない場合の剰余を計算します。 |
( ) |
優先順位 |
演算式の評価の順序を指定します。 |
表21-3 単項演算子
演算子 | 名前 | 説明 |
---|---|---|
+ |
プラス |
数値オペランドの値には影響しません。ある値が正であることを明示的に示す場合に使用します。 |
- |
マイナス |
算術式の符号をマイナスにします。数字の符号を反転します。 |
NOT |
NOT |
論理補数演算子。ブール式の値を否定します。 |
表21-4 等号演算子と関係演算子
演算子 | 名前 | 説明 |
---|---|---|
= |
等しい |
最初のオペランドが2番目のオペランドと等しい場合にtrueを戻します。 |
!= |
等しくない |
最初のオペランドが2番目のオペランドと等しくない場合にtrueを戻します。 |
> |
より大きい |
最初のオペランドが2番目のオペランドより大きい場合にTrueを戻します。 |
>= |
次以上 |
最初のオペランドが2番目のオペランド以上の場合にTrueを戻します。 |
< |
より小さい |
最初のオペランドが2番目のオペランドより小さい場合にtrueを戻します。 |
<= |
次以下 |
最初のオペランドが2番目のオペランド以下の場合にTrueを戻します。 |
表21-5 条件演算子
演算子 | 名前 | 説明 |
---|---|---|
and |
条件付きAND |
両方のオペランドがtrueと評価された場合にtrueを戻します。 |
or |
条件付きOR |
オペランドの1つがtrueと評価された場合にtrueを戻します。 |
シンプルな式ビルダーでは、式および条件を計算および操作するのに使用できる関数をサポートしています。
次の項では、シンプルな式ビルダーでサポートされている関数を説明しています。
次の関数によって、文字列変数およびリテラルを操作し、これらに基づいて計算を実行できます。
この文字列内の文字数を戻します。
シグネチャ:
Int length(String stringToMeasure)
引数:
-
例:
name.length()
length(name)
name.length
文字列に指定された文字列が含まれる場合にtrueを戻します。
シグネチャ:
Bool contains(String mainString, String subString)
引数:
subString
- 検索する文字列。
例:
productName.contains("book")
contains(productName, "book")
次の関数によって、数値のデータ型を使用した計算を実行できます。使用可能な数値のデータ型は、実数、小数および整数です。
この関数を呼び出すのに使用される数値よりも小さい値のうち最大の整数値を戻します。実数および小数のデータ型でこの関数を使用できます。
シグネチャ:
Int floor(Real number)
Int floor(Decimal number)
引数:
-
例:
number.floor()
floor(number)
number.floor
floor(totalAmount/3)
temperature.floor()
この関数を呼び出すのに使用される数値よりも大きい値のうち最小の整数値を戻します。実数および小数のデータ型でこの関数を使用できます。
シグネチャ:
Int ceil(Real number)
Int ceil(Decimal number)
引数:
-
例:
number.ceil()
ceil(number)
number.ceil
この数字に最も近い整数値を戻します。同等に近い整数値が2つある場合、大きい方を戻します。実数および小数のデータ型でこの関数を使用できます。
シグネチャ:
Int round(Real number)
Int round(Decimal number)
引数:
-
例:
number.round()
round(number)
number.round
次の関数によって、時間変数およびリテラルを操作し、これらに基づいて計算を実行できます。使用可能な時間のデータ型は、日時および間隔です。
この日時の変数の年を戻します。
シグネチャ:
Int year(DateTime date)
引数:
-
例:
today.year()
year(today)
today.year
この日時の変数の月を戻します。
シグネチャ:
Int month(DateTime date)
引数:
-
例:
today.month()
month(today)
today.month
この日時の変数の日を戻します。
シグネチャ:
Int day(DateTime date)
引数:
-
例:
today.day()
day(today)
today.day
この日時の変数の時間を戻します。
シグネチャ:
Int hours(DateTime date)
引数:
-
例:
today.hours()
hours(today)
today.hours
この日時の変数の分を戻します。
シグネチャ:
Int minutes(DateTime date)
引数:
-
例:
today.minutes()
minutes(today)
today.minutes
この日時の変数の秒を戻します。
シグネチャ:
Int seconds(DateTime date)
引数:
-
例:
today.seconds()
seconds(today)
today.seconds
Oracle BPMでは、SOA XPath式ビルダーを使用して式を記述できます。この式ビルダーは、標準XPATH言語をサポートしています。
XPath式ビルダーでは、式で使用できる変数のリストが表示されます。また、式で使用できる関数のリストも表示されます。関数を選択すると、式に追加する前にその関数の構文および説明をプレビューできます。
XPathでサポートされている関数の詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』の付録B「XPath拡張関数」を参照してください。
さらに、Oracle BPMはBPM拡張関数のグループをサポートしています。
図21-2は、XPath式ビルダーを示しています。
XPath式に変数を追加して、変数に基づいて計算を実行できます。
XPath式に変数を追加するには:
XPath式ビルダーを起動します。
変数を挿入する場所にカーソルを置きます。
「変数」リストから変数を選択します。
「式に挿入」をクリックします。
「式」テキスト領域に、選択した変数が表示されます。
BPM拡張関数では、XPathを使用して次の要素にアクセスできます。
プロセスおよびプロジェクト・データ・オブジェクト
引数
アクティビティ・インスタンス属性
XPathでは、BPM拡張関数は、BPMNプロセス内に記述された要素の値にアクセスする唯一の方法です。
特定のアクティビティ・インスタンス属性の値を戻します。サポートされているアクティビティ・インスタンス属性の詳細は、アクティビティ・インスタンス属性の概要に関する項を参照してください。
シグネチャ:
bpmn:getActivityInstanceAttribute(activityName, attributeName)
引数:
activity name
- アクティビティ・インスタンス属性を含むアクティビティの名前。
attributeName
- 値を検索するアクティビティ・インスタンス属性の名前。
例:
bpmn:getActivityInstanceAttribute(userTask, priority)
bpmn:getActivityInstanceAttribute(userTask, title)
データ・アソシエーション内の特定の入力引数の値を戻します。
シグネチャ:
bpmn:getDataInput(dataInputName)
引数:
dataInputName
- データ入力引数の名前を含む文字列。
例:
特定のデータ・オブジェクトの値を戻します。
シグネチャ:
bpmn:getDataObject(dataObjectName)
引数:
dataObjectName
- 値を取得するデータ・オブジェクトの名前を含む文字列。
例:
bpmn:getDataObject(discount)
bpmn:getDataObject(approveTermsOutcome)
データ・アソシエーション内の特定のデータ出力引数の値を戻します。
シグネチャ:
pmn:getDataOutput(dataOutputName)
引数:
dataOutputName
- データ出力引数の名前を含む文字列。
例:
ゲートウェイでの特定のアクティビティ・インスタンス属性の値を戻します。ゲートウェイでサポートされているアクティビティ・インスタンス属性の詳細は、アクティビティ・インスタンス属性の概要に関する項を参照してください。
シグネチャ:
bpmn:getGatewayInstanceAttribute(gatewayName, attributeName)
引数:
gatewayName
- 値を取得する属性を含むゲートウェイの名前を含む文字列。
attributeName
- 値を取得する属性の名前を含む文字列。
例:
プロセス・アクティビティ・インスタンス属性に対応する値を戻します。サポートされているアクティビティ・インスタンス属性の詳細は、アクティビティ・インスタンス属性の概要に関する項を参照してください。
シグネチャ:
bpmn:getProcessInstanceAttribute(attributeName)
引数:
attributeName
- 値を検索するプロセス・インスタンス属性の名前を含む文字列。
例:
bpmn:getProcessInstanceAttribute(owner)