次の方法で共有


BizTalk Server を使用して SAP で BAPI トランザクションを実行する

SAP アダプターを使用すると、アダプター クライアントは BizTalk Server を使用して SAP システムでトランザクションを実行できます。 トランザクションのオーケストレーションを作成する前に、まずトランザクションを実行する基本的なシナリオを理解しておく必要があります。 一般的なトランザクション シナリオでは、複数の操作 (BAPI の呼び出しなど) を含む要求メッセージが SAP システムに送信されます。 これは"操作メッセージ" と呼ばれます。オーケストレーションでは、要求メッセージから各操作メッセージを抽出し、個々の操作メッセージを SAP システムに送信する必要があります。 オーケストレーションは、同じ接続を使用して 1 つずつ送信します。 オーケストレーションは、BizTalk マップを介した XML 変換を使用して、"操作メッセージ" から個々のメッセージを抽出します。

操作が実行された後、オーケストレーションは、それぞれBAPI_TRANSACTION_COMMITまたはBAPI_TRANSACTION_ROLLBACKのメッセージを送信して、トランザクションをコミットまたは中止する必要があります。 これらは"トランザクション メッセージ" と呼ばれます。

アダプターで BizTalk Server 経由のトランザクションを有効にする方法

BizTalk Server を使用して SAP システムでトランザクションを有効にするには、SAP アダプター:

  • メッセージ コンテキストプロパティ OPEN、REUSE、CLOSE、ABORT を提供します。

  • BAPI_TRANSACTION_COMMITとBAPI_TRANSACTION_ROLLBACKを使用して、操作をコミットまたは中止します。 これらは SAP システムによって公開されます。

    次の表に、BAPI_TRANSACTION_COMMITまたはBAPI_TRANSACTION_ROLLBACKでプロパティを使用する場合のガイドラインをいくつか示します。

メッセージ オープン 再使用 閉じる 中止
最初のメッセージ (操作メッセージ) イエス いいえ いいえ いいえ
後続のメッセージ (操作メッセージ) いいえ イエス いいえ いいえ
BAPI_TRANSACTION_COMMIT (トランザクション メッセージ) いいえ いいえ イエス いいえ
BAPI_TRANSACTION_ROLLBACK (トランザクション メッセージ) いいえ いいえ イエス イエス

テーブルの "Yes" は、メッセージに使用するメッセージ コンテキスト プロパティを表します。 同様に、"No" は、メッセージと共に使用されないメッセージ コンテキスト プロパティを表します。

テーブルの概要を次に示します。

  • 最初のメッセージは常に操作メッセージである必要があり、OPEN プロパティのみを使用する必要があります。

  • 後続の操作メッセージでは、REUSE プロパティを使用する必要があります。

  • トランザクションをコミットするためのBAPI_TRANSACTION_COMMITに対応するトランザクション メッセージでは、CLOSE プロパティを使用する必要があります。

  • トランザクションを中止するBAPI_TRANSACTION_ROLLBACKに対応するトランザクション メッセージは、CLOSE プロパティまたは ABORT プロパティを使用できます。 ABORT を使用する場合は、メッセージがオーケストレーション例外ブロックに含まれている必要があります。

  • オーケストレーションに複数の送信ポートがある場合、アダプターは各ポートから受信したメッセージのトランザクションを自動的に分離します。 つまり、トランザクションは複数のポートにまたがることはできません。

  • SAP トランザクション内のメッセージに対するメッセージ再試行はサポートされていません。 したがって、ユーザーはメッセージ再試行をゼロに設定する必要があります。

  • アダプターは、前の表で "いいえ" とマークされた組み合わせに対して望ましくない結果を生成する可能性があります。 "はい" としてマークされた組み合わせを使用する必要があります。

  • メッセージ コンテキスト プロパティを持たないアダプターに送信されたメッセージは、現在のトランザクション コンテキストにバインドされずに通常どおりに実行されます。

  • BAPI_TRANSACTION_COMMITまたはBAPI_TRANSACTION_ROLLBACKは、オーケストレーションの現在のトランザクション コンテキストの最後のメッセージであることが理想的です。

