ABAP Handler の機能は、SAP アプリケーション・データベースとの間でビジネス・オブジェクト・データを出し入れすることです。ビジネス・オブジェクト・データを処理する際に、ABAP Handler は以下の処理を行います。
すべての ABAP Handler は、ビジネス・オブジェクト・データを同じ形式 (フラットな構造) で受け取ります。しかし、それぞれの ABAP Handler はビジネス・オブジェクトについて、WebSphere ビジネス・オブジェクト定義の複雑さ、SAP が提供するネイティブ API、および ABAP Handler が提供する機能のレベルによって決定される固有の要件を持っています。これらの理由から、ABAP Handler は、そのビジネス・オブジェクトに固有の構造に構文解析することで、ビジネス・オブジェクト・データを解釈することができます。これにより、ABAP Handler はより容易にデータを操作できます。
アダプターでは、IDoc Handler などのいくつかの ABAP Handler が提供されます。IDoc Handler は、ビジネス・オブジェクト・データを ABAP Handler で使用される IDoc ベースの構造に再フォーマットすることで解釈する ABAP Handler を提供することによって、SAP の IDoc テクノロジーを強化しています。
ABAP Handler は、ビジネス・オブジェクト・データを解釈したら、そのデータを SAP アプリケーション・データベースに統合する必要があります。Handler は、呼び出しトランザクションや ABAP SQL などの SAP ネイティブ API を使用して、アプリケーション・データベースとの間でデータを出し入れするには、ビジネス・オブジェクト・データを操作する必要があります。
Create、Update、または Delete 操作の目的は、SAP アプリケーション・データベースを変更することです。特定のビジネス・オブジェクトの SAP アプリケーション・データベース・スキーマがデータの構造を定義するのに対して、そのデータを変更する SAP 提供のトランザクションは、はるかに幅広い作用範囲を持っています。その結果、SAP アプリケーションのアプリケーション・データベース表を直接変更することは、アプリケーションのデータ保全性に対して危険な結果をもたらす可能性があります。
SAP では、データベース表を直接変更する代わりとして、Create、 Update、および Delete 操作用の柔軟な ABAP API (呼び出しトランザクション) を提供しています。呼び出しトランザクションは、SAP アプリケーションにデータを入力するための SAP 提供の機能です。この機能は、オンライン・ユーザーがトランザクションで使用するのと同じ画面を使用することで、データが SAP のデータ・モデルに準拠することを保証します。この処理は、一般に screen scraping (画面を通した情報のやり取り) と呼ばれます。
動詞が Retrieve の場合、コネクターは ABAP SQL ステートメントを使用して、SAP アプリケーション・データベースからデータを検索します。ビジネス・オブジェクト・データは、データをプルする際に、where 文節のキーを提供します。この方法によるデータ検索の問題点は、検索されたデータがビジネス・オブジェクト構造を表す形式で表される必要がある点です。この処理は、ABAP Handler の ABAP コードで行われます。
コネクターは、基本キーが指定されている場合にのみ、Retrieve 処理をサポートします。
ビジネス・オブジェクトの動詞に関係なく、コネクターは次の 2 種類の確認を待機します。
ABAP Extension Module では、ビジネス・オブジェクト・データを処理する際に、0、21、および任意のゼロ以外のコード (21 以外) という 3 種類の戻りコードを使用します。戻りコードは、機能モジュール・インターフェースで設定します。機能モジュール・インターフェースの詳細については、IBM WebSphere 機能モジュール・インターフェースを参照してください。
戻りコード 0 は、ビジネス・オブジェクトが正常に処理され、コネクター・インフラストラクチャーに VALCHANGE が戻ったことを示します。ABAP Handler での処理が正常に終了した場合、コネクターは、実行された操作を反映した新しいビジネス・オブジェクト・データを予期します。例えば、Create 処理が正常に終了すると、戻されるビジネス・オブジェクトは、キーが更新されていることを除いて、始めに渡されたビジネス・オブジェクトの正確なコピーです。同様に、Retrieve 処理が正常に終了すると、そのビジネス・オブジェクトの完全にフォーマットされたインスタンスが戻されます。ただし、Create、Update、および Delete 操作は、戻されるビジネス・オブジェクトについて、検索操作とは異なる要件を持っています。
統合ブローカーが IBM WebSphere Business Integration Server Express の場合、要件の相違は、WebSphere Business Integration システムによるビジネス・オブジェクトの処理方法、特にマッピング中のオブジェクト ID の動的相互参照の方法に起因します。 Create または Update 操作の後でコネクターが IBM WebSphere Business Integration Server Express にビジネス・オブジェクトを戻す場合、マッピング・インフラストラクチャーは、相互参照表を新しく取得したオブジェクト ID で更新します。これは、ビジネス・オブジェクトが最初にコネクターに送信されたときに設定された、ビジネス・オブジェクトの ObjectEventId 属性の値をルックアップすることで行われます。
ABAP Handler は、オブジェクト ID をコネクターに戻ったビジネス・オブジェクトに「添付」する任務があるため、このことは ABAP Handler にとっては重要です。Retrieve 操作では、これに対応する動的な相互参照が行われないため、これは通常、Retrieve 操作には関係ありません。Retrieve 操作では、まったく新しいビジネス・オブジェクトが生成され、コネクターに戻されます。このビジネス・オブジェクトは、始めに送信されたビジネス・オブジェクト構造とは、直接的な関係はありません。
ABAP Handler から戻されるビジネス・オブジェクト・データは、そのデータが始めに機能モジュール /CWLD/RFC_DO_VERB_NEXTGEN に渡されたときと同じフラットな構造形式である必要があります。ABAP Handler は、次の情報を持った単純なタイプ属性のみを送信する必要があります。
コネクターがこのデータからビジネス・オブジェクトを作成する場合にはアプリケーション固有情報のみを使用するため、この時点では属性名は必要ありません。ビジネス・オブジェクトまたはオブジェクト・タイプ属性の先頭と末尾を示す ID は使用されません。また、追加してはいけません。例えば、BoName および BoVerb 行は、ABAP Handler から戻されるビジネス・オブジェクトでは使用されません。これらは、処理を容易にするためにのみ、始めに ABAP Handler に渡されます。
ABAP Handler は、フラットな構造に WebSphere ビジネス・オブジェクトを表すビジネス・オブジェクト応答データを取り込む場合、次の一連のルールに従う必要があります。
図 13 に、フラットなビジネス・オブジェクト (オブジェクト・タイプ属性を含まない) を示します。
図 13. フラットなビジネス・オブジェクト SAP_Material
表 11 に、フラットなビジネス・オブジェクト SAP_Material (キー値は ItemID) の構造を示します。ATTR_NAME フィールドは必須でないこと、APPTEXT は各属性について固有であること、およびこのビジネス・オブジェクトがフラットであるため、PEERS フィールドはブランクのままにしてもよいことに注意する必要があります。
表 11. フラットなビジネス・オブジェクト SAP_Material
ATTR_NAME | ATTR_VALUE | ISKEY | ISNEW | PEERS | OBJ_ NUMBER | APPTEXT |
---|---|---|---|---|---|---|
(ブランク) | 000000000000001179 | (ブランク) | (ブランク) | (ブランク) | (ブランク) | ItemId |
(ブランク) | Toaster 6000 | (ブランク) | (ブランク) | (ブランク) | (ブランク) | ShortDesc |
(ブランク) | SAP_124 | (ブランク) | (ブランク) | (ブランク) | (ブランク) | ObjectEventId |
図 14 に、階層型ビジネス・オブジェクト (オブジェクト・タイプを含む) を示します。
図 14. 階層型ビジネス・オブジェクト SAP sales order (IDoc)
表 12 に、IDoc Sales Order に基づいた階層型ビジネス・オブジェクトのフラットな構造の表現を示します。ATTR_NAME フィールドは必須でないこと、APPTEXT は各属性について固有であること、およびこのビジネス・オブジェクトが階層型であるため、PEERS フィールドに適切な関係がリストされていることに注意する必要があります。
表 12. IDoc Sales Order に基づく階層型ビジネス・オブジェクト
ATTR_NAME | ATTR_VALUE | ISKEY | ISNEW | PEERS | OBJ_ NUMBER | APPTEXT |
---|---|---|---|---|---|---|
(ブランク) | USD | 0 | 0 | 1 | (ブランク) | E1EDK01:CURCY |
(ブランク) | 0000000101 | 0 | 0 | 1 | (ブランク) | E1EDK01:BELNR |
(ブランク) | SAP_124 | 0 | 0 | 1 | (ブランク) | E1EDK01: ObjectEventId |
(ブランク) | User1 | 0 | 0 | 2 | (ブランク) | Z1XRV40:ERNAM |
(ブランク) | SAP_125 | 0 | 0 | 2 | (ブランク) | Z1XRV40: ObjectEventId |
(ブランク) | 001 | 0 | 0 | 1 | (ブランク) | Z1XRV40:QUALF |
(ブランク) | 1000 | 0 | 0 | 1 | (ブランク) | E1EDK14:ORGID |
(ブランク) | SAP_126 | 0 | 0 | 1 | (ブランク) | E1EDK14: ObjectEventId |
(ブランク) | User1 | 0 | 0 | 2 | (ブランク) | Z1XRV40:ERNAM |
(ブランク) | SAP_127 | 0 | 0 | 2 | (ブランク) | Z1XRV40: ObjectEventId |
戻りコード 21 は、ビジネス・オブジェクトが正常に処理され、コネクター・インフラストラクチャーに SUCCESS が戻ったことを示します。このコードは成功のみをコネクターに戻し、ビジネス・オブジェクト・データを戻すことはありません。ビジネス・オブジェクト・データを処理するオブジェクト固有の IDoc Handler は、そのビジネス・オブジェクト・データが正常に SAP アプリケーションに入力されると、戻りコードとして 21 を戻します。この戻りコードは /CWLD/RFC_DO_VERB_NEXTGEN 機能モジュールに渡され、このモジュールが成功をコネクターに戻します。コネクターがビジネス・オブジェクト・データを受け取ることはありません。
このことは、大きなオブジェクト (複数の行項目を持つ IDoc など) を渡すときに有用です。ビジネス・オブジェクト・データが正常に SAP アプリケーションに渡されたことを確認するだけで十分です。コードのみを戻せばよく、ビジネス・オブジェクトを戻す必要がないので、パフォーマンスが大幅に向上します。
統合ブローカーが WebSphere InterChange Server Express の場合は、ビジネス・オブジェクトに相互参照が必要でなく、単にデータを SAP アプリケーションに渡している場合にだけ、戻りコード 21 を使用してください。検索操作では、戻りコード 21 は使用しないでください。 SUCCESS 戻りコードの動作は、相互参照や後続の処理のために WebSphere InterChange Server Express に戻されるビジネス・オブジェクトが存在しないことを意味しています。
ゼロ以外の戻りコード (21 以外) は、オブジェクトが正常に処理されず、コネクターに FAIL を戻すことを示します。ABAP Handler がゼロ以外のコード (21 以外) を戻した場合、ビジネス・オブジェクトはコネクターに戻されません。