25 BPMスクリプトの記述

BPMスクリプトを使用してBPMプロジェクト内のデータ・オブジェクトにアクセスし、変更する方法を学習します。

25.1 BPMスクリプトの概要

Oracle BPMは、スクリプト言語としてGroovy 2.1コンパイラおよでびランタイム(静的コンパイルを有効化)をサポートしています。

スクリプティングは次のコンテキストで使用できます。

スクリプト・ブロック内では、ビジネス・カタログ、Java 6 SE APIライブラリ、およびBPMプロジェクトに含まれているすべてのJARファイルからタイプを作成および使用できます。

25.2 BPMコード・エディタの概要

BPMコード・エディタには、基本的な構文の強調表示、エラーと警告の強調表示、およびコードの補完の機能が備わっています。

  • 基本的な構文の強調表示

    語のカテゴリに応じて様々な色およびフォントでコードを表示します。構文の強調表示は、開発者が自身のコード内の誤りを発見するためにも役立ちます。

  • エラーおよび警告の強調表示

    コードの記述中にコンパイル・エラーおよび警告を強調表示します。問題の説明も提供されます。

  • コードの補完

    ユーザーが入力を終了する前に、ユーザーが入力しようとしている語または語句を予測します。

コード・エディタでは、次のタイプのコード補完がサポートされています。

  • 継承されたメンバー(extends/implements)

  • インスタンス・メンバー(fields/methods)

  • クラス・メンバー(fields/methods)

  • ローカル変数

  • メソッド・パラメータ

  • プリミティブ・タイプ

  • クラス名(importが存在しない場合、自動的に追加されます)

このエディタには、オプションが関連性順に表示されます。関連性が同じオプションが複数ある場合は、アルファベット順に並べられます。

図25-1は、スクリプト・タスクが実装されているスクリプト・エディタを示しています。

図25-1 スクリプト・エディタ

図25-1の説明が続きます
「図25-1 スクリプト・エディタ」の説明

25.3 スクリプティング・カタログの概要

スクリプティング・カタログには、スクリプトに使用できるすべてのライブラリが含まれています。これらのライブラリには、コンポーネントが含まれており、それらは、それらをインスタンス化してそれらのメソッドを呼び出すことでアクセスできます。これらのコンポーネントは、モジュールに格納されています。

スクリプティング・カタログには、次のコンポーネントが含まれています。

  • デフォルトGroovyライブラリ

  • デフォルトJavaライブラリ

  • ビジネス・カタログ・コンポーネント

  • インポートされたカスタム・ライブラリ

図25-2 「スクリプティング・カタログ」ウィンドウ

図25-2の説明が続きます
「図25-2 「スクリプティング・カタログ」ウィンドウ」の説明

25.4 カスタム・ライブラリのインポート

プロジェクトに役立つ関数が含まれている外部Javaライブラリを使用できます。これによって、様々な問題を解決し、Java開発者が使用できる膨大な数のライブラリから利益を得られます。

これらのJavaライブラリをインポートして、Groovyスクリプトから呼び出すことができます。

Javaライブラリをインポートすると、それはそのBPMプロジェクトのスクリプティング・カタログの一部になり、記述するスクリプトから使用できるようになります。

25.4.1 カスタム・ライブラリのインポート方法

外部Javaライブラリを使用するには、最初にそれをBPMプロジェクトのスクリプティング・カタログにインポートする必要があります。

カスタム・ライブラリをインポートするには:

  1. ライブラリをインポートするビジネス・オブジェクトまたはプロセスを開きます。
  2. 「スクリプティング・カタログ」ウィンドウで「ライブラリの編集」をクリックします。

    「ライブラリ」ダイアログ・ボックスが開きます。

  3. 「追加」ボタンをクリックします。

    「開く」ダイアログ・ボックスが開きます。

  4. 外部ライブラリが含まれているJARファイルを選択します。
  5. 「開く」をクリックします。

    選択したライブラリが「ライブラリ」表に表示されます。

  6. そのライブラリを選択します。
  7. 「OK」をクリックします。

    選択したライブラリが「スクリプティング・カタログ」に表示され、スクリプト内でそのクラスを使用できるようになります。orgやcomのように、いくつかのライブラリは既存のモジュールに表示されることがあります。

25.5 BPMプロジェクトの要素の使用

BPMプロジェクトの要素のいくつかの値にアクセスでき、それらの値を操作したり、それらを使用して処理を実行できます。