次のセクションでは、SAP アダプターを使用して SAP でトランザクションを実行する方法について説明します。

SAP システムでトランザクションを実行する方法

BizTalk Server で SAP アダプターを使用して SAP システムに対して操作を実行するには、「SAP アプリケーションを 作成するための構成要素」で説明されている手続き型タスクが含まれます。 SAP システムでトランザクションを実行するには、次のタスクを実行します。

  1. BizTalk プロジェクトを作成し、トランザクションを実行する RFC のスキーマを生成します。 さらに、BAPI_TRANSACTION_COMMIT RFC と BAPI_TRANSACTION_ROLLBACK RFC のスキーマを生成する必要があります。

  2. SAP システムからメッセージを送受信するためのメッセージを BizTalk プロジェクトに作成します。

  3. 要求メッセージから個々の "操作メッセージ" を抽出して SAP システムに送信するオーケストレーションを作成します。 要求メッセージに基づいて、オーケストレーションはトランザクションをコミットするかロールバックするかを決定します。

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

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

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

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

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

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

スキーマの生成

SAP システムでトランザクションを実行する方法を示すには、次のスキーマが必要です。

  • SAP システムで操作を実行する "操作メッセージ" の場合。 アダプターに送信される要求メッセージは、このスキーマに準拠している必要があります。 これには、任意の数の操作ノードを含む任意のユーザー固有のスキーマを指定できます。 このトピックでは、MultipleOrders.xsd スキーマを使用します。 スキーマは、BizTalk アダプター パックのサンプルに付属しているトランザクション サンプルの一部としても提供されます。 詳細については、「 スキーマサンプル」を参照してください。

  • RFC の呼び出しなど、SAP システムで操作を実行する場合。 操作を実行する要求メッセージは、このスキーマに準拠している必要があります。 このスキーマは、Consume Adapter Service BizTalk プロジェクト アドインを使用して生成する必要があります。 このトピックでは、BAPI_SALESORDER_CREATEFROMDAT2 RFC が呼び出されます。 RFC のスキーマの生成の詳細については、「 SAP での RFC 操作のメタデータの参照、検索、および取得」を参照してください。

  • トランザクションを中断またはコミットする際。 トランザクションをコミットまたは中止する要求は、このスキーマに準拠している必要があります。 SAP アダプターは、BAPI_TRANSACTION_COMMITとBAPI_TRANSACTION_ROLLBACK RFC を使用して、それぞれ操作をコミットおよびロールバックします。 Consume Adapter Service アドインを使用して、これらの RFC のスキーマを生成する必要があります。

必要なすべてのスキーマが BizTalk プロジェクトに追加されていることを確認する必要があります。

Von Bedeutung

SAP アダプターの BizTalk プロパティ スキーマへの参照を BizTalk プロジェクトに追加する必要があります。 スキーマ ファイル Microsoft.Adapters.SAP.BiztalkPropertySchema.dllは、BizTalk アダプター パックのセットアップによってインストールされます。通常は、 <インストール ドライブ>:\Program Files\Microsoft BizTalk Adapter Pack\bin にインストールされます。

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

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

メッセージを作成する前に、要求メッセージ (MultipleOrders.xsd 型) に含まれる "操作" ノードの数を確認する必要があります。 この例では、要求メッセージに、BAPI_SALESORDER_CREATEFROMDAT2 RFC を呼び出す 2 つの操作メッセージがあるとします。 したがって、この RFC 用に生成されたスキーマにマップされる要求応答メッセージ セットを 1 つ作成する必要があります。

