ALE Module の実行

アプリケーション・イベントの処理時に、ALE Module は SAP アプリケーションがコネクターにプッシュしたイベントを受信します。要求の処理時には、ALE Module はビジネス・オブジェクト要求を統合ブローカーから受け取って SAP アプリケーションに送信します。

初期化と終了

init() メソッドは、SAP Gateway を経由した SAP R/3 アプリケーションへの RFC 接続を開きます。コネクターは初期化に失敗すると、terminate() メソッドを使用して接続を終了します。コネクターは、SAP Gateway から切断することで終了します。

アプリケーション・イベントまたはビジネス・オブジェクト要求を処理する場合、コネクターの初期化プロセスでは以下の処理が実行されます。

  1. SAP Gateway に、RfcProgramID コネクター構成プロパティーで指定されたプログラム ID を登録します。Program ID を TCP/IP ポートとして設定する方法の詳細については、RFC Server Module の SAP gateway への登録を参照してください。
  2. コネクター用に構成されたキューに対する MQSeries セッションを開きます。
  3. イベントと要求の処理に必要な MQSeries キューが作成済みであることを確認します。作成済みでない場合、その処理はコネクターを終了します。

コネクターはマルチスレッド化をサポートしているため、ALE Module は、統合ブローカーからの要求を処理する場合に当該ハンドルの SAP の Java コネクター (SAPJCo) 接続プールを使用します。

重要:
ALE モジュールを使用してアプリケーション・イベントを処理する場合、このモジュールを正しく初期化 (サーバーに RFC 機能をインストールするため) したり、このモジュールがエラーを正しく管理したりするためには、コネクターによるポーリングが必要です。したがって、PollFrequency プロパティーの値を key または no に設定しないでください。コネクターのログに必須 RFC 機能のインストールが表示されていることを検証するまで、SAP アプリケーションによってコネクターへのイベントが起動されないようにしてください。

ビジネス・オブジェクトの処理

ALE Module が SAP 用の WebSphere ビジネス・オブジェクトを処理する場合は、イベント処理または要求処理のいずれかによって開始されます。

ビジネス・オブジェクト・データが SAP の Java コネクター (SAPJCo) API から戻されると、ALE Module は、DATS および TIMS フィールドの値を、DATS データ・エレメントの場合は YYYY-MM-DD (ハイフンを含む)、 TIMS データ・エレメントの場合は HH:mm:ss (コロンを含む) という形式で受け取ります。大文字の HH は、12 時間制ではなく 24 時間制の時刻を表します。イベントを処理する場合、ALE Module はこれらの形式を、対応するビジネス・オブジェクト属性の 8 文字および 6 文字の最大サイズに合わせて変更します。コネクターは、日付データのハイフンや時刻データのコロンを除去して、値の長さを短縮します。

イベント処理

ALE Module のすべてのイベント処理は、SAP アプリケーションの 2 つの RFC 対応機能が開始します。ALE のイベント処理用のビジネス・オブジェクト・ハンドラーでは、機能 idoc_inbound_asynchronous および inbound_idoc_process をサポートしています。

イベントを処理する場合、このビジネス・オブジェクト・ハンドラーはビジネス・オブジェクトを MQSeries キューに永続的に保管します。コネクターは RFC 呼び出しに関連付けられた Transaction ID (TID) を保守することで、個々のデータが 1 回に限ってデリバリーされることを保証します。

重要:
1 回の RFC 呼び出しで、1 つ以上の IDoc に対するデータを送信できます。この場合、MQSeries キューには複数の IDoc を表す JMS-MQ メッセージが格納され、それぞれの IDoc が 1 つのビジネス・オブジェクトを表すことになります。各 RFC 呼び出しは、1 つの TID に関連付けられています。

MQSeries キューにおけるイベント処理

図 17 では、ALE Module が MQSeries キューを処理する方法を説明しています。

図 17. ビジネス・オブジェクト・イベント処理