スクリプトからBPMプロジェクトの次の要素にアクセスできます。

  • プロジェクト・データ・オブジェクト

  • プロセス・データ・オブジェクト

  • ビジネス・パラメータ

プロジェクト・データ・オブジェクトおよびプロセス・データ・オブジェクトは、スクリプト内で変数として使用できます。

25.5.1 ビジネス・オブジェクトの使用方法

Javaオブジェクトの属性およびメソッドにアクセスする場合と同じ方法で、ビジネス・オブジェクトとして定義されているデータ・オブジェクトの属性およびメソッドにアクセスできます。

例: 個人をモデル化するビジネス・データ・オブジェクトを作成しました。このビジネス・オブジェクトには、名前属性と昇格メソッドが含まれています。

タイプ「個人」のプロセス・データ・オブジェクトも定義しました。

名前属性には次のコードを使用してアクセスできます。

person.name;

昇格メソッドには次のコードを使用してアクセスできます。

person.promote;

ビジネス・オブジェクトのインスタンスを作成し、それをローカル変数に格納するには:

  1. ビジネス・オブジェクトをインポートします。

    ビジネス・オブジェクトのインポート方法の詳細は、「ビジネス・カタログからのビジネス・オブジェクトのインポート」を参照してください。

  2. ビジネス・オブジェクトのタイプを指定して変数を作成し、それにビジネス・オブジェクトの新しいインスタンスを割り当てます。

次の例では、「個人」タイプをインポートし、タイプpersonのローカル変数を作成し、値をその属性に割り当て、ローカル・インスタンスを「個人」プロセス・データ・オブジェクトに割り当てます。

def localPerson = new Person();
localPerson.firstName = "John";
localPerson.lastName = "Cooper"
this.person = localPerson;

25.5.2 ビジネス・パラメータの使用方法

組織のビジネス・パラメータを定義した後、そのgetterメソッドを使用してそれにアクセスできます。

たとえば、ビジネス・パラメータTAX_CODEを定義した場合、次のコードを使用してそれにアクセスできます。

this.getTAXCODE()

25.6 ビジネス・カタログからのビジネス・オブジェクトのインポート

ビジネス・カタログで定義されているビジネス・オブジェクトをスクリプトで使用できます。これを行うには、最初にビジネス・オブジェクトをインポートする必要があります。

ビジネス・カタログからビジネス・オブジェクトをインポートするには:

  1. スクリプト・エディタで、「インポートの選択」をクリックします。

    「インポートの選択」ダイアログ・ボックスが表示されます。

  2. 「追加」ボタンをクリックします。

    「インポート」表内に新しい行が表示されます。

  3. そのビジネス・オブジェクトへのパスの入力を開始します。

    例: oracle.scripting.catalog.shipping.ShipOrder

    自動完了リストに、オプションのリストが表示されます。

  4. 自動完了リストからインポートするビジネス・オブジェクトを選択します。
  5. 「OK」をクリックします。

    選択したインポートをコードで使用できるようになります。

25.7 事前定義済変数

変数predefは、すべてのスクリプト・タスク・メソッド・コンテキストで使用できます。この変数によって、使用可能な事前定義済変数にアクセスできます。

次の表は、サポートされている事前定義済変数と、Groovy式を使用してそれらにアクセスする方法を示しています。事前定義済変数のアクセス・タイプが読取り/書込みである場合、Groovy式を使用してその事前定義済変数の値を表示し、それを変更できます。アクセス・タイプが読取り専用である場合、その事前定義済変数の値は表示のみ可能です。

ノート:

BPMNは、データに不可欠なアクションのみを実行し、データの信頼性は確認しません。事前定義の変数値は検証する必要がありますが、クライアント・アプリケーションで、正しい値を設定する必要があります。

表25-1 事前定義済変数にアクセスするためのGroovy式

事前定義済変数 Groovy式 アクセス・タイプ

組織単位

predef.organizationalUnit

読取り/書込み

タイトル

predef.title

読取り/書込み

作成日

predef.creationDate

読取り専用

変更日

predef.modifyDate

読取り専用

インスタンス番号

predef.instanceNumber

読取り専用

インスタンスID

predef.instanceId

読取り専用

ECID

predef.ecid

読取り専用

プロセスDN

predef.processDN

読取り専用

対話ID

predef.conversationId

読取り専用

コンポーネント・タイプ

