ALE Module の実行

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

初期化と終了

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

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

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

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

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

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

ビジネス・オブジェクト・データが SAP の Java コネクター (SAP JCo) 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 をサポートしています。

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

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

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

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

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 データを格納します。

    ラージ・オブジェクトの場合、コネクターは処理をより効率化できるように、オブジェクトを複数のメッセージに分割します。このサポートを使用可能にする方法については、イベント処理コンポーネントおよび表 19 を参照してください。

  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. コネクターは、それぞれのビジネス・オブジェクトを統合ブローカーにポストしようとします。コネクターは、まず最初に、そのビジネス・オブジェクトに対するサブスクリプションがあるかチェックします。メッセージ・ボディにあるすべてのビジネス・オブジェクトを処理したあと、そのメッセージの IDocProcessingStatus と BOProcessingStatus が更新され、メッセージは、SAPALE_Archive_Queue のプロパティーで指定されたキューに移動されます。IDocProcessingStatus の詳細については、『アーカイブ・メッセージの作成』を、BOProcessingStatus については、『イベント処理およびアーカイブ処理用の JMS-MQ メッセージの構造』を参照してください。

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

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

SAPALE_Unsubscribed_Queue および SAPALE_Error_Queue の状態にあったイベントを、コマンド行ユーティリティーを使用して再サブミットすることができます。このコマンド行ユーティリティーは、Windows では BIA_AleEventUtil.bat、Linux では、BIA_AleEventUtil.sh で、ディレクトリー ProductDir/connectors/SAP/utilities/ALEEventUtil/ (ProductDir はコネクターがインストールされているディレクトリー) 内にあります。詳細については、イベント処理用の ALE Module キュー管理ユーティリティーを参照してください。

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

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

表 19. イベント処理およびアーカイブ処理用の JMS-MQ メッセージの構造
JMS メッセージ・ヘッダー・プロパティー 説明
CorrelationId コネクターは SAP が送信するトランザクション ID (TID) から このプロパティーの値を設定します。

大きな IDoc をそれより小さいメッセージのパーツに分解するとき、このプロパティーはそのパーツが属する大きなメッセージを識別します。コネクターは、この値を この集合の最初のパーツの JMSMessageID に設定します。最初のパーツの CorrelationID は必ず、大きな IDoc に関連付けられている最初の JMS-MQ メッセージの CorrelationID であることに注意してください。IDoc をより小さいメッセージのパーツに分割する方法の詳細については、イベント処理コンポーネントを参照してください。

JMSMessageID メッセージの固有 ID。大きな IDoc をそれより小さいメッセージのパーツに分割するとき、コネクターは最初のパーツ以外のすべてのパーツのこのプロパティーの値を、最初のパーツの JMSMessageID に設定します。IDoc をより小さいメッセージのパーツに分割する方法の詳細については、イベント処理コンポーネントを参照してください。
MutliPartMessage 大きな IDoc をそれより小さいメッセージのパーツに分割するとき、コネクターはこのプロパティーを使用して、そのメッセージがそれより大きなメッセージの対応するパーツであることを識別します。例えば、元の大きな IDoc メッセージを 8 つの JMS-MQ メッセージに分割するとすれば、メッセージごとの各パーツの MultiPartMessage プロパティーの値は 1/82/8 などとなります。IDoc をより小さいメッセージのパーツに分割する方法の詳細については、イベント処理コンポーネントを参照してください。
TidStatus TID の状況を保持します。
IDocProcessStatus イベント処理中に IDoc オブジェクトの状況を保持します。
BOProcessingStatus メッセージ内のすべての IDoc の状況を保持します。フォーマットは <CID> :: <IDoc sequence number><Status symbol> です。状況記号の種類は、S (成功)、F (失敗) および U (アンサブスクライブさ れた) です。例えば「<CID> :: 0S, 1F, 2U」は、最初の IDoc は成功、2 番目は失敗、3 番目は CorrelationId = <CID> に対してアンサ ブスクライブされたことを表します。

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

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

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

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

表 21. アーカイブ・メッセージの作成
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 キュー管理ユーティリティー

このコマンド行ユーティリティーは、Adapter for mySAP.com の (v. 5.3.2) ALE Module が 使用する 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 サブディレクトリーに、Linux システムの場合は /ale/request に作成されます。ale サブディレクトリーは、アダプターが開始されるディレクトリーに置かれます。テーブルから除去されたエントリーは、新しいファイルを作成するのに使用されます。ファイル名は、<ObjectID>_<TID><timestamp>.executed という形式になります。ここで、ObjectID は TransactionId 属性からの値、TID は SAP からのトランザクション ID、timestamp はファイルが作成されたときのタイム・スタンプです。

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

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

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

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

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

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

要求処理のために、1 つの SAP コネクターのインスタンスが同じ IDoc タイプを参照する複数のメッセージ・タイプを処理することができます。イベントの処理では、メッセージのタイプごとに異なるビジネス・オブジェクト定義が必要になることがありますが、要求の処理では複数のメッセージ・タイプに対して 1 つのビジネス・オブジェクト定義を使用することができます。

制御レコード・オブジェクトには、該当するメッセージ・タイプ (MESTYP) を設定します。さらに、動詞はメッセージ・タイプに対して影響を与えないため、異なるメッセージ・タイプを持つ別々の動詞に対して同じビジネス・オブジェクト・タイプを使用することができます。

イベント処理のための複数のメッセージ・タイプのサポート

イベント処理では、以下の機構を使用することができます。

Copyright IBM Corp. 2004, 2005