BizTalk プロジェクトで次のメッセージを作成する必要があります。

  • オーケストレーションに送信する要求メッセージ「SendtoAdapter」。 このメッセージは、入力メッセージ MultipleOrders.xsd のスキーマにマップする必要があります。

  • SAP システムに送信される最初の操作のメッセージ BAPIMessage。 また、最初の操作の応答に対する応答メッセージ BAPIResponse も作成する必要があります。 要求メッセージと応答メッセージは、BAPI_SALESORDER_CREATEFROMDAT2 RFC 用に生成されたスキーマにマップする必要があります。

  • コミット操作用のメッセージであるBAPICommitMessage。 対応する応答メッセージの応答メッセージ BAPICommitResponse も作成する必要があります。 要求メッセージと応答メッセージは、BAPI_TRANSACTION_COMMIT RFC のスキーマにマップする必要があります。

  • ロールバック操作用メッセージであるBAPIRollbackMessage。 対応する応答メッセージ BAPIRollbackResponse を作成する必要もあります。 要求メッセージと応答メッセージは、BAPI_TRANSACTION_ROLLBACK RFC のスキーマにマップする必要があります。

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

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

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

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

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

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

    識別子を設定 メッセージの種類を設定する
    BAPIMessage SAPTransaction.SAPBindingSchema.BAPI_SALESORDER_CREATEFROMDAT2
    BAPIResponse SAPTransaction.SAPBindingSchema.BAPI_SALESORDER_CREATEFROMDAT2Response
    BAPIコミットメッセージ SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_COMMIT
    BAPICommitResponse SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_COMMITResponse
    BAPIRollbackMessage SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_ROLLBACK
    BAPIRollbackResponse SAPTransaction.SAPBindingSchema.BAPI_TRANSACTION_ROLLBACKResponse

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

SAP システムでトランザクションを実行するために BizTalk Server を使用するには、BizTalk オーケストレーションを作成する必要があります。 このオーケストレーションでは、定義された受信場所に要求メッセージをドロップします。 SAP アダプターはメッセージを受信し、SAP システムに渡します。 SAP システムからの応答は、別の場所に保存されます。

オーケストレーションの作成時に考慮すべきもう 1 つの考慮事項は、次のとおりです。

  • 要求メッセージのスキーマを、BAPI_SALESORDER_CREATEFROMDAT2 RFC のスキーマにマップします。

  • 要求メッセージのスキーマをBAPI_TRANSACTION_COMMITおよびBAPI_TRANSACTION_ROLLBACK RFCのスキーマにマップします。

    スキーマは、BizTalk マップを介して XML 変換を使用してマップできます。 これを実現するには、オーケストレーションに Transform 図形を含めます。

    最後に、要求メッセージにトランザクションをコミットまたは中止するための情報があるかどうかに基づいて、オーケストレーションは SAP システムに送信する適切なメッセージを決定する必要があります。 これを実現するには、オーケストレーションに「決定」シェイプを含めます。

    オーケストレーションに含まれるさまざまな図形の詳細については、UI ガイダンスおよび開発者 API 名前空間リファレンスオーケストレーション デザイナー UI を参照してください。

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

    SAPでトランザクションを実行するためのオーケストレーション

メッセージ図形の追加

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

図形の種類 特性
ReceiveInputXML 受け取る - 名前ReceiveInputXML に設定する

- アクティブ化True に設定する
SendToLOB 送信 - 名前SendToLOB に設定する
応答を受信する 受け取る - 名前ReceiveResponse に設定する

- アクティブ化False に設定する
SendResponse 送信 - 名前SendResponse に設定する

要求メッセージには 2 つの挿入メッセージがあるため、SAP にメッセージを送信して応答を受信するには、別の送受信図形のセットを作成する必要があります。 ただし、挿入メッセージはコミットまたはロールバックされる可能性があるため、2 番目の図形セットを決定ブロック内に作成する必要があります。 コミット用に 1 つの図形セットを作成し、ロールバック用に別の図形セットを作成する必要があります。

BizTalk オーケストレーション ツールボックスから [決定] 図形をドラッグ アンド ドロップすることで、決定ブロックを追加できます。

コミット用メッセージの形状

次の表に、オーケストレーションの "コミット パス" の図形を示します。 ここでは、要求メッセージの受信メッセージを作成する必要はありません。 要求メッセージは、前のメッセージ図形から渡されます。

図形の種類 特性
SendBAPICommit 送信 - 名前SendBAPICommit に設定する
コミット応答を受信 受け取る - 名前ReceiveCommitResponse に設定する

- アクティブ化False に設定する
SendResponse2 送信 - 名前SendResponse2 に設定する

中止コマンドのメッセージ形状

