ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド
11g リリース1(11.1.1)
B61409-01
  目次へ移動
目次

前
 
次
 

21 式の記述

この章では、式および条件を必要とするBPMN要素の式および条件の記述方法について説明します。Oracle BPMでは、異なるユーザーの要件に適応する2タイプの式エディタが提供されています。この章では、各式ビルダーで使用される式言語および記述する式で使用できる操作について説明します。

この章の内容は次のとおりです。

21.1 Oracle BPMでの式の概要

BPM要素では、動作を定義する条件または式を記述する必要がある場合があります。たとえば、500ドルを超えるすべての支出がマネージャによって承認されていることを確認する条件シーケンス・フローを使用するプロセスのフローを制御することがあります。

Oracle BPMでは、次の2つの式および条件の記述方法が提供されています。

シンプルな式ビルダーではドット表記を使用し、その構文はJavaによく似ています。XPATH式ビルダーでは標準XPATH言語を使用します。

Oracle BPMでは式を使用して、次のBPMN要素を構成します。

式の結果は、構成する要素のタイプに応じて異なります。表21-1は、各BPM要素で必要とされる式を説明しています。

表21-1 式タイプ

BPMN要素 式タイプ

条件シーケンス・フロー

評価時にブール値となる条件。

複合ゲートウェイ

評価時にブール値となる条件。

タイマー・イベント

時間日付: 評価時に日時値となる式。

サイクル: 評価時に間隔値となる式。

データ・アソシエーション

評価時にデータ・アソシエーションでの引数と同じタイプの値となる式。

ユーザー・タスク拡張プロパティ

評価時に文字列値となる式。

ループ・マーカー

評価時にブール値となる条件。

マルチインスタンス・マーカー

ループ・カーディナリティ: 評価時に整数値となる式。

完了条件: 評価時にブール値となる条件。


式をサポートするBPM要素の構成ダイアログには、埋込みの式エディタおよび式ビルダーを起動するボタンがあります。後者は長い式を操作する場合に適しています。どちらの式ビルダーでも、使用可能な変数を参照できます。XPATH式ビルダーでは、使用可能な関数も参照できます。

21.2 条件シーケンス・フローでの条件の記述

条件シーケンス・フローを実装するには、条件を指定する必要があります。トークンが条件シーケンス・フローに到着すると、BPMNサーバー・エンジンが条件シーケンス・フローの条件を評価し、トークンがどのシーケンス・フローに従うかを決定します。

通常、条件はプロジェクトおよびプロセス・データ・オブジェクトの値に基づいていますが、要件には基づいていません。コンパイラが条件を評価する際に、条件はブール値となる必要があります。ブール値とならない条件を記述した場合、シンプルな式ビルダーではエラーが発生します。

21.2.1 条件シーケンス・フローの実装方法

条件シーケンス・フローを実装する式を定義する必要があります。

条件シーケンス・フローを実装するには:

  1. 条件シーケンス・フローを右クリックします。

  2. 「プロパティ」を選択します。

  3. 「実装」タブをクリックします。

  4. 「タイプ」リストから、「条件」を選択します。

  5. 「式」セクションで、条件を記述するのに使用する式ビルダーのタイプを選択します。

  6. 条件が単純な場合、表示されたテキスト領域に条件を記述できます。

    複雑な条件を処理する場合、テキスト領域の横にある「式ビルダーの起動」ボタンをクリックして、式ビルダーを起動できます。

  7. 「OK」をクリックします。

21.3 複合ゲートウェイでの式の記述

複合ゲートウェイを実装するには、到着したトークンをゲートウェイが解放する時期を指定する条件を提供する必要があります。新規トークンが複合ゲートウェイに到着するたびに、BPMNサービス・エンジンはこの条件を評価します。条件がtrueと評価されると、複合ゲートウェイはtrueと評価されるまでに到着したすべてのトークンを解放します。

通常、条件は、複合ゲートウェイに到着したトークンの数に基づいています。たとえば、2つのトークンがマージ・ゲートウェイに到着した後でゲートウェイがトークンを解放するようにするとします。

例21-1は、2つのトークンがマージ・ゲートウェイに到着した後でゲートウェイに到着したトークンを解放するゲートウェイを構成する条件を示しています。

例21-1 複合ゲートウェイでの条件

activationCount >= 2

21.3.1 複合ゲートウェイの実装方法

ゲートウェイを実装する式を定義する必要があります。

