次の方法で共有


BizTalk Server を使用して Oracle データベースでオーバーロードされた関数とプロシージャを呼び出す

ストアド プロシージャと関数は、Oracle データベースでオーバーロードできます。 Oracle データベース アダプターは、操作のターゲット名前空間を変更することによって、オーバーロードされた関数とプロシージャをサポートします。 たとえば、2 つのオーバーロードされたプロシージャのメッセージ構造は次のようになります。

Stored Procedure Overload 1:  
<[SP_NAME] xmlns="http://Microsoft.LobServices.OracleDB/2007/03/[SCHEMA]/Package/[PACKAGE_NAME]/[SP_NAME]/overload1">    
  <[PRM1_NAME]>value1</[PRM1_NAME]>  
  <[PRM2_NAME]>value1</[PRM2_NAME]>  
  …  
</[SP_NAME]>  
  
Stored Procedure Overload 2:  
<[SP_NAME] xmlns="http://Microsoft.LobServices.OracleDB/2007/03/[SCHEMA]/Package/[PACKAGE_NAME]/[SP_NAME]/overload2">    
  <[PRM1_NAME]>value1</I_[PRM1_NAME]>  
  <[PRM2_NAME]>value1</I_[PRM2_NAME]>  
  …  
</[SP_NAME]>  

オーバーロードされた関数またはプロシージャを呼び出すために必要な SOAP メッセージ構造と SOAP アクションは、「関数とプロシージャのメッセージ スキーマ」で説明されているように、 関数とプロシージャの呼び出しに似ています。

オーバーロードされたプロシージャの呼び出しは、「 BizTalk Server を使用した Oracle データベースでの関数とプロシージャの呼び出し」の説明に従って、他の関数を呼び出すことと似ています。 ただし、オーバーロードされた関数を区別するために、Oracle データベース アダプターは、ノード ID と、オーバーロードされた成果物に対して表示される名前空間に一意の文字列を追加します。 この文字列は、最初のオーバーロードの場合は "overload1"、次のオーバーロードの場合は "overload2" です。

オーバーロードされた関数とプロシージャを呼び出す方法

BizTalk Server で Oracle データベース アダプターを使用して Oracle データベースに対する操作を実行するには、「Oracle Database を使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手順を実行します。 Oracle データベースで関数を呼び出すには、次のタスクを実行します。

  1. BizTalk プロジェクトを作成し、Oracle データベースで呼び出すオーバーロードされた関数のスキーマを生成します。

  2. Oracle データベースからメッセージを送受信するためのメッセージを BizTalk プロジェクトに作成します。 オーバーロードごとにメッセージを作成する必要があります。

  3. Oracle データベースでオーバーロードされた関数を呼び出すオーケストレーションを作成します。

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

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

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

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

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

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

スキーマの生成

このトピックでは、オーバーロードされた関数またはプロシージャを呼び出す方法を示すために、SCOTT\Package\ACCOUNT_PKG スキーマの下でGET_ACCOUNT プロシージャを呼び出します。 このパッケージは、サンプルで提供されている SQL スクリプトを実行して、SCOTT スキーマの下に作成されます。 これはオーバーロードされたプロシージャです。

  • 1 つのオーバーロードは、アカウント ID を IN パラメーターとして受け取り、ACCOUNT%ROWTYPE を OUT パラメーターとして返します。

  • 2 番目のオーバーロードは、アカウント名を IN パラメーターとして受け取り、ACCOUNT%ROWTYPE を OUT パラメーターとして返します。

    サンプルと SQL スクリプトの詳細については、「 スキーマ サンプル」を参照してください。

    オーバーロードされた関数を呼び出すために、オーバーロードされたプロシージャ (GET_ACCOUNT.1 と GET_ACCOUNT.2) の両方のスキーマを生成します。 スキーマの生成方法の詳細については、 Visual Studio での Oracle Database 操作のメタデータの取得 に関するページを参照してください。

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