ALE Module のビジネス・オブジェクト・イベント処理は、以下の方法で実行されます。

  1. RFC 機能はイベント・データを SAP Gateway にプッシュし、そこでリスナー・スレッドがイベントを選出します。スレッドはイベントに関連した TID を検査し、以下のようにその TID に対応する JMS-MQ メッセージが存在するかどうかを判別します。
  2. リスナー・スレッドは、SAP Gateway から RFC インターフェース・データを検索する ALE イベント処理ビジネス・オブジェクト・ハンドラーのインスタンスを生成します。
  3. ビジネス・オブジェクト・ハンドラーは、各トランザクションを JMS-MQ メッセージの形式に整え、SAPALE_Wip_Queue 構成プロパティーによって指定されたキューの中に永続的に保管します。

    各 JMS-MQ メッセージは単一の RFC 呼び出しを表します。各 RFC 呼び出しは、単一の TID に関連した 1 つ以上のビジネス・オブジェクトを表すことができます。コネクターは TID をそのメッセージの CorrelationID プロパティーに格納し、TidStatus を CREATED に設定し、IDocProcessStatus を unknown に設定します。コネクターはメッセージ・ボディを使用して IDoc データを格納します。

  4. 各トランザクションの完了後、コネクターは TidStatus の値を変更し、トランザクションが完了したことを示す確認を SAP に返送します。SAP は確認を受信した後で、SAP アプリケーションから TID とその関連データを除去します。

    AleUpdateStatus 構成プロパティーの値が true の場合、コネクターは SAP 内の IDoc の状況を更新します。コネクターは、複数の IDoc を含んだパケットを検索すると、パケット内のすべての IDoc の状況を更新します。詳しくは、SAP での IDoc の状況の更新を参照してください。

  5. コネクターは JMS-MQ メッセージを WIP キューから SAPALE_Event_Queue 構成プロパティーで指定されたキューに移動させます。
  6. ALE Module のポーリング・スレッドが、イベント・キューからイベント・メッセージを選出します。
  7. コネクターは、ALE データ・ハンドラーをインスタンス化します。このハンドラーによって、メッセージ・ボディーにあるデータがビジネス・オブジェクトに変換されて、統合ブローカーにポストされます。
  8. コネクターは、それぞれのビジネス・オブジェクトを統合ブローカーにポストしようとします。統合ブローカーが WebSphere InterChange Server Express である場合、コネクターは、まず最初に、そのビジネス・オブジェクトに対するサブスクリプションがあるかチェックします。メッセージ・ボディにあるすべてのビジネス・オブジェクトを処理したあと、そのメッセージの IDocProcessingStatus と BOProcessingStatus が更新され、メッセージは、SAPALE_Archive_Queue のプロパティーで指定されたキューに移動されます。 IDocProcessingStatus の詳細については、『アーカイブ・メッセージの作成』を、BOProcessingStatus については、『イベント処理およびアーカイブ処理用の JMS-MQ メッセージの構造』を参照してください。

ALE Module は、イベント・キューからメッセージを読み取る際の処理の順序を FIFO (先入れ先出し法) を使用することで維持します。

重要:
アプリケーション・イベントの処理時に適切なエラー管理を行うために、このモジュールではコネクター・ポーリングが必要とされます。したがって、コネクターの PollFrequency プロパティーの値を key または no に設定しないでください。コネクターのログに必須 RFC 機能のインストールが表示されていることを検証するまで、SAP アプリケーションによってコネクターへのイベントが起動されないようにしてください。

イベント処理およびアーカイブ処理用の JMS-MQ メッセージの構造

表 21 では、コネクターがイベント・キューおよびアーカイブ・キューに送信するメッセージの構造を説明しています。


表 21. イベント処理およびアーカイブ処理用の JMS-MQ メッセージの構造
JMS メッセージ・ヘッダー・プロパティー 説明
CorrelationId コネクターは SAP が送信するトランザクション ID (TID) からこのプロパティーの値を設定します。
TidStatus TID の状況を保持します。
IDocProcessStatus イベント処理中に IDoc オブジェクトの状況を保持します。
BOProcessingStatus メッセージ内のすべての IDoc の状況を保持します。フォーマットは <CID> :: <IDoc sequence number><Status symbol> です。状況記号の種類は、S (成功)、F (失敗) および U (アンサブスクライブされた) です。例えば「<CID> :: 0S, 1F, 2U」は、最初の IDoc は成功、2 番目は失敗、3 番目は CorrelationId = <CID> に対してアンサブスクライブされたことを表します。

表 22 では、イベントがアーカイブ・キューに移された後で、IDocProcessStatus プロパティーが取り得る値について説明しています。


表 22. IDocProcessStatus メッセージ・プロパティーに対するアーカイブ・キューの値
IDocProcessStatus プロパティー値 イベント状況 説明
success 成功 メッセージにあるすべてのビジネス・オブジェクトが、エラーなしでポストされました。
partial 一部成功 メッセージにあるすべてのビジネス・オブジェクトではないが、1 つ以上のものがエラーなしでポストされました。統合ブローカーが WebSphere InterChange Server Express である場合は、メッセージにあるすべてのビジネス・オブジェクトではないが、1 つ以上のものがエラーなしでポストされたか、アンサブスクライブされています。
unsubscribed アンサブスクライブ 統合ブローカーが WebSphere InterChange Server Express である場合は、メッセージにあるすべてのビジネス・オブジェクトがアンサブスクライブされています。
fail 失敗 メッセージにあるすべてのビジネス・オブジェクトが、エラーを示してポストされました。

