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を呼び出した結果が表示されていることがわかります。
<
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 件のコメント:
コメントを投稿