前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" が記述されています。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 最初の手順で生成したスキーマを、BizTalk プロジェクトの [オーケストレーション ビュー] ウィンドウのメッセージにリンクする必要があります。

このトピックでは、2 つの要求応答メッセージ セット (1 つ目のオーバーロードされたプロシージャに対して 1 つの要求応答セット)、2 つ目のオーバーロードされたプロシージャの 2 つ目の要求応答セットを作成する必要があります。

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

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

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

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

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

    これを使用する 目的
    識別子 要求」を入力してください。
    メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、 InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNTを選択します。 InvokeOverloadedProc は BizTalk プロジェクトの名前です。 OracleDBBindingSchema は、GET_ACCOUNT プロシージャ用に生成されるスキーマです。
  5. 前の手順を繰り返して、さらに 3 つのメッセージを作成します。 新しいメッセージの [プロパティ ] ウィンドウで、次の操作を行います。

    識別子を設定します。 メッセージの種類を設定してください
    [応答] InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNTResponse
    Request2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNT
    応答2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNTResponse

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

Oracle データベースでオーバーロードされたプロシージャを呼び出すために BizTalk Server を使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、定義された受信場所に、オーバーロードされた各プロシージャに対応する 2 つの要求メッセージを削除します。 Oracle データベース アダプターはメッセージを使用し、ODP を介して Oracle データベースに渡します。 Oracle データベースからの応答は、別の場所に保存されます。

オーケストレーションは 2 つの要求を同時に選択するため、オーケストレーションに Parallel Actions 図形を含める必要があります。 並列アクションごとに、Oracle データベースにメッセージを送信して応答を受信するには、送信図形と受信図形を含める必要があります。 ただし、両方の操作で同じポートを使用してメッセージの送受信を行うことができます。 オーバーロードされたプロシージャを同時に呼び出すための一般的なオーケストレーションには、次のものが含まれます。

  • Oracle データベースにメッセージを送信し、応答を受信する図形を送受信します。

  • Oracle データベースに送信する要求メッセージを受信する一方向の受信ポート。

  • Oracle データベースに要求メッセージを送信し、応答を受信する双方向送信ポート。

  • Oracle データベースからフォルダーに応答を送信する一方向の送信ポート。

    GET_ACCOUNT プロシージャの 1 番目と 2 番目のオーバーロードを呼び出すサンプル オーケストレーションは、次のようになります。

    オーバーロードされたパッケージを呼び出すためのオーケストレーション

メッセージ図形の追加

メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、先ほど説明したオーケストレーションに表示されるメッセージ図形の名前です。 次の表に、並列アクションの 1 つに含める必要がある図形を示します。

図形の種類 特性
メッセージ受信 受け取る - 名前ReceiveMessage に設定する
- アクティブ化True に設定する
メッセージを送信 送信 - 名前SendMessage に設定する
応答を受信する 受け取る - 名前ReceiveResponse に設定する
- アクティブ化False に設定する
SendResponse 送信 - 名前SendResponse に設定する

次の表に、他の並列アクションに含める必要がある図形を示します。

図形の種類 特性
ReceiveMessage2 受け取る - 名前ReceiveMessage2 に設定する
- アクティブ化True に設定する
SendMessage2 送信 - 名前SendMessage2 に設定する
ReceiveResponse2 受け取る - 名前ReceiveResponse2 に設定する
- アクティブ化False に設定する
SendResponse2 送信 - 名前SendResponse2 に設定する

ポートの追加

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

港 / ポート 特性
ファイルイン - 識別子FileIn に設定する
- FileInType に設定する
- 通信パターン一方向に設定する
- 通信方向受信に設定する
LOBPort - 識別子LOBPort に設定する
- LOBPortType に設定する
- 通信パターンRequest-Response に設定する
- 通信方向送受信に設定する
応答を保存 - 識別子SaveResponse に設定する
- SaveResponseType に設定する
- 通信パターン一方向に設定する
- 通信方向送信に設定する