predef.component.type

読取り専用

コンポーネント名

predef.component.name

読取り専用

州

predef.state

読取り専用

コンポジット名

predef.composite.name

読取り専用

コンポジットDN

predef.composite.dn

読取り専用

コンポジット・ラベル

predef.composite.label

読取り専用

コンポジット・リビジョン

predef.composite.revision

読取り専用

コンポジット・インスタンスID

predef.composite.instanceId

読取り専用

アクティビティ名

predef.activity.name

読取り専用

優先度

predef.priority

読取り/書込み

作成者

predef.creator

読取り/書込み

所有者

predef.owner

読取り/書込み

所有者タイプ

predef.ownerType

読取り/書込み

アクション

predef.action

読取り/書込み

有効期限

predef.expiration

読取り/書込み

レビューア

predef.reviewer

読取り/書込み

レビューア・タイプ

predef.reviewerType

読取り/書込み

期日

predef.dueDate

読取り/書込み

25.8 スクリプト・タスクの実装

BPMNスクリプト・タスクは、スクリプトを実行するアクティビティです。

このスクリプトは、Groovyで記述されており、BPMプロジェクトで定義されているデータ・オブジェクトの値にアクセスして変更できます。

25.8.1 スクリプト・タスクの実装方法

スクリプト・タスクは、Groovyコードを使用して実装する必要があります。

スクリプト・タスクを実装するには:

  1. スクリプト・タスクをBPMNプロセスに追加します。
  2. スクリプト・タスクを右クリックします。
  3. 「スクリプトに移動」を選択します。

    「スクリプト」タブが表示されます。このタブで、スクリプト・タスクを実装するスクリプトを記述できます。プロセス・エディタに戻り、「設計者」タブを選択します。

25.9 XMLスキーマ・タイプに対するタイプの説明マッピング

この項では、スクリプトで使用されるXMLスキーマ・データ型および型の説明のマッピングを示します。

表25-2 XMLスキーマ・タイプに対するタイプの説明のマッピング

XMLスキーマ・データ型 タイプの説明

xsd:string

java.lang.String

xsd:normalizedString

java.lang.String

xsd:token

java.lang.String

xsd:Name

java.lang.String

xsd:QName

java.lang.String

xsd:NCName

java.lang.String

xsd:anyURI

java.lang.String

xsd:language

java.lang.String

xsd:ID

java.lang.String

xsd:IDREF

java.lang.String

xsd:ENTITY

java.lang.String

xsd:NOTATION

java.lang.String

xsd:NMTOKEN

java.lang.String

xsd:uriReference

java.lang.String

xsd:anySimpleType

java.lang.String

xsd:IDREFS

java.lang.String

xsd:ENTITIES

java.lang.String

xsd:NMTOKENS

java.lang.String

xsd:timeInstant

java.lang.String

xsd:timeDuration

java.lang.String

xsd:anyType

java.lang.String

xsd:byte

java.lang.Byte

xsd:unsignedByte

java.lang.Byte

xsd:short

java.lang.Short

xsd:unsignedShort

java.lang.Short

xsd:int

java.lang.Integer

xsd:unsignedInt

java.lang.Integer

xsd:gDay

java.lang.Integer

xsd:gMonth

java.lang.Integer

xsd:gYear

java.lang.Integer

xsd:integer

java.math.BigInteger

xsd:positiveInteger

java.math.BigInteger

xsd:negativeInteger

java.math.BigInteger

xsd:nonPositiveInteger

java.math.BigInteger

xsd:nonNegativeIntege

java.math.BigInteger

xsd.long

java.lang.Long

xsd:unsignedLong

java.lang.Long

xsd:decimal

Decimal

xsd:float

java.lang.Float

xsd:double

java.lang.Double

xsd:boolean

java.lang.Boolean

xsd:dateTime

com.oracle.scripting.lib.xml.datatype.XmlCalendar

xsd:time

com.oracle.scripting.lib.xml.datatype.XmlCalendar

xsd:date

com.oracle.scripting.lib.xml.datatype.XmlCalendar

xsd:gYearMonth

com.oracle.scripting.lib.xml.datatype.XmlCalendar

xsd:gMonthDate

com.oracle.scripting.lib.xml.datatype.XmlCalendar

xsd:duration

com.oracle.scripting.lib.xml.datatype.XmlDuration

xsd:base64Binary

byte[]

xsd:hexBinary

byte[]