次の表に、オーケストレーションの "ロールバック パス" の図形を示します。

図形の種類 特性
BAPIロールバック送信 送信 - 名前SendBAPIRollback に設定する
ロールバック応答を受信する 受け取る - 名前ReceiveRollbackResponse に設定する

- アクティブ化False に設定する
SendResponse3 送信 - 名前SendResponse3 に設定する

ルール式の設定

決定図形を追加して、決定ブロック内にコミット操作と中止操作のメッセージ図形を含めた。 オーケストレーションが決定を下す条件を指定するには、ルール図形に式を設定し、トランザクションがコミットされるかロールバックされるかを決定する必要があります。 たとえば、Rule 図形に次の式を指定する必要があります。

SendToAdapter.isCommit == true

ここで、SendToAdapter は、要求メッセージのスキーマ用に作成したメッセージです。 そのため、要求メッセージで、 isCommit タグが True に設定されている場合、オーケストレーションは "コミット" ルートを受け取ります。 それ以外の場合、オーケストレーションは「ロールバック」の経路をたどります。

式エディターでこの条件を指定できるようにするには、アダプターに送信された要求メッセージのメッセージ スキーマの isCommit プロパティを昇格している必要があります。 このトピックでは、使用する入力スキーマは MultipleOrders.xsd です。 このスキーマでは、 isCommit プロパティを昇格させる必要があります。 プロパティの昇格の詳細については、「プロパティの 昇格」を参照してください。

メッセージ図形の追加と構築

前述のように、アダプターに送信される要求メッセージには、2 つの挿入メッセージと、コミットまたは中止メッセージが含まれています。 メッセージ構築図形を追加し、その中に変換図形を追加して、SAP システムに送信される個々の操作メッセージを抽出する必要があります。 また、メッセージ割り当て図形を追加して、トランザクションを有効にするためのメッセージ コンテキスト プロパティを設定する必要があります。

初めての構築メッセージの形状

最初のメッセージ構築図形が "ReceiveXML" と呼ばれるとします。この図形では、Messages Constructed プロパティを "BAPIMessage" として指定します。 [変換] 図形をダブルクリックして、[ 変換の構成] ダイアログ ボックスを開きます。 ダイアログ ボックスで、次の手順を実行します。

  • 新しいマップを作成することを選択します。

  • 左側のウィンドウで [ ソース ] を選択し、[ 変数名 ] ドロップダウンから [SendToAdapter] を選択します。

  • 左側のウィンドウで [ 宛先 ] を選択し、[ 変数名 ] ドロップダウンから [BAPIMessage] を選択します。

  • [ OK] を クリックしてマッパーを起動します。 要求メッセージのスキーマをBAPI_SALESORDER_CREATEFROMDAT2のスキーマにマップします。 ソース スキーマと変換先スキーマの間にマップを作成するには、 Index Functoid を使用します。 インデックス Functoid を使用すると、一連のレコード内の特定のレコードの情報を選択できます。

    次の図は、 Index Functoid を使用してマップされたスキーマを示しています。

    インデックス ファンクトイドを使用してマッピングされたスキーマ

    [構成の変換] ダイアログ ボックスの使用方法の詳細については、UI ガイダンスおよび開発者 API 名前空間リファレンス「構成の変換」ダイアログ ボックスを参照してください。

    インデックス Functoid の使用の詳細については、「 インデックス Functoid」を参照してください。

    スキーマをマップしたら、マップ ファイルのプロパティ ページを使用してマッピングをテストできます。 詳細については、「UI ガイダンスと開発者 API 名前空間リファレンス」の「<Map ファイル>プロパティ ページ] ダイアログ ボックスの [テスト マップ] タブを参照してください。

    [メッセージの割り当て] 図形で、トランザクションを開始するメッセージ コンテキスト プロパティを指定します。 たとえば、最初のメッセージのメッセージ コンテキスト プロパティは次のようになります。

    BAPIMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "OPEN";

コミットコンストラクト メッセージ図形

