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)とはいえ、useridやgroupidを渡すだけのHumanTask内の通知とは異なり、Notificationサービスは個別に使う場合には、明示的にメールアドレスや電話番号を指定する必要があります。
http://www.rubiconred.com/blog/email-notification-with-soa-suite-11g/
こうしたニーズに対応するため、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個の大きなステップがあります。
- Identity Service関数の
ids:getUsersInGroup()
を使い、groupidからuseridのリストを取り出す。 - 先ほどの手順で使ったものと同じ関数
ids:getUserProperty()
を使ってuiseridのリストを処理し、各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, | $outputVariable.payload/client:emails |
$index+1 | $index |
6. これでBPELプロセスは完成したので、デプロイしてテストを実行。
0 件のコメント:
コメントを投稿