Oracle BPEL Process Managerの通知サービスを使用すると、BPELプロセスから電子メール、電話ボイス・メッセージ、FAX、ポケットベルまたはショート・メッセージ・サービス(SMS)で通知を送信できます。通知は、ユーザーがレスポンスしない(発注確認など)非同期メッセージ、またはユーザーのレスポンスが予定される(経費報告書の承認など)アクション可能なメッセージにできます。この項では、電子メール通知について説明します。ボイス、FAX、ポケットベルおよびSMS通知チャネルについては、『Oracle BPEL Process Manager開発者ガイド』を参照してください。
図7-40に、BPELプロセスからの電子メール通知を示します。通知サービスはWebサービスとして公開されます。通知サービスは、SMTPを使用して電子メールを送信し、IMAPベースまたはPOPベースの電子メール・アカウントから電子メールを受信します。
コンポーネント・パレットから使用可能な電子メール・サービスを使用して、電子メール通知をBPELプロセスに追加します。必須またはオプションの電子メール・アドレスやメッセージ・コンテンツ(件名と本文)を直接入力できます。あるいは、次のビルトイン機能を使用できます。
アイデンティティ・ルックアップ・ダイアログ: Oracle BPEL Process Managerで使用するように構成されたユーザー・ディレクトリ(Oracle Internet Directory(OID)、JAZN/XML、LDAPなど)を参照します。手順については、「アイデンティティ・ルックアップ・ダイアログの使用方法」を参照してください。
XPath式ビルダー: 受信者の電子メール・アドレス(「To」、「Cc」、「Bcc」、「返信先」)については、XPath式ビルダーを使用して、入力から電子メール・アドレスを動的に取得できます。電子メール・メッセージの件名と本文については、XPath式ビルダーを使用して、指定したプロセス変数からのデータに基づいて動的テキストを設定できます。フリー・テキストと組み合せてXPath式ビルダーを使用すると、動的データは自動的に<% %
>で囲まれます。手順については、「XPath式ビルダーの使用方法」を参照してください。
詳細は、『Oracle BPEL Process Manager開発者ガイド』の次の項目に関する説明を参照してください。
電子メール添付の送信
Oracle Application Server WirelessとOracle BPEL Process Manager(オラクル社でホスティングしているワイヤレス・サービスを使用して通知を送信するように事前構成済)の併用
電子メール・アクティブ化エージェント要素activationAgents
によるビジネス・プロセスの開始
アイデンティティ・サービスの設定
電子メール・サービス、アイデンティティ・ルックアップ・ダイアログおよびXPath式ビルダーの使用に加え、電子メール・アカウントの構成詳細を、次の場所にあるns_emails.xml
ファイルに設定する必要があります。
SOAHOME\bpel\system\services\config
emailアクティビティは、BPELプロセスから受信者に電子メールを送信します。
emailアクティビティをBPELプロセスに追加する手順は、次のとおりです。
電子メール通知を必要とするBPELプロセス内の要素に「Email」サービスをドラッグ・アンド・ドロップします。
「編集 Email」ダイアログを使用して、通知の詳細を入力します。
「送信元アカウント」フィールドに、メッセージの送信に使用するアカウントの名前を入力します。
この電子メール・アカウント名の構成詳細は、Oracle BPEL Server上に存在する必要があります。
「To」、「Cc」、「Bcc」および「返信先」フィールドに、メッセージを送信する電子メール・アドレスを入力します。
電子メール・アドレスには、メッセージの作成時に入力する静的なアドレス、アイデンティティ・サービスを使用して検索されたアドレス、またはペイロードからの動的なアドレスを指定できます。
「件名」フィールドに、電子メール・メッセージの件名を入力します。
件名には、フリー・テキストまたは動的テキスト(XPath式ビルダーを使用)、あるいはその組合せを指定できます。
「本文」フィールドに、電子メール・メッセージの本文を入力します。
メッセージ本文には、プレーン・テキスト、XML、フリー・テキストまたは動的テキスト(XPath式ビルダーを使用)を指定できます。
「マルチパート・メッセージ . . 添付ファイル」を選択し、数字を入力して電子メールの添付数を指定します。
添付の数には本文が含まれます。たとえば、本文と1ファイルの添付がある電子メールの場合は、「2」を入力します。
「OK」をクリックします。
アイデンティティ・ルックアップ・ダイアログを使用して、Oracle BPEL Process Managerで使用するように構成されたユーザー・ディレクトリ(OID、JAZN/XML、LDAPなど)を参照し、通知を送信するユーザーやグループを選択します。
アイデンティティ・ルックアップ・ダイアログを使用する手順は、次のとおりです。
「編集 Email」ダイアログで、任意の受信者フィールドの右にある懐中電灯アイコンをクリックします。
図7-41に示すように、「アイデンティティ・ルックアップ・ダイアログ」を使用して、Oracle BPEL Process Manager用に構成されたユーザー・ディレクトリ(OID、JAZN/XML、LDAPなど)を参照します。
「ユーザー」または「グループ」を選択します。
統合サーバーを選択または作成します。
レルムを選択します。
LDAPベースのJAZNプロバイダ(Oracle Internet Directory)の場合、ユーザーは、インストールでのプロンプトの表示に応じて選択したレルムの下にシードされます。
「jcooper, j*, *,
」などの検索文字列を入力して「ルックアップ」をクリックして検索し、検索条件を満たす全ユーザーをフェッチします。
検索結果領域で1人以上のユーザーまたは1つ以上のグループをハイライト表示し、「選択」をクリックします。
「階層」ボタンを使用して、選択したユーザーの階層を表示します。「報告先」ボタンを使用して、選択したユーザーまたはグループの報告先を表示します。「詳細」ボタンを使用して、選択したユーザーまたはグループの詳細を表示します。
「OK」をクリックします。
XPath式ビルダーを使用して、特定のプロセス変数に基づいて動的に電子メール・アドレスを設定します。また、アイデンティティ・サービスのビルトインXPath機能を使用すると、特定のユーザーの連絡先情報を検索できます。
XPath式ビルダーを使用する手順は、次のとおりです。
「編集 Email」ダイアログで、任意の受信者またはテキスト・フィールドの右にある2番目のアイコンをクリックします。
図7-42に示すように、XPath式ビルダーを使用して、変数またはペイロードから電子メール・アドレスを取得します。
次の式を使用して、電子メール・アドレスを動的に設定します。
電子メール・アドレス(または電話番号)をペイロードから直接取得するには、次のXPathを使用します。
bpws:getVariableData('<variable name>', '<part>','<input xpath to get an address>')
たとえば、XPath /client/BPELProcessRequest/client/mail
に基づいて変数inputVariable
およびパートpayload
から電子メール・アドレスを取得するには、次のようにします。
<%bpws:getVariableData('inputVariable','payload','/client:BPELProcessRequest/client:email')%>
XPath式ビルダーを使用して関数を選択し、入力変数からアドレスを取得するXPath式を入力できます。
電子メール・アドレスまたは電話番号をペイロードから動的に取得するには、次のXPathを使用します。
ora:getUserProperty(userID, propertyName)
第1引数はユーザーIDに評価されます。第2引数はプロパティ名です。
次の例では、変数inputVariable
、パートpayload
および問合せ/client:BPELProcessRequest/client:userID
で識別されるユーザーの電子メール・アドレスを取得します。
ora:getUserProperty(bpws:getVariableData('inputVariable', 'payload','/client:BPELProcessRequest/client:userid'), 'mail')
「OK」をクリックします。
次の場所にあるns_emails.xml
ファイルに電子メール・アカウントを構成します。
SOAHOME\bpel\system\services\config
電子メール・アカウントを構成する手順は、次のとおりです。
ns_emails.xml
ファイルを開き、次のように構成します。
EmailAccount
要素のFromAddress
属性に、送信者の電子メール・アドレスを入力します。
<EmailAccounts EmailMimeCharset=""> <EmailAccount> <Name>Default</Name> <GeneralSettings> <FromName>Oracle BPM</FromName> <FromAddress>bpm1@.us.oracle.com</FromAddress> . . . </EmailAccounts>
name
属性にデフォルトの電子メール・アカウントが指定されていることを確認します。
このアカウントは、電子メール通知を受信するアカウントが指定されていない場合に使用されます。このアカウントは、タスク関連通知を送信するためにも使用されます。デフォルトの電子メール・アカウントは、必ず構成ファイルに指定されている必要があります。
OutgoingServerSettings
属性とIncomingServerSettings
属性が設定されていることを確認します。ワークフローのアクション可能通知については、IncomingServerSettings
とOutgoingServerSettings
の両方が必要です。
必要に応じて、表7-1に示すXML要素を構成します。
表7-1 電子メール通知構成ファイルのXML要素
名前 | 説明 |
---|---|
EmailAccount/Name |
アカウントの名前。任意の名前を指定できますが、BPELサーバー内で一意である必要があります。 |
EmailAccount/GeneralSettings/FromName |
|
EmailAccount/GeneralSettings/FromAddress |
|
EmailAccount/OutgoingServerSettings/SMTPHost |
送信SMTPサーバーの名前。 |
EmailAccount/OutgoingServerSettings/SMTPPort |
送信SMTPサーバーのポート。 |
EmailAccount/IncomingServerSettings/Server |
受信電子メール・サーバーの名前。 |
EmailAccount/IncomingServerSettings/Port |
受信電子メール・サーバーのポート。 |
EmailAccount/IncomingServerSettings/UserName |
電子メール・アドレスのユーザーID。 |
EmailAccount/IncomingServerSettings/Password |
ユーザー・パスワード。 |
EmailAccount/IncomingServerSettings/Password[encrypted |
パスワードの暗号化属性。パスワードを暗号化する場合は |
EmailAccount/IncomingServerSettings/UseSSL |
Secure Sockets Layer(SSL)属性。受信サーバーにSSLが必須の場合は |
EmailAccount/IncomingServerSettings/Folder |
受信メッセージを読み取るフォルダの名前。 |
EmailAccount/IncomingServerSettings/PollingFrequency |
受信メッセージ・フォルダからメッセージを読み取るためのポーリング間隔。 |
ファイルを保存します。
図7-43に示すように、通知サービスは、「編集 Email」ダイアログに入力された電子メールの詳細を使用して、「EmailParamsAssign」というデフォルト名のassignアクティビティを作成します。
図7-44に、assignアクティビティのコピー操作が自動的に割り当てられた様子を示します。ここに表示されているdemo@bpelmail.com
は「編集 Email」ダイアログの「To」フィールドに入力した値であり、これが変数に割り当てられます。
varNotificationReq/EmailPayload//EmailPayload/ns5:To
また、通知サービスは、デフォルト名「InvokeNotificationService」(図7-43を参照)のinvokeアクティビティと、デフォルト名「NotificationService」のパートナ・リンクを作成します。図7-45に、invokeアクティビティが「NotificationService」パートナ・リンク(図7-46を参照)とインタフェースするように自動設定されている様子を示します。
例7-15に、SOA Order Bookingアプリケーションの「NotifyCustomer」スコープのソース・コードを示します。
例7-15 電子メール通知のための「NotifyCustomer」スコープのソース・コード
<scope name="NotifyCustomer"> <variables> <variable name="varNotificationReq" messageType="ns5:EmailNotificationRequest"/> <variable name="varNotificationResponse" messageType="ns5:ArrayOfResponse"/> <variable name="NotificationServiceFaultVariable" messageType="ns5:NotificationServiceErrorMessage"/> </variables> <faultHandlers> <catch faultName="ns5:NotificationServiceFault" faultVariable="NotificationServiceFaultVariable"> <empty/> </catch> </faultHandlers> <sequence> <assign name="Assign"> <copy> <from expression='"Default"'/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:FromAccountName"/> </copy> <copy> <from expression="string('')"/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:Bcc"/> </copy> <copy> <from expression="string('')"/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:Cc"/> </copy> <copy> <from expression="string('')"/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:ReplyToAddress"/> </copy> <copy> <from expression="concat('Order ',bpws:getVariableData('inputVariable','payload','/ client:SOAOrderBookingProcessRequest/ns4:PurchaseOrder/ns4:ID'),' has been completed')"/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:Subject"/> </copy> <copy> <from expression='"demo@bpelmail.com"'/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:To"/> </copy> <copy> <from expression="string('')"/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:Content/ns5:ContentBody"/> </copy> <copy> <from expression="string('text/html; charset=UTF-8')"/> <to variable="varNotificationReq" part="EmailPayload" query="/EmailPayload/ns5:Content/ns5:MimeType"/> </copy> </assign> <invoke name="NotifyCustomer" partnerLink="NotificationService" portType="ns5:NotificationService" operation="sendEmailNotification" inputVariable="varNotificationReq" outputVariable="varNotificationResponse"/> </sequence> </scope>