複合ゲートウェイを実装するには:

  1. 複合ゲートウェイを右クリックします。

  2. 「プロパティ」を選択します。

  3. 「実装」タブをクリックします。

  4. 「式」セクションで、条件を記述するのに使用する式ビルダーのタイプを選択します。

  5. 条件が単純な場合、表示されたテキスト領域に条件を記述できます。

    複雑な条件を処理する場合、テキスト領域の横にある「式ビルダーの起動」ボタンをクリックして、式ビルダーを起動できます。

  6. 「OK」をクリックします。

21.4 タイマー・イベントでの式の記述

ターマー・イベントを実装するために、日付または間隔を指定するか、日付または間隔を計算する式を記述するかを選択できます。

通常、日付または間隔が固定しない場合に式を使用します。

次の例は、日付を表すタイマー・イベントで使用できる式を示しています。

次の例は、間隔を表すタイマー・イベントで使用できる式を示しています。

21.4.1 タイマー・イベントでの式の使用方法

式を使用して、タイマー・イベントの実装における日付または間隔を計算できます。

タイマー・イベントで式を使用するには:

  1. タイマー・イベントを右クリックします。

  2. 「プロパティ」を選択します。

  3. 「実装」タブをクリックします。

  4. 「式の使用」を選択します。

  5. 「式」セクションで、条件を記述するのに使用する式ビルダーのタイプを選択します。

  6. 式が単純な場合、表示されたテキスト領域に式を記述できます。

    複雑な式を処理する場合、テキスト領域の横にある「式ビルダーの起動」ボタンをクリックして、式ビルダーを起動できます。式を記述できる式ビルダーが表示されます。

  7. 「OK」をクリックします。

21.5 データ・アソシエーションでの式の記述

データ・アソシエーションで式を使用して、アクティビティ実装引数に関連付ける前に入出力値を変更できます。

通常、データ・オブジェクトとアクティビティ実装引数間に不一致がある場合に、式を使用します。次の例は、データ・アソシエーションで式を使用できる状況を説明しています。

21.5.1 データ・アソシエーションでの式の使用方法

データ・アソシエーションで式を使用して、引数またはデータ・オブジェクトの値をマッピングする前に変更できます。

データ・アソシエーションで式を使用するには:

  1. データ・アソシエーションを変更するアクティビティを右クリックします。

  2. 「プロパティ」を選択します。

  3. 「実装」タブをクリックします。

  4. 「データ・アソシエーション」セクションで、「アソシエーションの使用」を選択します。

  5. 「タイプ」リストから、データ・アソシエーションのタイプを選択します。

    使用できる式のタイプは、選択するデータ・アソシエーションのタイプによって異なります。

  6. 「タイプ」リストの横にある「編集」ボタンをクリックします。

    「データ・アソシエーション」ダイアログが表示されます。

  7. 式を使用して変更する入出力引数を特定します。

  8. 式が単純な場合、表示されたテキスト領域に式を記述できます。

    複雑な式を処理する場合、入出力テキスト領域の横にある「式ビルダー」ボタンをクリックして、式ビルダーを起動できます。式を記述できる式ビルダーが表示されます。

  9. 「OK」をクリックします。

21.6 サブプロセス内のループ・マーカーおよびマルチインスタンス・マーカーでの条件の記述

ループ・マーカーおよびマルチインスタンス・マーカーを使用して複数回実行するサブプロセスを構成できます。

ループ・マーカーおよびマルチインスタンス・マーカーを構成するには、サブプロセスを繰り返す方法を指定する式および条件を定義する必要があります。

ループ・マーカー

ループ・マーカーによって、条件に基づいてサブプロセスを複数回実行できます。サブプロセスの実行前または実行後に条件を評価するように、ループ・マーカーを構成できます。特定の反復回数後に停止するように、ループ・マーカーを構成することもできます。

ループ・マーカーを構成するには、BPMNサービス・エンジンがサブプロセスの繰返しを続行する必要があるかどうかを決定するループ条件を記述する必要があります。

マルチインスタンス・マーカー

マルチインスタンス・マーカーによって、データのセット上の各要素のサブプロセスを実行できます。BPMNサービス・エンジンがマルチインスタンス・ループ・マーカーを使用してサブプロセスを実行すると、インスタンスのセット、データのセット上の各要素のインスタンスが作成されます。パラレルまたは順番にこれらのインスタンスを処理するように、マルチインスタンス・マーカーを構成できます。

マルチインスタンス・ループ・マーカーの次のフィールドには、式を記述する必要があります。

21.6.1 ループ・マーカーの構成方法

ループ・マーカーを構成して、サブプロセスを複数回実行できます。

