次の方法で共有


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でプロパティを使用する場合のガイドラインをいくつか示します。

Message OPEN 再 利用 CLOSE ABORT
最初のメッセージ (操作メッセージ) はい いいえ いいえ いいえ
後続のメッセージ (操作メッセージ) いいえ はい いいえ いいえ
BAPI_TRANSACTION_COMMIT (トランザクション メッセージ) いいえ いいえ はい いいえ
BAPI_TRANSACTION_ROLLBACK (トランザクション メッセージ) いいえ いいえ はい はい

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

テーブルを要約するには:

  • 最初のメッセージは常に操作メッセージである必要があり、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および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 システムで操作を実行する場合。 操作を実行するための要求メッセージは、このスキーマに準拠している必要があります。 このスキーマは、アダプター サービス BizTalk プロジェクト アドインを使用して生成する必要があります。 このトピックでは、BAPI_SALESORDER_CREATEFROMDAT2 RFC が呼び出されます。 RFC のスキーマの生成の詳細については、「 SAP での RFC 操作のメタデータの参照、検索、取得」を参照してください。

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

Note

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

重要

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 も作成する必要があります。 要求メッセージと応答メッセージは、RFC のスキーマBAPI_TRANSACTION_COMMITマップする必要があります。

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

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

  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
    BAPICommitMessage 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のスキーマにマップし、RFC BAPI_TRANSACTION_ROLLBACKします。

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

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

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

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

    727f82e9-51a9-4a94-9d0a-d05c17904bdeSAP

メッセージ図形の追加

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

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

- アクティブ化True に設定する
SendToLOB Send - [名前]SendToLOB に設定する
ReceiveResponse 受信 - 名前ReceiveResponse に設定する

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

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

Note

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

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

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

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

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

中止のメッセージ図形

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

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

- Activate をFalse に設定する
SendResponse3 Send - 名前を SendResponse3 に設定する

ルール式の設定

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

SendToAdapter.isCommit == true

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

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

メッセージ図形の構築を追加する

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

最初のコンストラクト メッセージ図形

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

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

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

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

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

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

    d0ade577-ea74-4be3-a724-4ba19397d8d3インデックス functoid を

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

    Index Functoid の使用の詳細については、「 Index Functoid」を参照してください。

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

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

    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 ノードにはレコード階層が含まれていないため、このマッピングにインデックス Functoid を含める必要はありません。

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

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

重要

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

ポートの追加

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

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

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

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

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

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

- Typeを FileInType に設定する

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

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

- LOBPortType に設定する

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

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

- 操作 BAPIMessage を作成します。

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

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

- TypeSaveResponseType に設定する

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

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

- 操作 BAPIMessage を作成します。

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

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

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

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

図形 プロパティ
ReceiveInputXML - MessageSendToAdapter に設定する

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

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

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

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

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

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

- 操作SaveResponse.CommitMessage.Request に設定する
SendBAPIRollback - メッセージBAPIRollbackMessage に設定する

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

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

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

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

例外処理

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

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

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

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

  • 図形の送受信。

    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 Adapter Pack\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>
      EnableBizTalkCompatibilityMode このバインド プロパティを True に設定 します
      EnableConnectionPooling トランザクションを実行する前に、このバインド プロパティを False に 設定します。 アダプターと BizTalk の間に設定されたチャネルが予期せず終了するシナリオでは、対応する接続が接続プールに追加されます。 別のチャネルが開き、新しいチャネルが同じ接続オブジェクトを選択すると、トランザクションが新しいチャネル経由でコミットされるときに、古い接続オブジェクトのコミットされていないトランザクションもコミットされます。 これを回避するには、トランザクションの実行中に接続プールを無効にする必要があります。

      Note

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

      重要

      プライマリ トランスポートが機能しない場合に別の 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>  

Note

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

考えられる例外

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

ベスト プラクティス

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

参照

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