次の方法で共有


ストアド プロシージャを使用して Oracle E-Business Suite をポーリングする

ストアド プロシージャを使用して Oracle データベースを継続的にポーリングすることで、定期的なデータ変更メッセージを受信するように Oracle E-Business アダプターを構成できます。 Oracle データベースをポーリングするためにアダプターが定期的に実行するポーリング ステートメントとしてストアド プロシージャを指定できます。

ポーリングを有効にするには、WCF-Custom または受信ポートで特定のバインド プロパティ WCF-OracleEBS 指定する必要があります。 アダプターがポーリングをサポートする方法の詳細については、「 ポーリングを使用した受信呼び出しのサポート」を参照してください。 ポーリング操作用の SOAP メッセージの構造については、「ポーリング操作の メッセージ スキーマ」を参照してください。

Oracle E-Business Adapter のバインド プロパティを使用したポーリング操作の構成

次の表は、データ変更メッセージを受信するようにアダプターを構成するために使用する Oracle E-Business アダプター バインド プロパティをまとめたものです。 BizTalk Server管理コンソールで WCF-Custom または WCF-OracleEBS 受信ポートを構成するときに、これらのバインド プロパティを指定する必要があります。

Binding プロパティ 説明
InboundOperationType ポーリングまたは通知の受信操作を実行するかどうかを指定します。 既定値は ポーリングです。
PolledDataAvailableStatement ポーリングに使用できるデータがあるかどうかを判断するためにアダプターが実行する SQL ステートメントを指定します。 レコードが使用可能な場合にのみ、 PollingInput バインド プロパティに指定したストアド プロシージャが実行されます。
PollingInterval Oracle E-Business アダプターが PolledDataAvailableStatement バインディング プロパティに指定されたステートメントを実行する間隔を秒単位で指定します。 既定値は 30 秒です。 ポーリング間隔は、連続するポーリング間の時間間隔を決定します。 ステートメントが指定された期間内に実行された場合、アダプターはその間隔の残りの時間スリープ状態になります。
PollingInput ポーリング ステートメントを指定します。 ストアド プロシージャを使用してポーリングするには、このバインド プロパティの要求メッセージ全体を指定する必要があります。 要求メッセージは、ストアド プロシージャを送信操作として呼び出すためにアダプターに送信するメッセージと同じである必要があります。 既定値は null です。

ポーリングを有効にするには、 PollingInput バインド プロパティの値を指定する必要があります。 ポーリング ステートメントは、ポーリングに使用できるデータがある場合にのみ実行されます。これは、 PolledDataAvailableStatement バインディング プロパティによって決定されます。
PollingAction ポーリング操作のアクションを指定します。 アダプター サービス アドインを使用して、操作に対して生成するメタデータから、特定の操作のポーリング アクションを決定できます。
PostPollStatement PollingInput バインディング プロパティで指定されたステートメントが実行された後に実行されるステートメント ブロックを指定します。
PollWhileDataFound ポーリング対象のテーブルでデータが使用可能な場合に、Oracle E-Business アダプターがポーリング間隔を無視し、ポーリング ステートメントを継続的に実行するかどうかを指定します。 テーブルに使用可能なデータがない場合、アダプターは、指定されたポーリング間隔でポーリング ステートメントを実行するように戻ります。 既定値は false です。

これらのプロパティの詳細については、「 BizTalk Adapter for Oracle E-Business Suite Binding Properties」を参照してください。 Oracle E-Business アダプターを使用して Oracle データベースをポーリングする方法の詳細については、次のセクションを参照してください。

このトピックでポーリングを示す方法

このトピックでは、Oracle E-Business アダプターがストアド プロシージャを使用したデータ変更メッセージの受信をサポートする方法を示すために、BizTalk プロジェクトを作成し、Oracle データベースのポーリングに使用するストアド プロシージャのスキーマを生成します。 このトピックでは、GET_ACTIVITYS ストアド プロシージャを使用して ACCOUNTACTIVITY テーブルをポーリングします。 このストアド プロシージャは、ACCOUNT_PKG パッケージで使用できます。 サンプルに付属の SQL スクリプトを実行して、これらのオブジェクトをデータベースに作成できます。