ループ・マーカーを構成するには:

  1. サブプロセスを右クリックします。

  2. 「プロパティ」を選択します。

  3. 「ループ特性」タブをクリックします。

  4. 「ループ」を選択します。

  5. 次のように、ループ条件を指定します。

    1. 式言語を選択します。

      使用可能なオプションは「シンプル」または「XPath」です。

    2. 下のテキスト領域に、ループを駆動する条件を記述します。

      オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。

  6. オプションで、次のように、実行するループの最大回数を指定できます。

    1. 「ループ最大」を選択します。

    2. 数字を指定します。

  7. 「次より前」を選択してフロー・オブジェクトの実行前に条件を評価するか、選択解除してフロー・オブジェクトの実行後に条件を評価します。

  8. 「OK」をクリックします。

21.6.2 マルチインスタンス・マーカーの構成方法

マルチインスタンス・マーカーを構成して、データのセットに基づいてサブプロセスを複数回実行できます。

マルチインスタンス・マーカーを構成するには:

  1. サブプロセスを右クリックします。

  2. 「プロパティ」を選択します。

  3. 「ループ特性」タブをクリックします。

  4. 「MultiInstance」を選択します。

  5. 次のように、ループ・カーディナリティを指定します。

    1. 式言語を選択します。

      使用可能なオプションは「シンプル」または「XPath」です。

    2. 下のテキスト領域に、ループ・カーディナリティの指定を記述します。

      オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。

  6. オプションで、次のように、完了条件を指定できます。

    1. 式言語を選択します。

      使用可能なオプションは「シンプル」または「XPath」です。

    2. 下のテキスト領域に、ループが完了したかどうかを決定する条件を記述します。

      オプションで、式ビルダーを使用して条件を記述できます。式ビルダーを起動するには、テキスト領域の横にある「式ビルダー」ボタンをクリックします。

  7. データ出力を指定するには、「ループ・データ出力」フィールドの横にある「参照」ボタンをクリックします。

    データ・オブジェクトまたはサブプロセスに渡す複合データ・オブジェクトの属性を選択できます。通常、選択したデータ・オブジェクトはアイテムのコレクションです。

  8. データ入力を指定するには、「ループ・データ入力」フィールドの横にある「参照」ボタンをクリックします。

    データ・オブジェクトまたはサブプロセスの結果を割り当てる複合データ・オブジェクトの属性を選択します。

  9. オプションで、「順次」チェックボックスを選択して、次のトークンがサブプロセスの実行を開始する前に各トークンがサブプロセスを完了する必要があることを指定します。

  10. 「OK」をクリックします。

21.7 シンプルな式ビルダーを使用した式および条件の記述

シンプルな式ビルダーには、式を入力するテキスト領域および使用できる変数のリストが含まれています。

シンプルな式ビルダーは、次の機能をサポートしています。

図21-1は、シンプルな式ビルダーのダイアログを示しています。

図21-1 シンプルな式ビルダー

この図は、シンプルな式ビルダーを示しています。

21.7.1 式内のデータ・オブジェクトの使用方法

式内のデータ・オブジェクトを使用して、データ・オブジェクトに基づいて計算を実行できます。

式内のデータ・オブジェクトを使用するには:

  1. シンプルな式ビルダーを開きます。

  2. データ・オブジェクトを挿入する場所にカーソルを置きます。

  3. 「変数」セクションから、データ・オブジェクトを選択します。

  4. 「式に挿入」をクリックします。

    「式」テキスト領域に、選択したデータ・オブジェクトが表示されます。

21.7.2 式内の関数の使用方法

式内の関数を使用するには、「式」テキスト領域に関数名を入力します。名前の一部を記述して[Ctrl]+[Space]を押すと、式ビルダーによって関数の名前が補完されます。

21.8 シンプルな式ビルダーでサポートされている演算子

シンプルな式ビルダーでは、次の演算子タイプを使用して、式を作成できます。

これらの演算子を使用して式および条件を作成し、プロセス・フローを駆動できます。一般に、これらの式は、プロセス内のデータ・オブジェクトに基づいて計算を実行します。式と条件はデータ・オブジェクトの値を使用して作成できますが、値は変更できません。

次の式の例では、演算子が使用されています:

表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を戻します。


21.8.1 演算子の優先順位

演算子の優先順位とは、コンパイラが演算子を評価する順序のことです。式内の演算子の優先順位は、カッコを使用して変更できます。

シンプルな式ビルダーの演算子の優先順位は次のとおりです。

  • 単項のプラスおよび単項のマイナス

  • 乗算、除算、剰余

  • 加算および減算

  • 次より小さい、次より大きい、次以下、次以上

  • 等しい、等しくない

  • NOT

  • 条件付きAND

  • 条件付きOR