これらのポートを使用して 2 つの要求メッセージと応答メッセージを処理するため、各ポートに対して 2 つの操作を作成する必要があります。各操作は 1 つのメッセージの種類に対応します。 操作を作成するには、ポート図形を右クリックし、[ 新しい操作] を選択します。 各ポートの最初の操作に Overload1 、ポートごとに 2 番目の操作に Overload2 という名前を 付けます

相関関係の使用

関連付けとは、受信メッセージをオーケストレーションの適切なインスタンスと照合するプロセスです。 オーケストレーションでは、オーバーロードごとに 1 つずつ、2 つの要求メッセージを削除します。 相関関係を使用して、要求メッセージを適切なオーケストレーションに関連付けます。 相関関係の詳細については、「 オーケストレーションでの相関関係の使用」を参照してください。

相関関係を使用するには
  1. オーバーロードされた各関数に対して生成されたスキーマからプロパティを昇格させます。 たとえば、最初のオーバーロードのスキーマから AID プロパティを昇格させます。は、2 番目のオーバーロードのスキーマから ANAME プロパティを昇格させます。 プロパティを昇格するには、スキーマ ビューでプロパティを右クリックし、[ 昇格] をポイントして、[ 簡易昇格] を選択します。 これにより、PropertySchema.xsd ファイルが BizTalk プロジェクトに追加されます。

    プロパティを昇格する方法については、「プロパティの昇格」を参照してください。

  2. オーケストレーション ビューで、[ 関連付けの種類] を右クリックし、[ 新しい関連付けの種類] を選択します。

  3. [ 関連付けのプロパティ ] ダイアログ ボックスには、手順 1 で昇格したプロパティが一覧表示されます。 プロパティを選択し、[ 追加] をクリックします。

  4. OK をクリックします。

  5. 他の昇格されたプロパティの関連付けの種類を作成するには、次の手順を繰り返します。

  6. 関連付けられているプロパティに基づいて、関連付けの種類の名前を変更します。 関連付けの種類の名前を CorrelationType_AID (AID プロパティの場合) と CorrelationType_ANAME (ANAME プロパティの場合) に変更できます。

  7. オーケストレーション ビューで、[ 関連付けセット] を右クリックし、[ 新しい関連付けセット] を選択します。

  8. 新しく追加した関連付けセットを右クリックし、[ プロパティ] をクリックします。 プロパティ ペインで、次の操作を行います。

    これを使用する 目的
    関連付けの種類 InvokeOverloadedProc.CorrelationType_AID
    識別子 Correlation_AID
  9. 別の関連付けセットを追加し、[プロパティ] ウィンドウで次のプロパティを指定します。

    これを使用する 目的
    関連付けの種類 InvokeOverloadedProc.CorrelationType_ANAME
    識別子 Correlation_ANAME

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

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

