[SOA/BPM, FMW] Intiatorタスクの前にサービスアクティビティを配置する

BPMに関する質問が届いていたのでご紹介します。

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式を使えばこの値は簡単に取得できますが、あくまでもサンプルです。
create or replace function getID
RETURN VARCHAR2
IS
BEGIN
  RETURN to_char(systimestamp,'yyyy/mm/dd hh24:mi:ss.ff3');
END;
先ほどのBPMプロセス内のサービスタスクで、データアソシエーション(データマッピング)し、Functionを呼び出した結果を取得します。


Initiatorタスクに、取得した値を渡すよう、データアソシエーションを設定しておきます。


ユーザータスクの画面は出来合いのものを使うことにして、デプロイしました。
BPM Workspaceから実行してみます。
[アプリケーション]からプロセスを起動してみると・・・


dbReferenceサービスを使って取得したデータを表示しているようです。
Fusion Middleware Controlからも確認します。


上図の赤枠で囲んだ部分をクリックすると、データの入出力がXML形式で表示されます。その中身がこちら。
<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>
GETIDというFunctionを呼び出した結果が表示されていることがわかります。

0 件のコメント:

コメントを投稿