コミット操作のメッセージ構築図形が "CommitMessage" と呼ばれるとします。この図形では、Messages Constructed プロパティを "BAPICommitMessage" として指定します。 [変換] 図形をダブルクリックして、[ 変換の構成] ダイアログ ボックスを開きます。 ダイアログ ボックスで、次の手順を実行します。

  • 新しいマップを作成することを選択します。

  • 左側のウィンドウで [ ソース ] を選択し、[ 変数名 ] ドロップダウンから [SendToAdapter] を選択します。

  • 左側のウィンドウで [ 宛先 ] を選択し、[ 変数名 ] ドロップダウンから BAPICommitMessage を選択します。

  • [OK] をクリックしてマッパーを起動します。 要求メッセージのスキーマをBAPI_TRANSACTION_COMMITのスキーマにマップします。 BAPI_TRANSACTION_COMMIT ノードにはレコード階層が含まれていないため、このマッピングにインデックス Functoid を含める必要はありません。

    [メッセージの割り当て] 図形で、トランザクションをコミットするメッセージ コンテキスト プロパティを指定します。 たとえば、最初のメッセージのメッセージ コンテキスト プロパティは次のようになります。

    BAPICommitMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "CLOSE";

Rollback コンストラクト メッセージ図形

ロールバック操作のメッセージ構築図形が "RollbackMessage" と呼ばれるとします。この図形の場合、Messages Constructed プロパティを "BAPIRollbackMessage" として指定します。 [変換] 図形をダブルクリックして、[ 変換の構成] ダイアログ ボックスを開きます。 ダイアログ ボックスで、次の手順を実行します。

  • 新しいマップを作成することを選択します。

  • 左側のウィンドウで [ ソース ] を選択し、[ 変数名 ] ドロップダウンから [SendToAdapter] を選択します。

  • 左側のウィンドウで [ 宛先 ] を選択し、[ 変数名 ] ドロップダウンから [BAPIRollbackMessage] を選択します。

  • [OK] をクリックしてマッパーを起動します。 要求メッセージのスキーマをBAPI_TRANSACTION_ROLLBACKのスキーマにマップします。 BAPI_TRANSACTION_ROLLBACK ノードにはレコード階層が含まれていないため、このマッピングにインデックス ファンクトイドを含める必要はありません。

    [メッセージの割り当て] 図形で、トランザクションをロールバックするメッセージ コンテキスト プロパティを指定します。 たとえば、最初のメッセージのメッセージ コンテキスト プロパティは次のようになります。

    BAPIRollbackMessage(Microsoft.Adapters.SAP.BiztalkPropertySchema.ConnectionState) = "ABORT";

Von Bedeutung

一般的なシナリオでは、ABORT コンテキスト プロパティを持つBAPI_TRANSACTION_ROLLBACKに対応するメッセージを例外ブロックで使用する必要があります。

ポートの追加

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

このオーケストレーションでは、3 つのポートが作成されます。 最初のポートは、指定したフォルダーから要求メッセージを選択します。 2 番目のポートは、SAP システムにメッセージを送信し、応答を受信します。 3 番目のポートは、応答を別のフォルダーに保存します。 そこで:

  • 最初のポートは、単一のスキーマ (MultipleOrders.xsd) のメッセージのみを受信します。

  • 2 番目のポートは、BAPI_SALESORDER_CREATEFROMDAT2 RFC のスキーマ用のメッセージを送受信します。 また、同じポートを使用して、トランザクションをコミットまたはロールバックします。 そのため、このポートは、BAPI_TRANSACTION_COMMIT RFC と BAPI_TRANSACTION_ROLLBACK RFC のスキーマのメッセージも受信します。 これを有効にするには、このポートに 3 つの異なる操作が作成され、それぞれが特定のメッセージ スキーマに対応します。

  • 2 番目のポートと同様に、このポートも 3 つの異なるスキーマを持つメッセージを受信します。 そのため、このポートで 3 つの異なる操作を作成する必要があります。

港 / ポート 特性
ファイルイン - 識別子FileIn に設定する

- FileInType に設定する

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

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

- LOBPortType に設定する

- 通信パターンRequest-Response に設定する

- 通信方向送受信に設定する

- 操作 BAPIMessage を作成します。