アーカイブ・メッセージの作成

メッセージがイベント・キューからアーカイブ・キューに移されると、IDocProcessingStatus および BOProcessingStatus が更新されます。メッセージ・ボディはそのまま変更されません。

例えば、コネクターが 4 つの IDoc を含んだイベント・メッセージを処理し、各 IDoc がビジネス・オブジェクトに変換されるか、または変換を試行された場合、結果は 表 23 のようになります。


表 23. アーカイブ・メッセージの作成
IDoc またはビジネス・オブジェクトの状況 結果として得られるアーカイブ・メッセージ
最初の IDoc は正常に変換され、ビジネス・オブジェクトは統合ブローカーにポストされました。 IDocProcessStatus は success に更新され、BOProcessingStatus は <CID> :: 0S になります。
2 番目の IDoc のビジネス・オブジェクトへの変換に失敗しました。 IDocProcessStatus は partial に更新され、BOProcessingStatus は <CID> :: 0S, 1F なります。
3 番目の IDoc は正常に変換され、ビジネス・オブジェクトは統合ブローカーにポストされました。 IDocProcessStatus は partial に設定され、BOProcessingStatus は <CID> :: 0S, 1F, 2S になります。
4 番目の IDoc は正常に変換されましたが、作成されたビジネス・オブジェクトは統合ブローカーにサブスクライブされませんでした。
  • IDocProcessStatus は partial に設定され、BOProcessingStatus は <CID> :: 0S, 1F, 2S, 3U になります。
  • 最後の IDoc を処理した後で、メッセージをイベント・キューからアーカイブ・キューに移動し、IDocProcessStatus は partial に、BOProcessingStatus は <CID> :: 0S, 1F, 2S, 3U に設定されます。

SAP での IDoc の状況の更新

ALE Module がイベント処理のために IDoc を検索した後で、コネクターによって標準の SAP 状況コードが更新されるようにするためには、以下の作業を行う必要があります。

AleUpdateStatus の値が true に評価された場合、コネクターは ALEAUD IDoc を状況コード情報および記述テキストとともに SAP に送信します。ALEAUD IDoc は IDOC_INPUT_ALEAUD 機能モジュールを呼び出します。コネクターは、この機能モジュールに対する以下の状況コードの送信をサポートします。

上記のどちらの場合でも、Business Integration システムはそれ以降、後続の処理を表す状況コードを送信しません。

IDoc の状況を戻すために必要なコネクター固有構成プロパティーの設定の詳細については、以下の各セクションを参照してください。

IDoc の状況を戻すための、オプションのコネクター固有構成プロパティーの設定の詳細については、以下の各セクションを参照してください。

イベント処理用の ALE Module キュー管理ユーティリティー

このコマンド行ユーティリティーは、 WebSphere Business Integration adapter for mySAP.com の (v. 5.3.2) ALE モジュールが使用する MQ キューの管理に使用します。このユーティリティーはイベント・メッセージを再サブミットし、表示用にイベント・メッセージをファイル・システムにダンプし、メッセージをファイル・システムにアーカイブします。

IDoc は、トランザクションという作業単位で処理されます。複数の IDoc を含む SAP トランザクションをトランザクション・パケットと呼びます。アダプターは、1 つ以上の IDoc を保持する MQ メッセージを使用してトランザクションおよびトランザクション・パケットを処理します。アダプターは、IDoc を対応するビジネス・オブジェクトに変換します。ALE モジュールは、SAP からアダプター、アダプターからブローカーの順に 2 段階で IDoc を処理します。例外は、各ステップで個別に処理されます。

MQ メッセージについて詳しくは、WebSphere Business Integration Library: http://www.ibm.com/software/integration/wmq/library/ を参照してください。

SAP からアダプターへの IDoc の処理

アダプターがアンサブスクライブされたビジネス・オブジェクトまたはサポートされないビジネス・オブジェクトを検出した場合、または IDoc の送信中に例外が発生した場合は、アダプターは SAP トランザクションの処理に失敗します。失敗したトランザクションは、 SAP トランザクション SM58 から表示および再サブミットできます。トランザクションを再サブミットする前に、以下の例外に対処してください。

