アプリケーション・イベントの処理時に、ALE Module は SAP アプリケーションがコネクターに プッシュしたイベントを受信します。要求の処理時には、ALE Module はビジネス・オブジェクト要求を統合ブローカーから 受け取って SAP アプリケーションに送信します。
アプリケーション・イベントまたはビジネス・オブジェクト要求を処理する場合、コネクターの初期化プロセスでは以下の処理が実行されます。
コネクターはマルチスレッド化をサポートしているため、ALE Module は、統合ブローカーからの要求を処理する場合に 当該ハンドルの SAP の Java コネクター (SAP JCo) 接続プールを使用します。
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 回に限ってデリバリーされることを保証します。
図 51 では、ALE Module が WebSphere MQ キューを処理する方法を説明しています。
ALE Module のビジネス・オブジェクト・イベント処理は、以下の方法で実行されます。
各 JMS-MQ メッセージは単一の RFC 呼び出しを表します。各 RFC 呼び出しは、単一の TID に関連した 1 つ以上のビジネス・オブジェクトを表すことができます。コネクターは TID をそのメッセージの CorrelationID プロパティーに格納し、TidStatus を CREATED に設定し、IDocProcessStatus を unknown に設定します。コネクターはメッセージ・ボディを使用して IDoc データを格納します。
ラージ・オブジェクトの場合、コネクターは処理をより効率化できるように、オブジェクトを複数のメッセージに分割します。このサポートを使用可能にする方法については、イベント処理コンポーネントおよび表 19 を参照してください。
AleUpdateStatus 構成プロパティーの値が true の場合、コネクターは SAP 内の IDoc の状況を更新します。コネクターは、複数の IDoc を含んだパケットを検索すると、パケット内のすべての IDoc の状況を更新します。詳細については、SAP での IDoc の状況の更新を参照してください。
ALE Module は、イベント・キューからメッセージを読み取る際の処理の順序を FIFO (先入れ先出し法) を使用することで維持します。
SAPALE_Unsubscribed_Queue および SAPALE_Error_Queue の状態にあったイベントを、コマンド行ユーティリティーを使用して再サブミットすることができます。このコマンド行ユーティリティーは、Windows では BIA_AleEventUtil.bat、Linux では、BIA_AleEventUtil.sh で、ディレクトリー ProductDir/connectors/SAP/utilities/ALEEventUtil/ (ProductDir はコネクターがインストールされているディレクトリー) 内にあります。詳細については、イベント処理用の ALE Module キュー管理ユーティリティーを参照してください。
表 19 では、コネクターがイベント・キューおよびアーカイブ・キューに送信するメッセージの構造を説明 しています。
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/8、2/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 プロパティーが取り得る値について説明しています。
IDocProcessStatusプロパティー値 | イベント状況 | 説明 |
---|---|---|
success | 成功 | メッセージにあるすべてのビジネス・オブジェクトが、エラーなしでポストされました。 |
partial | 一部成功 | メッセージにあるすべてのビジネス・オブジェクトではないが、1 つ以上のものがエラーなしでポストされました。メッセージにあるすべてのビジネス・オブジェクトではないが、1 つ以上のものがエラーなしでポストされたか、アンサブスクライブされています。 |
unsubscribed | アンサブスクライブ | メッセージにあるすべてのビジネス・オブジェクトがアンサブスクライブされています。 |
fail | 失敗 | メッセージにあるすべてのビジネス・オブジェクトが、エラーを示してポストされました。 |
メッセージがイベント・キューからアーカイブ・キューに移されると、IDocProcessingStatus および BOProcessingStatus が更新されます。メッセージ・ボディはそのまま変更されません。
例えば、コネクターが 4 つの IDoc を含んだイベント・メッセージを処理し、各 IDoc がビジネス・オブジェクトに変換されるか、また は変換を試行された場合、結果は表 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 は正常に変換されましたが、作成されたビジネス・オブジェクトは統合ブローカーにサブスクライブされませんでした。 |
|
ALE Module がイベント処理のために IDoc を検索した後で、コネクターによって 標準の SAP 状況コードが更新されるようにするためには、以下の作業を行う必要があります。
AleUpdateStatus の値が true に評価された場合、コネクターは ALEAUD IDoc を状況コード情報および記述テキストとともに SAP に 送信します。ALEAUD IDoc は IDOC_INPUT_ALEAUD 機能モジュールを呼び出します。コネクターは、この機能モジュールに対する以下の状況コードの送信をサポートします。
AleSuccessCode コネクター固有の構成プロパティーは、値 52 または 53 に設定できます。SAP はこの値を 41 に変換します。
AleFailureCode コネクター固有の構成プロパティーは、値 68 に設定できます。SAP はこの値を 40 に変換します。
上記のどちらの場合でも、Business Integration システムはそれ以降、後続の処理を表す状況コードを送信しません。
IDoc の状況を戻すために必要なコネクター固有構成プロパティーの設定の詳細については、以下の各セクションを参照してください。
IDoc の状況を戻すための、オプションのコネクター固有構成プロパティーの設定の詳細については、以下の各セクションを参照してください。
このコマンド行ユーティリティーは、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/ を参照してください。
アダプターがアンサブスクライブされたビジネス・オブジェクトまたは サポートされないビジネス・オブジェクトを検出した場合、または IDoc の送信中に例外が発生した場合は、アダプターは SAP トランザクションの処理に失敗します。失敗したトランザクションは、SAP トランザクション SM58 から表示および再サブミットできます。トランザクションを再サブミットする前に、以下の例外に対処してください。
上記のステップが正常に実行されると、SAP でのトランザクションは完了します。
MQ メッセージに単一のビジネス・オブジェクトが含まれ、そのビジネス・オブジェクトがアンサブスクライブされている場合は、MQ メッセージは アンサブスクライブされたキューに移動されます。トランザクション・パケット内の 各アンサブスクライブされたビジネス・オブジェクトは、アンサブスクライブされたキューに 専用の MQ メッセージとして存続します。元の MQ メッセージは変更されず、個々の IDoc の処理状況が格納されます。MQ メッセージのトランザクション・パケットが 完全に処理されると、アーカイブ・キューに移動されます。
トランザクションを再サブミットする前に、以下の例外に対処してください。
訂正が完了したら、コマンド・ユーティリティー AleEventUtil を 使用して MQ メッセージをイベント・キューに戻し、イベントを再サブミットします。
IDoc に誤った形式のデータが含まれる場合、または「nodata」が含まれる場合は、IDoc は 独自のメッセージとしてエラー・キューに移動されます。
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 | ユーザー・パスワード | リモート・キュー・マネージャーにアクセスするために必要です。値は暗号化されません。 |
ユーティリティーをインストールして構成したら、ALE Module キュー管理ユーティリティーの インストール先ディレクトリーにナビゲートします。ユーティリティーに有効なコマンドは以下のとおりです。
-c <choice> (有効なオプションは [move、archive、dump、replicate])
-i <inputq>
-o <outputq>
-f <outputfile>
-d <date>
-u <unique message ID>
-n <replication count>
メッセージの内容をファイルにダンプするには、コマンド・プロンプトで、ユーティリティーのインストール先ディレクトリーに切り替えて 以下のコマンドを実行します。
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 は非同期なので、コネクターは応答が戻されるのを待機しません。
TransactionId 属性が値を持っていない場合は、ALE Module は要求を直接 SAP に送信します。TransactionId 属性が値を持っている場合は、ALE Module は以下のいずれかを行います。
サービス呼び出し要求の処理が正常に行なわれると、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 コネクター構成のプロパティーが、再サブミットされた要求の検査の許容範囲の値に設定されていることを確認してください。
表 22 では、コネクターが SAPtid_Queue から取得する JMS-WebSphere MQ メッセージの欄について説明します。
列名 | 説明 |
---|---|
ObjectID | 要求されたビジネス・オブジェクトの TransactionID 属性にある値。この値は、テーブルのキーとして使用されます。 |
TID | SAP から取得されたトランザクション ID |
TidStatus | トランザクションの状況 |
要求処理のために、1 つの SAP コネクターのインスタンスが同じ IDoc タイプを参照する複数のメッセージ・タイプを処理することができます。イベントの処理では、メッセージのタイプごとに異なるビジネス・オブジェクト定義が必要になることがありますが、要求の処理では複数のメッセージ・タイプに対して 1 つのビジネス・オブジェクト定義を使用することができます。
制御レコード・オブジェクトには、該当するメッセージ・タイプ (MESTYP) を設定します。さらに、動詞はメッセージ・タイプに対して影響を与えないため、異なるメッセージ・タイプを持つ別々の動詞に対して同じビジネス・オブジェクト・タイプを使用することができます。
Verb=Create VerbASI : MsgType=ORDERS; MsgCode=MC01;MsgFunction=MF01
Verb=Update VerbASI : MsgType=ORDERS;MsgCode=MC02;MsgFunction=MF02
Verb=Delete VerbASI : MsgType=ORDERS;MsgCode=MC03;MsgFunction=MF03
動詞が異なれば、同じ組み合わせの MsgType/MsgCode/MsgFunction 値を使用できないことに注意してください。
あるいは、動詞ごとに異なるメッセージ・タイプを使用することができます。
Verb=Create VerbASI : MsgType=ORDERS;MsgCode=;MsgFunction=
Verb=Update VerbASI : MsgType=ORDCHG;MsgCode=;MsgFunction=
Verb=Delete VerbASI : MsgType=;MsgCode=;MsgFunction=
sap_orders_05_ORDERS の動詞 ASI
Verb=Create VerbASI : MsgType=ORDERS;MsgCode=;MsgFunction=
sap_orders_05_QUOTES の動詞 ASI
Verb=Create VerbASI : MsgType=QUOTES;MsgCode=;MsgFunction=