- CommitMessage 操作を作成します。 この操作は、コミット メッセージの送信に使用されます。

- RollbackMessage 操作を作成します。 この操作は、ロールバック メッセージの送信に使用されます。
応答を保存 - 識別子SaveResponse に設定する

- SaveResponseType に設定する

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

- 通信方向送信に設定します。

- 操作 BAPIMessage を作成します。

- CommitMessage 操作を作成します。 この操作は、コミット メッセージの応答を保存するために使用されます。

- RollbackMessage 操作を作成します。 この操作は、ロールバック メッセージの応答を保存するために使用されます。

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

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

特性
ReceiveInputXML - メッセージSendToAdapter に設定する

- 操作FileIn.Transaction.Request に設定する
SendToLOB - メッセージBAPIMessage に設定する

- 操作LOBPort.BAPIMessage.Request に設定する
応答を受信する - メッセージBAPIResponse に設定する

- 操作LOBPort.BAPIMessage.Response に設定する
SendResponse - メッセージBAPIResponse に設定する

- SaveResponse.BAPIMessage.Request操作を設定する
SendBAPICommit - メッセージBAPICommitMessage に設定する

- 操作LOBPort.CommitMessage.Request に設定する
コミット応答を受信 - メッセージBAPICommitResponse に設定する

- 操作LOBPort.CommitMessage.Response に設定する
SendResponse2 - メッセージBAPICommitResponse に設定する

- 操作SaveResponse.CommitMessage.Request に設定する
BAPIロールバック送信 - メッセージBAPIRollbackMessage に設定する

- 操作LOBPort.RollbackMessage.Request に設定する
ロールバック応答を受信する - メッセージBAPIRollbackResponse に設定する

- 操作LOBPort.RollbackMessage.Response に設定する
SendResponse3 - メッセージBAPIRollbackResponse に設定する

- 操作SaveResponse.RollbackMessage.Request に設定する

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

例外の処理

BAPI トランザクションを実行するための複雑なオーケストレーションでは、発生した問題を解決できるように、オーケストレーションの状態を追跡し、発生したエラーを報告することが重要です。 BizTalk オーケストレーションには、エラーを処理し、オーケストレーションの状態を維持し、トランザクション、補正、例外処理によって発生した問題を修正するためのツールが用意されています。

オーケストレーション デザイナーは、トランザクションと例外処理のフレームワークとして、 スコープ 図形を提供します。 スコープには、トランザクションの種類、補正、および任意の数の例外ハンドラーを含めることができます。 スコープに 1 つ以上のブロックが含まれています。 本文があり、必要に応じて任意の数の例外処理ブロックを追加できます。 BAPI トランザクションの場合、オーケストレーション全体 (前の図を参照) をスコープに含めることができます。

例外をキャッチするには、Catch Exception ブロックをオーケストレーションに追加する必要があります。 Catch Exception ブロックは、オーケストレーション デザイナーの スコープ 図形の末尾にアタッチされます。 BAPI トランザクションの場合は、 Catch Exception ブロックに "ABORT" ルーチンを追加する必要があります。つまり、"ABORT" ルーチンに以下を追加する必要があります。

  • 変換 (入力メッセージから要求メッセージを抽出する) とメッセージの割り当て図形 (コンテキスト プロパティを設定する) で構成されるメッセージの構築図形

  • 形状を送信および受信します。

    BizTalk アダプター パックに付属している BizTalk Server (SAPTransaction) の SAP トランザクション サンプルでは、例外処理も示しています。 サンプルの詳細については、 SAP アダプターのサンプルを参照してください。

    BizTalk Server を使用して例外を処理する方法の詳細については、「 トランザクションの使用と例外の処理」を参照してください。

BizTalk に BizTalk プロパティ スキーマを追加する

BizTalk プロジェクトで、SAP アダプターの BizTalk プロパティ スキーマへのアセンブリ参照を追加しました。 BizTalk アプリケーション、つまり BizTalk プロジェクトを展開するアプリケーションで、リソースと同じアセンブリを追加する必要があります。 スキーマ ファイル Microsoft.Adapters.SAP.BiztalkPropertySchema.dllは、BizTalk アダプター パックのセットアップによって通常、 <インストール ドライブ>:\Program Files\Microsoft BizTalk アダプター パック\bin にインストールされます。 このリソースがないと、プロジェクトをデプロイすることはできません。

