ヘッダーをスキップ
Oracle SOA Suite開発者ガイド
10g(10.1.3.1.0)
B31839-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

7.13 電子メール通知の作成

Oracle BPEL Process Managerの通知サービスを使用すると、BPELプロセスから電子メール、電話ボイス・メッセージ、FAX、ポケットベルまたはショート・メッセージ・サービス(SMS)で通知を送信できます。通知は、ユーザーがレスポンスしない(発注確認など)非同期メッセージ、またはユーザーのレスポンスが予定される(経費報告書の承認など)アクション可能なメッセージにできます。この項では、電子メール通知について説明します。ボイス、FAX、ポケットベルおよびSMS通知チャネルについては、『Oracle BPEL Process Manager開発者ガイド』を参照してください。

図7-40に、BPELプロセスからの電子メール通知を示します。通知サービスはWebサービスとして公開されます。通知サービスは、SMTPを使用して電子メールを送信し、IMAPベースまたはPOPベースの電子メール・アカウントから電子メールを受信します。

図7-40 BPELプロセスからの電子メール通知

図7-40の説明は次にあります。
「図7-40 BPELプロセスからの電子メール通知」の説明

コンポーネント・パレットから使用可能な電子メール・サービスを使用して、電子メール通知をBPELプロセスに追加します。必須またはオプションの電子メール・アドレスやメッセージ・コンテンツ(件名と本文)を直接入力できます。あるいは、次のビルトイン機能を使用できます。

詳細は、『Oracle BPEL Process Manager開発者ガイド』の次の項目に関する説明を参照してください。

7.13.1 電子メール通知の作成方法

電子メール・サービス、アイデンティティ・ルックアップ・ダイアログおよびXPath式ビルダーの使用に加え、電子メール・アカウントの構成詳細を、次の場所にあるns_emails.xmlファイルに設定する必要があります。

SOAHOME\bpel\system\services\config

7.13.1.1 BPELプロセスへの電子メール・サービスの追加

emailアクティビティは、BPELプロセスから受信者に電子メールを送信します。

emailアクティビティをBPELプロセスに追加する手順は、次のとおりです。

  1. 電子メール通知を必要とするBPELプロセス内の要素に「Email」サービスをドラッグ・アンド・ドロップします。

  2. 「編集 Email」ダイアログを使用して、通知の詳細を入力します。

    1. 「送信元アカウント」フィールドに、メッセージの送信に使用するアカウントの名前を入力します。

      この電子メール・アカウント名の構成詳細は、Oracle BPEL Server上に存在する必要があります。

    2. 「To」、「Cc」、「Bcc」および「返信先」フィールドに、メッセージを送信する電子メール・アドレスを入力します。

      電子メール・アドレスには、メッセージの作成時に入力する静的なアドレス、アイデンティティ・サービスを使用して検索されたアドレス、またはペイロードからの動的なアドレスを指定できます。

    3. 「件名」フィールドに、電子メール・メッセージの件名を入力します。

      件名には、フリー・テキストまたは動的テキスト(XPath式ビルダーを使用)、あるいはその組合せを指定できます。

    4. 「本文」フィールドに、電子メール・メッセージの本文を入力します。

      メッセージ本文には、プレーン・テキスト、XML、フリー・テキストまたは動的テキスト(XPath式ビルダーを使用)を指定できます。

    5. 「マルチパート・メッセージ . . 添付ファイル」を選択し、数字を入力して電子メールの添付数を指定します。

      添付の数には本文が含まれます。たとえば、本文と1ファイルの添付がある電子メールの場合は、「2」を入力します。

  3. 「OK」をクリックします。

7.13.1.2 アイデンティティ・ルックアップ・ダイアログの使用

アイデンティティ・ルックアップ・ダイアログを使用して、Oracle BPEL Process Managerで使用するように構成されたユーザー・ディレクトリ(OID、JAZN/XML、LDAPなど)を参照し、通知を送信するユーザーやグループを選択します。

アイデンティティ・ルックアップ・ダイアログを使用する手順は、次のとおりです。

  1. 「編集 Email」ダイアログで、任意の受信者フィールドの右にある懐中電灯アイコンをクリックします。

  2. 図7-41に示すように、「アイデンティティ・ルックアップ・ダイアログ」を使用して、Oracle BPEL Process Manager用に構成されたユーザー・ディレクトリ(OID、JAZN/XML、LDAPなど)を参照します。

    図7-41 電子メール通知で使用されるアイデンティティ・ルックアップ・ダイアログ

    図7-41の説明は次にあります。
    「図7-41 電子メール通知で使用されるアイデンティティ・ルックアップ・ダイアログ」の説明

    1. 「ユーザー」または「グループ」を選択します。

    2. 統合サーバーを選択または作成します。

    3. レルムを選択します。

      LDAPベースのJAZNプロバイダ(Oracle Internet Directory)の場合、ユーザーは、インストールでのプロンプトの表示に応じて選択したレルムの下にシードされます。

    4. jcooper, j*, *,」などの検索文字列を入力して「ルックアップ」をクリックして検索し、検索条件を満たす全ユーザーをフェッチします。

    5. 検索結果領域で1人以上のユーザーまたは1つ以上のグループをハイライト表示し、「選択」をクリックします。

      「階層」ボタンを使用して、選択したユーザーの階層を表示します。「報告先」ボタンを使用して、選択したユーザーまたはグループの報告先を表示します。「詳細」ボタンを使用して、選択したユーザーまたはグループの詳細を表示します。

  3. 「OK」をクリックします。