上記のステップが正常に実行されると、SAP でのトランザクションは完了します。

重要:
イベントのデリバリーが重複しないようにするために、訂正した IDoc トランザクションまたはトランザクション・パケット内の個々の IDoc は再サブミットしないでください。

アダプターからブローカーへの IDoc の処理

MQ メッセージに単一のビジネス・オブジェクトが含まれ、そのビジネス・オブジェクトがアンサブスクライブされている場合は、MQ メッセージはアンサブスクライブされたキューに移動されます。トランザクション・パケット内の各アンサブスクライブされたビジネス・オブジェクトは、アンサブスクライブされたキューに専用の MQ メッセージとして存続します。元の MQ メッセージは変更されず、個々の IDoc の処理状況が格納されます。MQ メッセージのトランザクション・パケットが完全に処理されると、アーカイブ・キューに移動されます。

トランザクションを再サブミットする前に、以下の例外に対処してください。

訂正が完了したら、コマンド・ユーティリティー AleEventUtil を使用して MQ メッセージをイベント・キューに戻し、イベントを再サブミットします。

IDoc に誤った形式のデータが含まれる場合、または「nodata」が含まれる場合は、IDoc は独自のメッセージとしてエラー・キューに移動されます。

ALE Module Queue ユーティリティーのインストールおよび構成

ALE Module Queue ユーティリティーは SAP アダプターにパッケージされています。インストールすると、以下のディレクトリー構造が作成されます。

¥Connectors¥SAP¥BIA_AleEventUtil.jar

¥Connectors¥SAP¥BIA_AleEventUtil.bat

¥Connectors¥SAP¥BIA_AleEventUtil_readme.txt

以下のパラメーターを収集するように始動スクリプト・ファイル BIA_AleEventUtil.bat を変更します。ローカル・キュー・マネージャーにアクセスするために構成する必要があるのは MQQueueManager のみです。


変数 説明 コメント
MQQueueManager Queue Manager の名前 必須パラメーター
MQChannel サーバー接続チャネル名 リモート・キュー・マネージャーにアクセスするために必要です。
MQPort チャネルが listen するポート リモート・キュー・マネージャーにアクセスするために必要です。
MQHost キュー・マネージャーが稼動するホスト名または IP アドレス リモート・キュー・マネージャーにアクセスするために必要です。
MQUser MQHost の有効なユーザー名 リモート・キュー・マネージャーにアクセスするために必要です。
MQPassword ユーザー・パスワード リモート・キュー・マネージャーにアクセスするために必要です。値は暗号化されません。

MQ 管理ユーティリティーの実行

ユーティリティーをインストールして構成したら、ALE Module キュー管理ユーティリティーのインストール先ディレクトリーにナビゲートします。ユーティリティーに有効なコマンドは以下のとおりです。

-c <choice> (有効なオプションは [move、archive、dump、replicate])

-i <inputq>

-o <outputq>

-f <outputfile>

-d <date>

-u <unique message ID>

-n <replication count>

注:
同名のファイルが既に存在する場合、archive コマンドは例外を発生させますが、dump コマンドはファイルを上書きします。

メッセージの内容をファイルにダンプするには、コマンド・プロンプトで、ユーティリティーのインストール先ディレクトリーに切り替えて以下のコマンドを実行します。

BIA_AleEventUtil -cdump -i<QueueName> -f<OutputFileName>

あるキューから別のキューにメッセージを移動するには、以下のコマンドを実行します。以下のコマンドは、キューにあるメッセージをすべて移動します。

BIA_AleEventUtil -cmove -i<FromQueue> -o<ToQueue>

単一のメッセージを移動するには、以下のように、該当するメッセージのメッセージ ID に対応する MessageIdByte の追加のパラメーターを使用します。

BIA_AleEventUtil -cmove -i<FromQueue> -o<ToQueue> -u<MessageIdByte>

指定の日付以前のメッセージをすべて移動するには、以下のように Date パラメーターを追加します。

BIA_AleEventUtil -cmove -i<FromQueue> -o<ToQueue> -d<date(YYYYMMDD)>

キューからファイルにメッセージをアーカイブし、指定の日付以前のメッセージをすべて除去するには、以下のコマンドを使用します。

BIA_AleEventUtil -carchive -i<QueueName> -f<ArchiveFileName> -d<date(YYYYMMDD)>

要求処理