Note

このトピックのオーケストレーションでは、サンプルで提供されるスクリプトを実行して作成されたベース データベース テーブルである ACCOUNTACTIVITY テーブルをポーリングします。 インターフェイス テーブルを含む他のテーブルをポーリングするには、このトピックの説明と同様の手順を実行する必要があります。

ポーリング操作を示すために、次の操作を行います。

  • PolledDataAvailableStatement バインド プロパティの SELECT ステートメントを指定して、ポーリングされるテーブル (ACCOUNTACTIVITY) にデータが含まれる場所を決定します。 この例では、このバインド プロパティを次のように設定できます。

    SELECT COUNT (*) FROM ACCOUNTACTIVITY  
    

    これにより、ACCOUNTACTIVITY テーブルに一部のレコードがある場合にのみ、アダプターでポーリング ステートメントが実行されるようになります。

  • PollingInput バインド プロパティの一部として要求メッセージを指定して、ストアド プロシージャGET_ACTIVITYS実行します。 このストアド プロシージャは ACCOUNTACTIVITY テーブル内のすべての行を取得し、アダプターから応答メッセージを受け取ります。

  • POSTPollStatement バインド プロパティの一部として PL/SQL ブロックを実行します。 このステートメントは、ACCOUNTACTIVITY テーブルからデータベース内の別のテーブルにすべてのデータを移動します。 これが行われると、次に PollingInput が実行されると、データはフェッチされないため、GET_ACTIVITYSストアド プロシージャは空の応答メッセージを返します。

  • ACCOUNTACTIVITY テーブルに追加されたデータが増えるまで、空の応答メッセージが引き続き表示されます。 そのため、ACCOUNTACTIVITY テーブルに新しいレコードを再入力する必要があります。 これを行うには、サンプルに付属のmore_activity_data.sql スクリプトを実行します。 このスクリプトを実行すると、次のポーリング操作によって、テーブルに挿入された新しいレコードがフェッチされます。

Oracle からデータ変更メッセージを受信する方法

BizTalk Serverを使用して Oracle E-Business アダプターを使用して Oracle データベースに対して操作を実行するには、「Oracle E-Business Suite アプリケーションを作成するための構成要素」で説明されている次の手順に従います。 ストアド プロシージャを使用して Oracle データベースをポーリングするようにアダプターを構成するには、次のタスクを実行します。

  1. BizTalk プロジェクトを作成し、ポーリングに使用するストアド プロシージャのスキーマを生成します。

  2. Oracle データベースからメッセージを受信するためのメッセージを BizTalk プロジェクトに作成します。

  3. Oracle データベースからメッセージを受信し、フォルダーに保存するオーケストレーションを作成します。

  4. BizTalk プロジェクトをビルドして展開します。

  5. 物理送受信ポートを作成して BizTalk アプリケーションを構成します。

    重要

    受信ポーリングのシナリオでは、常に一方向の受信ポートを構成する必要があります。 双方向の受信ポートは、受信操作ではサポートされていません。

  6. BizTalk アプリケーションを起動します。

    このトピックでは、これらのタスクを実行する手順について説明します。

このトピックに基づくサンプル

このトピックに基づく PollingUsingStoredProc のサンプルは、BizTalk アダプター パックでも提供されています。 詳細については、「サンプル」を参照してください。

スキーマの生成

GET_ACTIVITYS操作のスキーマを生成する必要があります。 アダプター サービス アドインを使用してスキーマを生成するときに、次のタスクを実行します。

メッセージとメッセージの種類の定義

前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" について説明します。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 スキーマが生成されたら、BizTalk プロジェクトのオーケストレーション ビューからメッセージにリンクする必要があります。

