使用する
BAPIは、アプリケーションから同期的または非同期的に呼び出すことができます。分散モデルでのBAPI更新や受信者決定などのALE機能は、両方のタイプのコールに使用することができます。
同期的に呼び出されるBAPIは、通信エラーから生じるデータベースの不整合を回避するために、外部データの読み取りにのみ使用されることに注意してください。
プロセス
アプリケーションプログラムは、外部システムのデータを徹底的にチェックすることにより、2フェーズコミットを実装できます。エラー処理によりデータの一貫性が保証されるため、より簡単な解決策はBAPIを非同期で呼び出すことです。
以下の基準のいずれかが当てはまる場合は、BAPIを非同期インターフェイスとして実装する必要があります。
-
両方のシステムで一貫したデータベースの変更
データは、ローカルシステムとリモートシステムで更新する必要があります
-
緩い結合
非同期インターフェースは、クライアントとサーバーシステム間の結合が狭すぎることを表します。接続に失敗すると、クライアントシステムは正常に動作しなくなります。
-
パフォーマンス負荷
インターフェイスが頻繁に使用される場合、または大量のデータを処理する場合、パフォーマンスが低下するため、同期インターフェイスは使用できません。パフォーマンスが低すぎるため、この状況では同期インターフェイスを使用できません。
BAPIを非同期インタフェースとして実装する場合は、既存のBAPIのBAPI-ALEインタフェースを生成する必要があります。詳細については、 BAPI-ALEインタフェースの生成を参照してください。
BAPIを使用したデータ配信は、次の図に示されています。
アプリケーション層とALE層のプロセスは、インバウンドとアウトバウンドの両方の処理側で完了します。通信層は、トランザクションリモートファンクションコール(tRFC)またはEDIファイルインターフェイスによってデータを転送します。
このプロセスは、次のサブプロセスに分けることができます。
-
アウトバウンド処理
-
受信者の決定
-
生成されたアウトバウンド汎用モジュールの呼び出し
-
BAPI呼び出しのIDocへの変換
-
セグメントフィルタリング
-
フィールド変換
-
IDocバージョンの変更
-
ディスパッチ制御
-
-
IDocのディスパッチ
IDocは、トランザクションリモートファンクションコール(tRFC)または他のファイルインターフェイス(EDIなど)によって通信レイヤーに送信されます。
tRFCは、データが1回だけ転送されることを保証します。
-
インバウンド処理
-
セグメントフィルタリング
-
フィールド変換
-
転送制御
-
IDocのBAPI呼び出しへの変換
-
BAPI汎用モジュール呼び出し
-
IDocステータスの決定
-
アプリケーションデータとIDocステータスの転記
-
エラー処理
-
インバウンドおよびアウトバウンド処理のサブプロセスを以下に説明します。
アウトバウンド処理
アウトバウンド側では、まず、受信者は分散モデルから決定されます。次に、BAPI-ALEインタフェースの一部としてBAPIから生成されたアウトバウンド汎用モジュールがアプリケーションレイヤで呼び出されます(非同期BAPIコールを使用したプログラムの例も参照)。ALEレイヤーでは、関連付けられたIDocに、BAPI呼び出しからのフィルター処理されたデータが入力されます。
データの量とデータ転送の時間は、ディスパッチ制御によって制御されます。
アウトバウンド処理は、次の手順で構成されます。
受信者の決定
BAPI呼び出しの受信者は、同期BAPI呼び出しの場合と同じ方法で分散モデルで定義されます。
BAPIまたは生成されたBAPI-ALEインターフェースを呼び出す前に、受信者を決定する必要があります。受信者が決定されると、フィルターオブジェクトが指定された条件に対してチェックされ、有効な受信者が報告されます。
データの分散も条件に依存している場合、BAPI間またはBAPIとメッセージタイプ間のこれらの依存関係は、レシーバーフィルターとして定義されます。
これらのレシーバーフィルターのそれぞれについて、分散モデルが定義される前に、実行時の値が条件が満たされているかどうかを決定するフィルターオブジェクトが作成されます。
詳細については、BAPIの受信者の決定を参照してください。
生成されたアウトバウンド汎用モジュールの呼び出し
受信者が決まっている場合は、ローカル受信者とリモート受信者を区別する必要があります。BAPIは、ローカルレシーバーに対して直接呼び出すことができます。リモート呼び出しの場合、処理がALE層に渡されるように、生成されたALEアウトバウンド汎用モジュールを実行する必要があります。BAPIコールのデータと許可された論理レシーバシステムの一覧は、この汎用モジュールに渡されます。
データフィルタリング
2つのフィルタリングサービスを使用できます。条件付きのパラメータフィルタリングと無条件のインターフェイス削減です。
-
インターフェイス削減のためにパラメータ全体が無効化されている場合、それらはIDocに含まれません。一方、構造化パラメーターに個々のフィールドのみを含めない場合でも、パラメーター全体がIDocに含まれます。
-
パラメータフィルタリングでは、フィルタリングされたテーブル行はIDocに含まれません。
詳細については、「データのフィルタリング」を参照してください。
BAPI呼び出しのIDocへの変換
データがフィルタリングされると、転送されるデータを含むIDocが、アウトバウンド汎用モジュールによるBAPIコールから登録されます。
セグメントフィルタリング
IDocが作成されると、IDocセグメントを再度フィルタリングできます。このフィルタリングがBAPIに使用されることはめったにありません。
詳細については、SAPIMG画面から次を選択してください。
ます。
フィールド変換
IMGで特定のレシーバーのフィールド変換を定義できます。
ます。
フィールド変換には標準ルールを指定できます。この機能は、R/2システムと最近のSAPシステムとの間のデータ交換中にフィールドフォーマットを変換する場合に特に重要です。たとえば、フィールドプラントを2文字のフィールドから4文字のフィールドに変換できます。
標準の経営情報システム(EIS)ツールは、フィールドの変換に使用されます。
IDocバージョンの変更
SAPシステムの異なるリリース間でALEが正しく機能することを保証するために、IDoc形式を変換して、異なるリリースステータスに合うようにメッセージタイプを変更することができます。
バージョンの変更が完了すると、IDocがデータベースに保存され、ディスパッチ制御が開始されて、これらのIDocのどれがすぐに送信されるかが決定されます。
SAPは、次のルールを使用して既存のメッセージタイプを変換します。
-
フィールドはセグメントタイプに追加できます
-
新しいセグメントを追加できます
ALEカスタマイジングは、各受信者で使用される各メッセージタイプのバージョンを記録します。IDocは、アウトバウンド処理で正しいバージョンで作成されます。
ディスパッチ制御
発送時間のスケジュール:
-
IDocは、すぐに送信することも、バックグラウンドで送信することもできます。この設定は、パートナープロファイルで行われます。
-
IDocがバックグラウンドで送信される場合は、ジョブをスケジュールする必要があります。バックグラウンドジョブをスケジュールする頻度を選択できます。
送信されるデータの量を制御する:
-
IDocはパケットでディスパッチできます。パケットサイズは、パートナプロファイルに従ってALEカスタマイジングで割り当てられます。
ます。
インバウンド処理
受信側では、ALEレイヤーはインバウンド処理を続行します。
アプリケーション側では、生成されたインバウンド汎用モジュールが実行されると、IDocからBAPI呼び出しが生成され、BAPI汎用モジュールが呼び出され、IDocステータスが決定されます。
BAPIまたはパケット全体が処理された後、すべてのIDocのIDocステータスレコードと、正常に完了したBAPIから作成されたアプリケーションデータが一緒に転記されます。
インバウンド処理は、次の手順で構成されます。
セグメントフィルタリング
インバウンド側では、IDocセグメントをアウトバウンド側と同じようにフィルタリングできます。インバウンド側でのこのフィルタリングは、BAPIにもほとんど使用されません。
フィールド変換
アウトバウンド処理と同様に、受信システムと送信システムでフィールド形式が異なる場合、フィールドを変換できます。
フィールドが変換された後、IDocはデータベースに保存され、さらに処理するために転送制御に渡されます。
転送制御
転送制御は、アプリケーションBAPIがいつ呼び出されるかを決定します。これは、IDocが到着した直後か、バックグラウンド処理の後で発生する可能性があります。
相互に依存する複数のオブジェクトが分散している場合は、転送制御中にシリアル化を使用できます。IDocは、メッセージタイプをシリアルに配信することにより、指定された順序で作成、送信、および転記することができます。これにより、インバウンドIDocを処理するときにエラーを回避できます。BAPIが使用される場合、オブジェクトのシリアル化が排他的に使用されます。これにより、特定のオブジェクトのメッセージシーケンスが常に保護されます。
使用オブジェクトのシリアル化の詳細については、ALEカスタマイジングを参照してください。
シリアル化。
BAPIを処理する時間になると、生成されたインバウンド汎用モジュールが呼び出されます。
IDocのBAPI呼び出しへの変換
BAPIが呼び出されると、IDocセグメントからのデータ全体がBAPI汎用モジュールの関連パラメータに書き込まれます。BAPIに対してインタフェース削減が定義されている場合、非表示フィールドにはIDocデータが入力されません。
BAPI汎用モジュール呼び出し
次に、パラメータが入力されたBAPI汎用モジュールが同期的に実行されます。BAPIはCOMMITWORKコマンドを実行しないため、BAPIが作成、変更、または削除したアプリケーションデータはまだデータベースに保存されていません。
IDocステータスの決定
汎用モジュールが実行されている場合、IDocステータスは、呼び出しの結果から受信汎用モジュールで決定されます。
アプリケーションデータとIDocステータスの転記
各IDocまたはBAPIが個別に処理される場合、データはすぐにデータベースに書き込まれます。
1つのパケット内で複数のIDocが処理される場合、次のことが発生する可能性があります。
-
パケット内でBAPI呼び出しが終了していない場合、正常に完了したBAPIのアプリケーションデータとすべてのIDocステータスレコードが更新されます。
-
パケット内でBAPI呼び出しが終了するとすぐに、関連付けられたIDocのステータスがエラーを示します。アプリケーションデータは更新されません。次に、正常に完了したすべてのBAPI呼び出しに対してインバウンド処理が再度実行されます。この実行中に終了がない場合、BAPIのアプリケーションデータとすべてのIDocステータスレコードが更新されます。さらに終了がある場合は、このプロセスが繰り返されます。
エラー処理
SAPワークフローを使用してALEエラー処理を行うことができます。
-
エラーの原因となったIDocまたはBAPIデータの処理は終了します。
-
イベントがトリガーされます。このイベントはエラータスク(作業項目)を開始します。
-
BAPIまたはIDocのデータが正常に更新されると、エラータスクを終了するイベントがトリガーされます。その後、作業タスクはインバウンドシステムから消えます。
詳細については、エラー処理を参照してください。