特性
メッセージ受信 - 関連付けセットの初期化をCorrelation_AIDに設定する
- メッセージ要求に設定する
- 操作FileIn.Overload1.Request に設定する
メッセージを送信 - メッセージ要求に設定する
- 操作LOBPort.Overload1.Request に設定する
応答を受信する - メッセージ応答に設定する
- 操作LOBPort.Overload1.Response に設定する
SendResponse - メッセージ応答に設定する
- 操作SaveResponse.Overload1.Request に設定する
ReceiveMessage2 - 関連付けセットの初期化をCorrelation_ANAMEに設定する
- メッセージRequest2 に設定する
- 操作FileIn.Overload2.Request に設定する
SendMessage2 - メッセージRequest2 に設定する
- 操作LOBPort.Overload2.Request に設定する
ReceiveResponse2 - メッセージResponse2 に設定する
- 操作LOBPort.Overload2.Response に設定する
SendResponse2 - メッセージResponse2 に設定する
- SaveResponse.Overload2.Request操作を設定する

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

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

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

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

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

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

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

    • ハード ディスク上の場所と、要求メッセージをドロップする対応するファイル ポートを定義します(オーバーロードされたプロシージャごとに 1 つ)。 BizTalk オーケストレーションは要求メッセージを使用し、Oracle データベースに送信します。

    • ハード ディスク上の場所と、BizTalk オーケストレーションが Oracle データベースからの応答を含むオーバーロードされたプロシージャごとに 1 つずつ、応答メッセージをドロップする対応するファイル ポートを定義します。

    • Oracle データベースにメッセージを送信する物理 WCF-Custom または送信ポート WCF-OracleDB 定義します。 また、送信ポートでアクションを指定する必要があります。 WCF-Custom または WCF-OracleDB ポートを作成する方法については、「 Oracle データベース アダプターへの物理ポート バインドを手動で構成する」を参照してください。 WCF-Custom または WCF-OracleDB 送信ポートは、複数のスキーマに準拠したメッセージを送受信し、2 つの操作を実行するため、両方の操作に動的アクションを設定する必要があります。 アクションの詳細については、「 Oracle Database の SOAP アクションを構成する」を参照してください。 このオーケストレーションの場合、アクションは次のように設定する必要があります。

      <BtsActionMapping>  
        <Operation Name="Overload1" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1" />  
        <Operation Name="Overload2" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2" />  
      </BtsActionMapping>  
      

      Consume Adapter Service BizTalk Project アドインを使用してスキーマを生成すると、ポートに関する情報と、それらのポートに設定するアクションを含むバインディング ファイルも作成されます。 BizTalk Server 管理コンソールからこのバインド ファイルをインポートして、送信ポート (発信呼び出し用) または受信ポート (受信呼び出し用) を作成できます。 詳細については、「 Oracle Database へのポート バインド ファイルを使用して物理ポート バインドを構成する」を参照してください。

アプリケーションの起動

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

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

  • オーケストレーションの要求メッセージを受信する FILE 受信ポートが実行されています。

  • オーケストレーションからの応答メッセージを受信する FILE 送信ポートが実行中です。

  • Oracle データベースにメッセージを送信する WCF-Custom または WCF-OracleDB 送信ポートが実行されています。

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

操作の実行

アプリケーションを実行した後、2 つの要求メッセージ (オーバーロードされたプロシージャごとに 1 つ) を FILE 受信場所にドロップする必要があります。 要求メッセージのスキーマは、前に生成したプロシージャのスキーマに準拠している必要があります。 Oracle データベース アダプターを使用して関数を呼び出すための要求メッセージ スキーマの詳細については、「 関数とプロシージャ のメッセージ スキーマ」を参照してください。

たとえば、GET_ACCOUNT プロシージャの最初のオーバーロードを呼び出す要求メッセージは次のとおりです。

<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">  
  <AID>100001</AID>  
</GET_ACCOUNT>  

同様に、GET_ACCOUNT プロシージャの 2 番目のオーバーロードを呼び出す要求メッセージは次のとおりです。

<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2">  
  <ANAME>Mindy Martin</ANAME>  
</GET_ACCOUNT>  

最初の要求メッセージは、GET_ACCOUNT プロシージャを呼び出して、アカウント ID が 100020 のレコードを取得します。 2 番目の要求メッセージは、GET_ACCOUNT プロシージャを呼び出して、アカウント名が "John Smith" のレコードを取得します。

オーケストレーションは要求メッセージを処理して、Oracle データベースに送信します。 Oracle データベースからの応答は、オーケストレーションの一部として定義されている他の FILE の場所に保存されます。 たとえば、オーバーロードされた最初のプロシージャを呼び出すための応答は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>  
<GET_ACCOUNTResponse mlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">  
 <ACCT>  
  <ACCTID>100001</ACCTID>  
  <NAME>Ty Carlson</NAME>  
  <BALANCE>9000</BALANCE>  
 </ACCT>  
</GET_ACCOUNTResponse>  

考えられる例外

BizTalk Server を使用してオーバーロードされたパッケージを呼び出すときに発生する可能性がある例外については、「 例外とエラー処理」を参照してください。

ベスト プラクティス

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

こちらもご覧ください

Oracle データベースを使用して BizTalk アプリケーションを開発するための構成要素