このトピックでは、Oracle からメッセージを受信するメッセージを 1 つ作成する必要があります。

メッセージを作成し、スキーマにリンクするには、次の手順を実行します。

  1. BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーから BizTalk プロジェクト名を右クリックし、[追加] をポイントして、[新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。

  2. BizTalk プロジェクトがまだ開いていない場合は、オーケストレーション ビュー ウィンドウを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。

  3. オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。

  4. 新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。

  5. Message_1[プロパティ] ウィンドウで、次の操作を行います。

    プロパティ 目的
    識別子 Receive」と入力します。
    メッセージ型 ドロップダウン リストから [ スキーマ] を展開し、 Polling.OracleEBSBindingSchema を選択します。 ここで、Polling は BizTalk プロジェクトの名前です。 OracleEBSBindingSchema は、 GET_ACTIVITYS ストアド プロシージャに対して生成される応答スキーマです。

    大事な: ポーリングは一方向の操作であるため、アダプターによって生成されるスキーマには応答ノードが含まれていないため、スキーマ内のルート ノードは 1 つだけです。 メッセージ型にこのようなスキーマを使用する場合は、生成されたスキーマのファイル名でスキーマを識別する必要があります。

    たとえば、双方向操作のスキーマを作成する場合、名前 OracleEBSBindingSchema が付いたスキーマ ファイル内のノードは "Request" と "Response" のようになります。 要求スキーマにマップされるメッセージをオーケストレーションに作成する場合は、 を探 OracleEBSBindingSchema.Requestして一覧でスキーマを識別できます。 ただし、ポーリング操作の場合、唯一のノードが "ポーリング" であるため、単一ノードを持つスキーマが schemafilename> として<一覧表示されないため、マップするスキーマを識別するのは簡単ではありません。<rootnodename>。 代わりに、このようなスキーマはファイル名だけで一覧表示されます。 このような場合、スキーマを識別する唯一の方法は、OracleEBSBindingSchema などのスキーマ ファイル名です。

    アダプター サービスアドインを使用すると、GET_ACTIVITYS ストアド プロシージャの受信操作と送信操作の両方のスキーマが生成されます。 受信操作にはスキーマを使用して、次の操作を行う必要があります。

    • オーケストレーションの一部として作成されたメッセージをマップします。

    • アクションを取得するには、実行時に PollingAction バインド プロパティにを指定する必要があります。

      送信操作のスキーマを使用して、 PollingInput バインド プロパティの一部として指定する必要がある要求メッセージを取得する必要があります。

オーケストレーションの設定

Oracle からポーリング ベースのデータ変更メッセージを受信するためにBizTalk Serverを使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、アダプターは 、PollingInput バインド プロパティの一部として要求メッセージを指定したストアド プロシージャを実行して応答を受信します。 ストアド プロシージャの応答メッセージは、FILE の場所に保存されます。 Oracle データベースをポーリングするための一般的なオーケストレーションには、次のものが含まれます。

  • Oracle からメッセージを受信し、それぞれ FILE ポートに送信する図形の受信と送信。

  • Oracle データベースからメッセージを受信するための一方向の受信ポート。

    重要

    受信ポーリングのシナリオでは、常に一方向の受信ポートを構成する必要があります。 双方向の受信ポートは、受信操作ではサポートされていません。

  • Oracle データベースからポーリング応答を送信する一方向の送信ポート。

    サンプル オーケストレーションは次のようになります。

    6eddfe32-bfd0-4bd9-9e2a-fb4a7d0b53e3Oracle の

メッセージ図形の追加

メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、単一のオーケストレーションに表示されるメッセージ図形の名前です。

図形 図形の種類 プロパティ
ReceiveMessage 受信 - 名前を ReceiveMessage に設定する

- Activate をTrue に設定する
SaveMessage Send - 名前を SaveMessage に設定する

ポートの追加

論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。

Port プロパティ
OracleReceivePort - 識別子OracleReceivePort に設定する

- OracleReceivePortType に設定する

- 通信パターン一方向に設定する

- 受信する通信方向を設定する
SaveMessagePort - 識別子SaveMessagePort に設定する

- TypeSaveMessagePortType に設定する

- 通信パターン一方向に設定する

- [通信の方向] を [送信] に設定する

アクション図形のメッセージを指定し、ポートに接続する

次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定する必要があるプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。

図形 プロパティ
ReceiveMessage - メッセージ受信に設定する

- 操作OracleReceivePort.Polling.Request に設定する
SaveMessage - メッセージ受信に設定する

- SaveMessagePort.Polling.Request操作を設定する

これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。

BizTalk ソリューションをビルドし、BizTalk Serverに展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。

BizTalk アプリケーションの構成

BizTalk プロジェクトを展開すると、前に作成したオーケストレーションが、BizTalk Server管理コンソールの [オーケストレーション] ウィンドウの下に一覧表示されます。 アプリケーションを構成するには、BizTalk Server管理コンソールを使用する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。

アプリケーションの構成には、次の作業が含まれます。

  • アプリケーションのホストの選択。

  • オーケストレーションで作成したポートを、BizTalk Server管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。

    • ハード ディスク上の場所と、BizTalk オーケストレーションが Oracle からメッセージを削除する対応する FILE ポートを定義します。 これらのメッセージは、受信ポートに指定したポーリング ステートメントに応答します。

    • 物理 WCF-Custom または一方向の受信ポート WCF-OracleEBS 定義します。 このポートは Oracle データベースをポーリングします。 受信ポートを作成する方法については、「 Oracle E-Business Adapter への物理ポート バインドを手動で構成する」を参照してください。 受信ポートには、次のバインド プロパティを指定してください。

      Binding プロパティ
      InboundOperationType これを [ポーリング] に設定します。
      PolledDataAvailableStatement この例では、このバインド プロパティを次のように設定します。

      SELECT COUNT (*) FROM ACCOUNTACTIVITY

      これにより、ACCOUNTACTIVITY テーブルに一部のレコードがある場合にのみ、アダプターでポーリング ステートメントが実行されるようになります。
      PollingAction GET_ACTIVITYS プロシージャの受信メッセージに対して生成されたスキーマからポーリング アクションを取得します。 この例では、このバインド プロパティを PollingPackageApis/APPS/ACCOUNT_PKG/GET_ACTIVITYS に設定します。
      PollingInput このバインド プロパティには、GET_ACTIVITYS ストアド プロシージャを呼び出す要求メッセージを指定します。 アダプター サービス アドインを使用して生成された送信操作の要求メッセージをスキーマから取得できます。 このバインディング プロパティの入力として XML メッセージ全体を指定する必要があります。 この例では、このバインディング プロパティを次のように設定します。

      <GET_ACTIVITYS xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PackageApis/APPS/ACCOUNT_PKG"> <INRECS>OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY</INRECS> </GET_ACTIVITYS>

      GET_ACTIVITYS ストアド プロシージャは、入力 REF CURSOR をパラメーターとして受け取ります。
      PostPollStatement すべてのデータを ACCOUNTACTIVITY テーブルから別のテーブルに移動するには、ポーリング後ステートメントを指定します。 この例では、このバインディング プロパティを次のように設定します。

      BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;

      さまざまなバインド プロパティの詳細については、「 BizTalk Adapter for Oracle E-Business Suite のバインド プロパティ」を参照してください。

      重要

      インターフェイス テーブルをポーリングする場合は、必要なバインド プロパティを指定してアプリケーション コンテキストを設定する必要があります。 アプリケーション コンテキストの設定の詳細については、「アプリケーション コンテキストの 設定」を参照してください。

      Note

      Oracle E-Business アダプターを使用して受信操作を実行するときに、トランザクション分離レベルとトランザクション タイムアウトを構成することをお勧めします。 これを行うには、WCF-Custom または受信ポートの構成中にサービスの動作 WCF-OracleEBS 追加します。 サービスの動作を追加する方法については、「 Oracle E-Business Suite でトランザクション分離レベルとトランザクション タイムアウトを構成する」を参照してください。

アプリケーションの起動

Oracle データベースをポーリングするには、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。

この段階で、次のことを確認します。

  • WCF-Custom または WCF-OracleEBS 一方向の受信ポートが実行されています。このポートは、 PollingInput バインド プロパティに指定されたストアド プロシージャを使用して Oracle をポーリングします。

  • Oracle データベースからメッセージを受信する FILE 送信ポートが実行されています。

  • 操作の BizTalk オーケストレーションが実行されています。

操作の実行

アプリケーションを実行すると、次の一連のアクションが同じ順序で実行されます。

  • アダプターは PolledDataAvailableStatement を実行します。これは、 PollingInput バインディング プロパティに指定されたステートメントを実行するアダプターを示す正の値を返します。

  • アダプターは、 PollingInput バインド プロパティに指定されたGET_ACTIVITYSストアド プロシージャを実行し、ACCOUNTACTIVITY テーブル内のすべての行を返します。 Oracle データベースからの応答は次のようになります。

    <?xml version="1.0" encoding="utf-8" ?>   
    <GET_ACTIVITYS xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PollingPackageApis/APPS/ACCOUNT_PKG">  
      <OUTRECS>  
        <OUTRECSRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ReferencedRecordTypes/APPS/ACCOUNT_PKG/GET_ACTIVITYS/APPS/GET_ACTIVITYS">  
          <TID>1</TID>   
          <ACCOUNT>100001</ACCOUNT>   
          <AMOUNT>500</AMOUNT>   
          <DESCRIPTION />   
          <TRANSDATE>2008-06-21T15:52:19</TRANSDATE>   
          <PROCESSED>n</PROCESSED>   
        </OUTRECSRecord>  
        <OUTRECSRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ReferencedRecordTypes/APPS/ACCOUNT_PKG/GET_ACTIVITYS/APPS/GET_ACTIVITYS">  
          ......  
          ......   
        </OUTRECSRecord>  
        ......  
        ......  
      </OUTRECS>  
    </GET_ACTIVITYS>  
    
  • アダプターは、すべてのデータを ACCOUNTACTIVITY テーブルから別のテーブルに移動する post-poll ステートメントを実行します。

  • ポーリング間隔の後、アダプターは再び PolledDataAvailableStatement を実行します。 ACCOUNTACTIVITY テーブルにはレコードがないため、 PolledDataAvailableStatement は正の値を返さないため、アダプターは PollingInput バインド プロパティに指定されたステートメントを実行しません。 その結果、アダプター クライアントはポーリング メッセージを受け取りません。

  • 一部のレコードが ACCOUNTACTIVITY テーブルに明示的に挿入されるまで、アダプター クライアントはそれ以上ポーリング メッセージを取得しません。 さらにレコードを挿入するには、サンプルに付属の more_activity_data.sql スクリプトを実行します。 このスクリプトを実行すると、次 に PolledDataAvailableStatement が実行されると、正の値が返されます。 その結果、アダプターはポーリング ステートメントを実行し、アダプター クライアントは再度ポーリング メッセージを受信します。

Note

Oracle E-Business アダプターは、BizTalk Server管理コンソールから受信ポートを明示的に無効にするまでポーリングを続行します。

ベスト プラクティス

BizTalk プロジェクトを展開して構成したら、バインド ファイルと呼ばれる XML ファイルに構成設定をエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションの送信ポートと受信ポートを作成する必要がないように、ファイルから構成設定をインポートできます。 バインド ファイルの詳細については、「 SQL アダプター バインドの再利用」を参照してください。

参照

BizTalk Serverを使用して Oracle E-Business Suite をポーリングする