[SOA/BPM] Extract emails list from Group ID for BPEL/BPM Notification service (Fusion Middleware in Action)

原文はこちら。
https://blogs.oracle.com/fmwinaction/entry/extract_emails_list_from_group

Oracle SOA Suiteでは、メール、SMSやFAX、インスタントメッセージベースの通知をBPELやBPMNプロセス内のNotificationタスクを使って作成することができます。様々な通信チャネルを設定する場合、Rubicon Redのの優れたブログエントリを参考にして下さい。
Email Notification with SOA Suite 11g (Rubicon Red)
http://www.rubiconred.com/blog/email-notification-with-soa-suite-11g/
とはいえ、useridやgroupidを渡すだけのHumanTask内の通知とは異なり、Notificationサービスは個別に使う場合には、明示的にメールアドレスや電話番号を指定する必要があります。

こうしたニーズに対応するため、BPELで利用可能なIdentity Service関数を使ってユーザプロパティを取り出すことができます。以下の手順を使ってこうしたプロパティをuseridやgroupidから取り出すことができます…が、面倒ならこちらからSOAプロジェクトをダウンロードできます。

useridからメールアドレスや電話番号を取り出す
この手順はきわめてシンプルです。Identity Service関数のids:getUserPropertyを使ってメールアドレスやその他の属性をレルムから取り出すことができます。

1. 以下のような入出力メッセージタイプを持つ同期BPELプロセスを作成。

2. Assignアクティビティをプロセスにドラッグ&ドロップ。

3. Assignタスクを開き、XPath式をemail属性にドラッグ

4. 以下の式を使ってuseridからメールアドレスを取り出す。
ids:getUserProperty($inputVariable.payload/client:userid,'mail')

5. 同様に以下の式を使ってphone属性を取り出す。
ids:getUserProperty($inputVariable.payload/client:userid,'mobile')
6. デプロイしてテスト。



groupidからメールのリストを取り出す
groupidからメールのリストを取り出す場合、プロセスは少々複雑です。要約すると、2個の大きなステップがあります。
  1. Identity Service関数のids:getUsersInGroup()を使い、groupidからuseridのリストを取り出す。
  2. 先ほどの手順で使ったものと同じ関数ids:getUserProperty()を使ってuiseridのリストを処理し、各useridからメールアドレスをリストに追加する。
課題は、動的なuseridのリストを抽出し、この動的なリストを処理して必要なプロパティを取り出せるか、ということですが、調査の結果、同期プロセスを使って以下のようにすれば実現できます。

1. 以下のような変数を持つ同期型BPELプロセスを作成。
  • usersList:こちらにあるXMLスキーマのUsers要素にマッピング
  • index:int型、初期値は1。
  • size:int型

2. AssignアクティビティとWhileアクティビティを以下のようにドラッグ&ドロップ。

3. ExtractUsersListというAssignアクティビティで…
次の関数を(CopyListを使って)$usersList/ns1:Users/ns1:userと$sizeに割り当てる。
割り当てる内容割り当て先
ids:getUserInGroup($inputVariable.payload/client:groupid,true())$usersList/ns1:user
count($usersList/ns1:user)$size

4. ParseUsersListというwhileアクティビティで、以下の条件を使い$usersList/user要素をループさせる。
5.. 最後に、ConstructEmailsListというAssignアクティビティで、メールアドレスを取り出すロジックを追加し、結果をセパレータを使ってリストに連結する。
割り当てる内容割り当て先
concat($outputVariable.payload/client:emails,
ids:getUserProperty($usersList/ns1:user[$index],'email'),
$inputVariable.payload/client:separator)
$outputVariable.payload/client:emails
$index+1$index

6. これでBPELプロセスは完成したので、デプロイしてテストを実行。

0 件のコメント:

コメントを投稿