21.9 シンプルな式ビルダーでサポートされている関数

シンプルな式ビルダーでは、式および条件を計算および操作するのに使用できる関数をサポートしています。

次の項では、シンプルな式ビルダーでサポートされている関数を説明しています。

21.9.1 文字列関数

次の関数によって、文字列変数およびリテラルを操作し、これらに基づいて計算を実行できます。

21.9.1.1 length

この文字列内の文字数を戻します。

シグネチャ:

Int length(String stringToMeasure)

引数:

-

例:

name.length()

length(name)

name.length

21.9.1.2 連結

1つ以上の文字列を連結します。

例:

name + " " + lastName

"Oracle " + "BPM"

21.9.1.3 contains

文字列に指定された文字列が含まれる場合にtrueを戻します。

シグネチャ:

Bool contains(String mainString, String subString)

引数:

subString - 検索する文字列。

例:

productName.contains("book")

contains(productName, "book")

21.9.1.4 startsWith

文字列が指定された文字列で始まる場合にtrueを戻します。

シグネチャ:

Bool startsWith(String mainString, String subString)

引数:

subString - 文字列の最初で検索する文字列。

例:

productId.startsWith("ABC")

startsWith(productId, "ABC")

21.9.2 数値関数

次の関数によって、数値のデータ型を使用した計算を実行できます。使用可能な数値のデータ型は、実数、小数および整数です。

21.9.2.1 floor

この関数を呼び出すのに使用される数値よりも小さい値のうち最大の整数値を戻します。実数および小数のデータ型でこの関数を使用できます。

シグネチャ:

Int floor(Real number)

Int floor(Decimal number)

引数:

-

例:

number.floor()

floor(number)

number.floor

floor(totalAmount/3)

temperature.floor()

21.9.2.2 ceil

この関数を呼び出すのに使用される数値よりも大きい値のうち最小の整数値を戻します。実数および小数のデータ型でこの関数を使用できます。

シグネチャ:

Int ceil(Real number)

Int ceil(Decimal number)

引数:

-

例:

number.ceil()

ceil(number)

number.ceil

21.9.2.3 round

この数字に最も近い整数値を戻します。同等に近い整数値が2つある場合、大きい方を戻します。実数および小数のデータ型でこの関数を使用できます。

シグネチャ:

Int round(Real number)

Int round(Decimal number)

引数:

-

例:

number.round()

round(number)

number.round

21.9.2.4 abs

この数字の絶対値を戻します。整数、実数および小数のデータ型でこの関数を使用できます。

シグネチャ:

Int abs(Int number)

Real abs(Real number)

Decimal abs(Decimal number)

引数:

-

例:

number.abs()

abs(number)

number.abs

21.9.3 日付/時刻関数

次の関数によって、時間変数およびリテラルを操作し、これらに基づいて計算を実行できます。使用可能な時間のデータ型は、日時および間隔です。

21.9.3.1 now

システムの現在の日付および時刻の特別な表記。

例:

setReceivedDate('now')

21.9.3.2 加算

間隔を日時の変数または値に加算します。

例:

today + '1d3h'

now + 3d

vacationStartingDate + '1M'

21.9.3.3 減算

間隔を日時の変数または値から減算します。

例:

today - '2d3h25m'

now - age

expirationDate - '7d'

21.9.3.4 year

この日時の変数の年を戻します。

シグネチャ:

Int year(DateTime date)

引数:

-

例:

today.year()

year(today)

today.year

21.9.3.5 month

この日時の変数の月を戻します。

シグネチャ:

Int month(DateTime date)

引数:

-

例:

today.month()

month(today)

today.month

21.9.3.6 day

この日時の変数の日を戻します。

シグネチャ:

Int day(DateTime date)

引数:

-

例:

today.day()

day(today)

today.day

21.9.3.7 hours

この日時の変数の時間を戻します。

シグネチャ:

Int hours(DateTime date)

引数:

-

例:

today.hours()

hours(today)

today.hours

21.9.3.8 minutes

この日時の変数の分を戻します。

シグネチャ:

Int minutes(DateTime date)

引数:

-

例:

today.minutes()

minutes(today)

today.minutes

21.9.3.9 seconds

この日時の変数の秒を戻します。

シグネチャ:

Int seconds(DateTime date)

引数:

-

例:

today.seconds()

seconds(today)

today.seconds

21.9.3.10 timezone

UTCからのオフセットを表す間隔値を戻します。

シグネチャ:

Interval timezone()

引数:

-

例:

'1995-02-03 23:30:23-3:30'.timezone()

timezone('1995-02-03 23:30:23-3:30')

