Q) Initiatorユーザーアクティビティに初期値を設定したいのだけど、データベースから取得した値を使いたい。それって可能なの?
A) 11gと12cではやり方が違いますが、実現できます。
11gまで(11.1.1.9も含みます)
Initiatorに対応する画面内でManaged Beanを使ったり、ユーザーアクティビティのデータ・アソシエーションでXPath式を使ったりする必要があります。Initiatorの前には、スクリプトタスクのみ配置可能という制限があるため、Database Adapterを使うなど、サービスコールを使うことはできません。もし配置すると、ブロッカーに成り得ないという警告メッセージがBPM Studio(JDeveloper)で出てきます。
12c(12.1.3)から
12c(12.1.3)では、その制限がなくなっています。つまり、上記のような配置をしても動作する、ということですね。
動作確認のため、次のようなサンプルアプリケーションを作ってみました。このコンポジット・アプリケーションは、BPMNプロセスとユーザータスクで構成されており、dbRefernceというサービスを参照しています。
このdbReferenceというサービスはDatabase Adapterを介して、データベースに定義したFunctionを呼び出しています。このFunctionは、簡単のため実行開始時の日時をIDとして取得するようにしてあります。
# もちろんXPath式を使えばこの値は簡単に取得できますが、あくまでもサンプルです。
先ほどのBPMプロセス内のサービスタスクで、データアソシエーション(データマッピング)し、Functionを呼び出した結果を取得します。create or replace function getID RETURN VARCHAR2 IS BEGIN RETURN to_char(systimestamp,'yyyy/mm/dd hh24:mi:ss.ff3'); END;
Initiatorタスクに、取得した値を渡すよう、データアソシエーションを設定しておきます。
ユーザータスクの画面は出来合いのものを使うことにして、デプロイしました。
BPM Workspaceから実行してみます。
[アプリケーション]からプロセスを起動してみると・・・
dbReferenceサービスを使って取得したデータを表示しているようです。
Fusion Middleware Controlからも確認します。
上図の赤枠で囲んだ部分をクリックすると、データの入出力がXML形式で表示されます。その中身がこちら。
GETIDというFunctionを呼び出した結果が表示されていることがわかります。<auditQueryPayload auditId="5030" ciKey="40062" xmlns="http://xmlns.oracle.com/bpmn/engine/audit"> <serviceOutput> <element name="OutputParameters" isBusinessIndicator="false"> <value> <![CDATA[<OutputParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/sp/dbReference"> <GETID>2015/05/19 20:11:51.597</GETID> </OutputParameters> ]]> </value> </element> </serviceOutput> <dataState> <dataObject name="dataObject1" isBusinessIndicator="false"> <value> <![CDATA[<dataObject1 xmlns:def="http://www.w3.org/2001/XMLSchema" xsi:type="def:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2015/05/19 20:11:51.597</dataObject1> ]]> </value> </dataObject> </dataState> </auditQueryPayload>
0 件のコメント:
コメントを投稿