手順
インバウンド汎用モジュールがアプリケーション側で実行されると、IDocからBAPI呼び出しが生成され、BAPI汎用モジュールが呼び出され、IDocステータスが決定されます。BAPI(またはパッケージ全体)の処理が完了すると、すべてのIDocのステータスレコードと、正常に完了したBAPIによって生成されたすべてのアプリケーションデータが一緒にデータベースに書き込まれます。
IDocのBAPI呼び出しへの変換
BAPIが呼び出されると、IDocセグメントからのデータ全体がBAPI汎用モジュールの関連パラメータに書き込まれます。BAPIに対してインタフェース削減が定義されている場合、非表示フィールドにはIDocデータが入力されません。
BAPI汎用モジュール呼び出し
次に、パラメータが入力されたBAPI汎用モジュールが同期的に実行されます。BAPIはCOMMITWORKコマンドを実行しないため、BAPIが作成、変更、または削除したアプリケーションデータはまだデータベースに保存されていません。
IDocステータスの決定
汎用モジュールが実行されている場合、IDocステータスは、呼び出しの結果から受信汎用モジュールで決定されます。
戻りパラメーターのエントリーの少なくとも1つでTYPEフィールドがA(中止)またはE(エラー)で埋められている場合、これは次のことを意味します。
-
タイプA:対応するIDocのすべてのステータスレコードにステータス51(エラー、申請伝票が転記されていない)が割り当てられ、ロールバック作業が実行されます。
-
タイプE:対応するIDocのすべてのステータスレコードにステータス51(エラー、申請伝票が転記されていない)が割り当てられ、COMMITWORKが実行されます。パッケージ処理中、COMMIT WORKは、パッケージ全体が処理された後に実行されます(他のBAPIがAメッセージを返さないことを前提としています)。ただし、無効なBAPIの結果は保存されません。エラーステータスのみが記録されます。
-
それ以外の場合は、ステータス53(申請伝票転記)が書き込まれ、COMMITWORKが実行されます。パッケージ処理中、COMMIT WORKは、パッケージ全体が処理された後に実行されます(他のBAPIがAメッセージを返さないことを前提としています)。
アプリケーションデータとIDocステータスの転記
すべてのIDoc/BAPIが個別に処理されると、データはすぐにデータベースに書き込まれます。1つのパケット内で複数のIDocが処理される場合、次のことが発生する可能性があります。
-
パッケージ内のBAPIがAメッセージで中止されなかった場合、COMMIT WORKコマンドは、パッケージ全体が処理された後に実行されます。これにより、正常に完了したすべてのBAPIのアプリケーションデータが、すべてのIDocのステータスレコードとともにデータベースに保存されます。
-
ただし、パッケージ内のBAPIがAメッセージで中止されるとすぐに、対応するIDocのステータスが51に設定され、ロールバック作業がすぐに実行されます。次に、以前に正常に完了したすべてのBAPI(つまり、EまたはAメッセージを返さなかったBAPI)に対して受信処理が再開されます。この実行中に他のAメッセージが発生しない場合は、COMMITWORKが実行されます。有効なBAPIのアプリケーションデータは、IDocのステータスレコードとともにデータベースに書き込まれます。さらにAメッセージが発生した場合は、上記の手順を繰り返します。
エラー処理
エラーが発生した場合は、標準のALEエラー処理を使用できます。これには次の効果があります。
-
エラーの原因となったIDocおよび/またはBAPIの更新はキャンセルされます。
-
イベントがトリガーされます。このイベントはエラータスク(作業項目)を開始します:
-
責任のある従業員は、ワークフローの受信ボックスでタスクを受け取ります。
-
タスクの処理中にエラーメッセージが表示されます。
-
エラーは別のウィンドウで修正され、IDocを再送信して処理できます。
-
エラーを修正できない場合は、IDocに削除のマークを付けることができます。
-
IDocが正常に投稿されると、エラータスクを終了するイベントがトリガーされます。その後、タスクは受信ボックスから消えます。