7.13.1.3 XPath式ビルダーの使用

XPath式ビルダーを使用して、特定のプロセス変数に基づいて動的に電子メール・アドレスを設定します。また、アイデンティティ・サービスのビルトインXPath機能を使用すると、特定のユーザーの連絡先情報を検索できます。

XPath式ビルダーを使用する手順は、次のとおりです。

  1. 「編集 Email」ダイアログで、任意の受信者またはテキスト・フィールドの右にある2番目のアイコンをクリックします。

  2. 図7-42に示すように、XPath式ビルダーを使用して、変数またはペイロードから電子メール・アドレスを取得します。

    図7-42 電子メール通知で使用されるXPath式ビルダー

    図7-42の説明は次にあります。
    「図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')
      
      
  3. 「OK」をクリックします。

7.13.1.4 電子メール・アカウントの構成

次の場所にあるns_emails.xmlファイルに電子メール・アカウントを構成します。

SOAHOME\bpel\system\services\config

電子メール・アカウントを構成する手順は、次のとおりです。

  1. ns_emails.xmlファイルを開き、次のように構成します。

    1. EmailAccount要素のFromAddress属性に、送信者の電子メール・アドレスを入力します。

      <EmailAccounts EmailMimeCharset="">
        <EmailAccount>
          <Name>Default</Name>
          <GeneralSettings>
            <FromName>Oracle BPM</FromName>
            <FromAddress>bpm1@.us.oracle.com</FromAddress>
      . . .
      </EmailAccounts>
      
      
    2. name属性にデフォルトの電子メール・アカウントが指定されていることを確認します。

      このアカウントは、電子メール通知を受信するアカウントが指定されていない場合に使用されます。このアカウントは、タスク関連通知を送信するためにも使用されます。デフォルトの電子メール・アカウントは、必ず構成ファイルに指定されている必要があります。

    3. OutgoingServerSettings属性とIncomingServerSettings属性が設定されていることを確認します。ワークフローのアクション可能通知については、IncomingServerSettingsOutgoingServerSettingsの両方が必要です。

    4. 必要に応じて、表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
      

      パスワードの暗号化属性。パスワードを暗号化する場合はtrue、暗号化しない場合はfalseです。通常、パスワードを初めて入力するときは、この属性をfalseに設定してください。サーバーでは、構成ファイルを最初に読み取るときにパスワードを自動的に暗号化し、その属性をtrueに設定します。

      EmailAccount/IncomingServerSettings/UseSSL
      

      Secure Sockets Layer(SSL)属性。受信サーバーにSSLが必須の場合はtrue、SSLが必須でない場合はfalseです。

      EmailAccount/IncomingServerSettings/Folder
      

      受信メッセージを読み取るフォルダの名前。

      EmailAccount/IncomingServerSettings/PollingFrequency
      

      受信メッセージ・フォルダからメッセージを読み取るためのポーリング間隔。


  2. ファイルを保存します。

7.13.2 電子メール通知作成時の処理内容

図7-43に示すように、通知サービスは、「編集 Email」ダイアログに入力された電子メールの詳細を使用して、「EmailParamsAssign」というデフォルト名のassignアクティビティを作成します。

図7-43 通知のassignアクティビティとinvokeアクティビティ

図7-43の説明は次にあります。
「図7-43 通知のassignアクティビティとinvokeアクティビティ」の説明

図7-44に、assignアクティビティのコピー操作が自動的に割り当てられた様子を示します。ここに表示されているdemo@bpelmail.comは「編集 Email」ダイアログの「To」フィールドに入力した値であり、これが変数に割り当てられます。

varNotificationReq/EmailPayload//EmailPayload/ns5:To

図7-44 通知のコピー操作

図7-44の説明は次にあります。
「図7-44 通知のコピー操作」の説明

また、通知サービスは、デフォルト名「InvokeNotificationService」図7-43を参照)のinvokeアクティビティと、デフォルト名「NotificationService」のパートナ・リンクを作成します。図7-45に、invokeアクティビティが「NotificationService」パートナ・リンク(図7-46を参照)とインタフェースするように自動設定されている様子を示します。

図7-45 通知の「Invoke」ダイアログ

図7-45の説明は次にあります。
「図7-45 通知の「Invoke」ダイアログ」の説明

図7-46 「NotificationService」パートナ・リンクの設定

図7-46の説明は次にあります。
「図7-46 「NotificationService」パートナ・リンクの設定」の説明

例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>