BizTalk でアセンブリをリソースとして追加するには

  1. BizTalk Server 管理コンソールを起動します。

  2. コンソール ツリーで、[ BizTalk グループ]、[ アプリケーション] の順に展開し、BizTalk アセンブリを追加するアプリケーションを展開します。

  3. [ リソース] を右クリックし、[ 追加 ] をポイントし、[ BizTalk アセンブリ] をクリックします。

  4. [ リソースの追加 ] ダイアログ ボックスで、[ 追加] をクリックし、BizTalk アセンブリ ファイルを含むフォルダーに移動し、BizTalk アセンブリ ファイルを選択して、[ 開く] をクリックします。

  5. [オプション] で、BizTalk アセンブリを GAC にインストールするためのオプションを指定し、[OK] をクリックします

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

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

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

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

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

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

    • ハード ディスク上の場所と、要求メッセージをドロップする対応するファイル ポートを定義します。 BizTalk オーケストレーションは、要求メッセージを使用して SAP システムに送信します。

    • ハード ディスク上の場所と、BizTalk オーケストレーションが SAP システムからの応答を含む応答メッセージを削除する対応するファイル ポートを定義します。

    • SAP システムにメッセージを送信する物理 WCF-Custom または送信ポート WCF-SAP 定義します。 ポートを作成する方法については、「 SAP アダプターへの物理ポート バインドを手動で構成する」を参照してください。 送信ポートは、複数のスキーマに準拠したメッセージを送受信し、2 つの操作を実行するため、両方の操作に動的アクションを設定する必要があります。 アクションの詳細については、 SAP システムの SOAP アクションの構成を参照してください。 トランザクションを実行する WCF-Custom または WCF-SAP 送信ポートを作成するときは、次の重要な考慮事項に従ってください。

      次の設定を行います。 この値に
      アクション 送信ポートは、複数の操作のメッセージを送受信します。 そのため、送信ポートのアクションは、各操作に対して設定する必要があります。

      <BtsActionMapping> <Operation Name="BAPIMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_SALESORDER_CREATEFROMDAT2" /> <Operation Name="CommitMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_COMMIT" /> <Operation Name="RollbackMessage" Action="http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_ROLLBACK" /> </BtsActionMapping>
      BizTalk互換モードを有効にする このバインド プロパティを True に設定 します
      接続プーリングを有効にする (EnableConnectionPooling) トランザクションを実行する前に、このバインディング プロパティを False に 設定します。 アダプターと BizTalk の間で設定されたチャネルが予期せず終了するシナリオでは、対応する接続が接続プールに追加されます。 別のチャネルが開き、新しいチャネルが同じ接続オブジェクトを選択すると、トランザクションが新しいチャネル経由でコミットされるときに、古い接続オブジェクトのコミットされていないトランザクションもコミットされます。 これを回避するには、トランザクションの実行中に接続プールを無効にする必要があります。

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

      Von Bedeutung

      プライマリ トランスポートが機能しなかった場合に別の SAP システムにメッセージを送信できるようにする、WCF-Custom または WCF-SAP 送信ポートでバックアップ トランスポートを構成できます。 ただし、SAP システムでトランザクションを実行する場合、WCF ベースの SAP アダプターでは、別の SAP サーバーを指すバックアップ トランスポートの指定はサポートされません。

アプリケーションの起動

SAP システムでトランザクションを実行する BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」および「 アプリケーションを起動する方法」を参照してください。

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

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

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

  • SAP システムにメッセージを送信するための WCF-Custom または WCF-SAP 送信ポートが実行されています。

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

操作の実行

アプリケーションを実行した後、オーケストレーションの要求メッセージを定義済みの場所にドロップする必要があります。 要求メッセージは、特定のスキーマ (たとえば、MultipleOrders.xsd スキーマ) に準拠している必要があります。 たとえば、SAP システムで販売注文を作成し、操作をコミットするための要求メッセージは次のとおりです。