Vision コネクター・フレームワークは、トップレベルのビジネス・オブジェクトの動詞 AppSpecificInfo プロパティーの値を使用して、ALE 要求処理ビジネス・オブジェクト・ハンドラーをインスタンス化します。要求処理ビジネス・オブジェクト・ハンドラーの doVerbFor() メソッドでは、すべてのビジネス・オブジェクト要求を開始します。

ビジネス・オブジェクト・ハンドラーは、ビジネス・オブジェクト・データを、IDoc 形式と、そのメタデータ・コンポーネントである制御レコードを表す 2 つの表に変換します。データを IDoc 形式に変換すると、ビジネス・オブジェクト・ハンドラーは idoc_inbound_asynchronous または inbound_idoc_process のいずれか適切な SAP 機能モジュールに対して RFC 呼び出しを行います。ALE は非同期なので、コネクターは応答が戻されるのを待機しません。

重要:
デフォルトでは、SAPODA で生成された親ラッパー・ビジネス・オブジェクトには、TransactionId 属性が含まれています。この属性の値に応じて、コネクターはサービス呼び出し要求を処理する際に TID の管理を行います。要求処理の際に TID 管理を行わないようにしたい場合は、この属性の値を設定しないでください。詳細については、親ラッパー・ビジネス・オブジェクトを参照してください。
注:
TransactionId 属性の値は、固有の ID でなければなりません。値は SAP アプリケーション内の TID と等価ではありません。これらの値は、SAPtid_Queue 構成プロパティーで指定されたキューの中の JMS_MQ メッセージにあるテーブルに保管されます。

TransactionId 属性が値を持っていない場合は、ALE Module は要求を直接 SAP に送信します。TransactionId 属性が値を持っている場合は、ALE Module は以下のいずれかを行います。

  1. コネクターは、SAPtid_Queue 構成プロパティーで指定されたキューにある JMS-MQ メッセージがこの値を持っているかどうか、チェックします。
  2. コネクターはビジネス・オブジェクトを RFC 表に変換し、SAP への RFC 呼び出しを行います。
  3. SAP が RFC 呼び出しの受け取りを確認したあと、コネクターは テーブルからキーを除去し、キーをアーカイブしてから、統合ブローカーに成功状況を戻します。

アーカイブ

サービス呼び出し要求の処理が正常に行なわれると、SAPtid_Queue にある JMS-MQ メッセージのテーブルの中で該当するエントリーが除去され、ディレクトリーにアーカイブされます。ファイルが、WINNT システムの場合は ¥ale¥request サブディレクトリーに、他のシステムの場合は /ale/request に作成されます。ale サブディレクトリーは、アダプターが開始されるディレクトリーに置かれます。テーブルから除去されたエントリーは、新しいファイルを作成するのに使用されます。ファイル名は、<ObjectID>_<TID><timestamp>.executed という形式になります。ここで、ObjectID は TransactionId 属性からの値、TID は SAP からのトランザクション ID、timestamp はファイルが作成されたときのタイム・スタンプです。

アダプター自体が、コネクターの構成プロパティー ArchiveDays を用いて、これらのアーカイブ・ファイルの削除を管理します。コネクターの構成プロパティー、ArchiveDays の値によって、これらのアーカイブ・ファイルが ale¥request サブディレクトリーに存続する日数が決まります。 ArchiveDays で指定された日数より古いファイルはいずれも、削除されます。このプロパティーが構成されていない場合の ArchiveDays のデフォルト値は 7 日です。これらのアーカイブ・ファイルは、ファイルを自分で削除することによって手作業で管理することもできます。

失敗した要求の再サブミット

統合ブローカーによって示されている、失敗に終ったすべての要求について、その要求に関するアーカイブ・ファイルが作成されたかどうかチェックしてください。要求にあるオブジェクト ID に対するアーカイブ・ファイルが存在する場合は、統合ブローカーから要求を再サブミットしなでください。その ObjectID に対するアーカイブ・ファイルがない場合は、要求を再サブミットしてください。 ArchiveDays コネクター構成のプロパティーが、再サブミットされた要求の検査の許容範囲の値に設定されていることを確認してください。

要求処理のための JMS MQSeries メッセージ・テーブルの欄

表 24 では、コネクターが SAPtid_Queue から取得する JMS-MQSeries メッセージの欄について説明します。


表 24. 要求処理用の JMS-MQ メッセージの欄
列名 説明
ObjectID 要求されたビジネス・オブジェクトの TransactionID 属性にある値。この値は、テーブルのキーとして使用されます。
TID SAP から取得されたトランザクション ID
TidStatus トランザクションの状況

Copyright IBM Corp. 2004