'1995-02-03 23:30:23-3:30'.timezone

この例の結果は「-3h30m」です。

21.10 XPath式ビルダーを使用した式の記述

Oracle BPMでは、SOA XPath式ビルダーを使用して式を記述できます。この式ビルダーは、標準XPATH言語をサポートしています。

XPath式ビルダーでは、式で使用できる変数のリストが表示されます。また、式で使用できる関数のリストも表示されます。関数を選択すると、式に追加する前にその関数の構文および説明をプレビューできます。

XPathでサポートされている関数の詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』の付録B「XPath拡張関数」を参照してください。

さらに、Oracle BPMはBPM拡張関数のグループをサポートしています。

図21-2は、XPath式ビルダーを示しています。

図21-2 XPath式ビルダー

この図は、XPath式ビルダーを示しています。

21.10.1 XPath式への変数の追加方法

XPath式に変数を追加して、変数に基づいて計算を実行できます。

XPath式に変数を追加するには:

  1. XPath式ビルダーを起動します。

  2. 変数を挿入する場所にカーソルを置きます。

  3. 「変数」リストから変数を選択します。

  4. 「式に挿入」をクリックします。

    「式」テキスト領域に、選択した変数が表示されます。

21.10.2 XPath式内の関数の使用方法

XPath式で関数を呼び出すことができます。XPath式ビルダーでは、機能ごとにグループ化された関数のリストを参照できます。

XPath式で関数を使用するには:

  1. XPath式ビルダーを起動します。

  2. 式を挿入する場所にカーソルを置きます。

  3. 「関数」リストから関数カテゴリを選択します。

    「関数」リストの下に、選択したカテゴリで使用可能な関数のリストが表示されます。

  4. 使用可能な関数のリストから関数を選択します。

  5. 「式に挿入」をクリックします。

    「式」テキスト領域に、選択した関数が表示されます。

21.11 XPath BPM拡張関数

BPM拡張関数では、XPathを使用して次の要素にアクセスできます。

XPathでは、BPM拡張関数は、BPMNプロセス内に記述された要素の値にアクセスする唯一の方法です。

21.11.1 getActivityInstanceAttribute

特定のアクティビティ・インスタンス属性の値を戻します。サポートされているアクティビティ・インスタンス属性の詳細は、アクティビティ・インスタンス属性の概要に関する項を参照してください。

シグネチャ:

bpmn:getActivityInstanceAttribute(activityName, attributeName)

引数:

activity name - アクティビティ・インスタンス属性を含むアクティビティの名前。

attributeName - 値を検索するアクティビティ・インスタンス属性の名前。

例:

bpmn:getActivityInstanceAttribute(userTask, priority)

bpmn:getActivityInstanceAttribute(userTask, title)

21.11.2 getDataInput

データ・アソシエーション内の特定の入力引数の値を戻します。

シグネチャ:

bpmn:getDataInput(dataInputName)

引数:

dataInputName - データ入力引数の名前を含む文字列。

例:

21.11.3 getDataObject

特定のデータ・オブジェクトの値を戻します。

シグネチャ:

bpmn:getDataObject(dataObjectName)

引数:

dataObjectName - 値を取得するデータ・オブジェクトの名前を含む文字列。

例:

bpmn:getDataObject(discount)

bpmn:getDataObject(approveTermsOutcome)

21.11.4 getDataOutput

データ・アソシエーション内の特定のデータ出力引数の値を戻します。

シグネチャ:

pmn:getDataOutput(dataOutputName)

引数:

dataOutputName - データ出力引数の名前を含む文字列。

例:

21.11.5 getGatewayInstanceAttribute

ゲートウェイでの特定のアクティビティ・インスタンス属性の値を戻します。ゲートウェイでサポートされているアクティビティ・インスタンス属性の詳細は、アクティビティ・インスタンス属性の概要に関する項を参照してください。

シグネチャ:

bpmn:getGatewayInstanceAttribute(gatewayName, attributeName)

引数:

gatewayName - 値を取得する属性を含むゲートウェイの名前を含む文字列。

attributeName - 値を取得する属性の名前を含む文字列。

例:

21.11.6 getProcessInstanceAttribute

プロセス・アクティビティ・インスタンス属性に対応する値を戻します。サポートされているアクティビティ・インスタンス属性の詳細は、アクティビティ・インスタンス属性の概要に関する項を参照してください。

シグネチャ:

bpmn:getProcessInstanceAttribute(attributeName)

引数:

attributeName - 値を検索するプロセス・インスタンス属性の名前を含む文字列。

例:

bpmn:getProcessInstanceAttribute(owner)