<ns0:Orders xmlns:ns0="http://BAPISend.MultipleOrders">  
  <Order>  
      <ORDER_HEADER_IN>  
        <DOC_TYPE>TA</DOC_TYPE>  
        <SALES_ORG>1000</SALES_ORG>  
        <DISTR_CHAN>10</DISTR_CHAN>  
        <DIVISION>00</DIVISION>  
        <SALES_OFF>1000</SALES_OFF>  
        <REQ_DATE_H>20060901</REQ_DATE_H>  
        <PURCH_DATE>20060901</PURCH_DATE>  
        <PURCH_NO_C>Cust A</PURCH_NO_C>  
        <CURRENCY>EUR</CURRENCY>  
      </ORDER_HEADER_IN>  
      <ORDER_ITEMS_IN>  
          <MATERIAL>P-109</MATERIAL>  
          <PLANT>1000</PLANT>  
          <TARGET_QU>ST</TARGET_QU>  
      </ORDER_ITEMS_IN>  
      <ORDER_PARTNERS>  
          <PARTN_ROLE>AG</PARTN_ROLE>  
          <PARTN_NUMB>0000000257</PARTN_NUMB>  
      </ORDER_PARTNERS>  
    <RETURN></RETURN>  
  </Order>  
  <isCommit>true</isCommit>  
  <BAPI_TRANSACTION_COMMIT>  
  </BAPI_TRANSACTION_COMMIT>  
</ns0:Orders>  

オーケストレーションによってメッセージがコンシュームされ、SAP システムに送信されます。 SAP システムからの応答は、オーケストレーションの一部として定義されている他のファイルの場所に保存されます。 上記の要求メッセージでは、2 つの応答メッセージが表示されます。1 つは BAPI_SALESORDER_CREATEFROMDAT2 RFC を呼び出すためのメッセージで、もう 1 つは BAPI_TRANSACTION_COMMIT を使用したコミット操作用です。

BAPI_SALESORDER_CREATEFROMDAT2の応答は次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>   
<BAPI_SALESORDER_CREATEFROMDAT2Response xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">  
  <SALESDOCUMENT />   
  <ORDER_ITEMS_IN>  
    <BAPISDITM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <ITM_NUMBER>0</ITM_NUMBER>   
      <HG_LV_ITEM>0</HG_LV_ITEM>   
      <PO_ITM_NO />   
      ......  
    </BAPISDITM>  
  </ORDER_ITEMS_IN>  
  <ORDER_PARTNERS>  
    <BAPIPARNR xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">  
      <PARTN_ROLE>AG</PARTN_ROLE>   
      <PARTN_NUMB>0000000257</PARTN_NUMB>   
      <ITM_NUMBER>0</ITM_NUMBER>   
      ......   
    </BAPIPARNR>  
  </ORDER_PARTNERS>  
</BAPI_SALESORDER_CREATEFROMDAT2Response>  

BAPI_TRANSACTION_COMMITの応答は次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>   
<BAPI_TRANSACTION_COMMITResponse xmlns="http://Microsoft.LobServices.Sap/2007/03/Rfc/">  
  <RETURN>  
    <TYPE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <ID xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <NUMBER xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</NUMBER>   
    <MESSAGE xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <LOG_NO xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <LOG_MSG_NO xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</LOG_MSG_NO>   
    <MESSAGE_V1 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <MESSAGE_V2 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <MESSAGE_V3 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <MESSAGE_V4 xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <PARAMETER xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <ROW xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/">0</ROW>   
    <FIELD xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
    <SYSTEM xmlns="http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/" />   
  </RETURN>  
</BAPI_TRANSACTION_COMMITResponse>  

要求メッセージがBAPI_TRANSACTION_ROLLBACK RFC を呼び出した場合、2 番目の応答はBAPI_TRANSACTION_ROLLBACK用になります。

考えられる例外

BizTalk Server を使用して SAP システムでトランザクションを実行するときに発生する可能性がある例外については、「 SAP アダプターでの例外とエラー処理」を参照してください。

ベスト プラクティス

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

こちらもご覧ください

BizTalk アプリケーションの開発