コンテンツフレーム起動

非同期更新 文書を SAP ライブラリストラクチャに組み込む

一般的な R/3 インストールには、複数のダイアログワークプロセスと、少なくとも1つの更新ワークプロセスが含まれます。更新ワークプロセスはデータベースを更新する責任があります。 ABAP プログラムが COMMIT WORK 命令に達すると、 CALL FUNCTION ... IN UPDATE TASK 命令の汎用モジュールが解除され、更新ワークプロセスで処理されます。ダイアログプロセスは更新が終了するまで待機しません。この種の更新は非同期更新と呼ばれます。

このグラフィックは添付のテキストに説明されています

下図は一般的な非同期更新を示します。

このグラフィックは添付のテキストに説明されています

たとえば、ユーザがデータベーステーブルのエントリを変更するか、新しいエントリを追加したいと考えているものとします。ユーザは必要なデータを入力し、そのあと保存を選択して更新プロセスを開始します。これで以下の手順が ABAP プログラムで開始されます。

  1. 最初に、プログラムはエンキューワークプロセス(分散システムの場合はメッセージサーバ)を使ってデータベースエントリを他のユーザに対してロックします。これでロックテーブルにエントリが生成されます。更新が成功したかどうか、他のユーザのためにロックが設定できなかったかどうかがユーザに通知されます。
  2. ロックが設定されると、プログラムは変更すべきエントリを読み込み、それを修正します。ユーザが新しいエントリを登録すると、プログラムは同じキー値を持つレコードがすでに存在するかどうかをチェックします。
  3. 現在のダイアロフワークプロセスで、プログラムは汎用モジュール CALL FUNCTION ... IN UPDATE TASK を呼び出し、変更の詳細がテーブル VBLOG にエントリとして書き込まれます。
  4. プログラムが終了すると(おそらくその後のダイアログステップを経て)、 COMMIT WORK 命令によって SAP LUW の最終部分が開始されます。現在のダイアログステップを処理しているワークプロセスが更新ワークプロセスを開始します。
  5. ダイアログワークプロセスから渡される情報にもとづいて、更新ワークプロセスが SAP LUW に属するログエントリをテーブル VBLOG から読み込みます。
  6. 更新ワークプロセスはこのデータを更新のためにデータベースに引渡し、データベースからのリターンメッセージを分析します。更新が正常に終了すると、最後のデータベース更新のあとで更新ワークプロセスがデータベースコミットをトリガし、テーブル VBLOG からログエントリを削除します。エラーが発生していると、更新ワークプロセスがデータベースロールバックをトリガし、ログエントリをテーブル VBLOG に残し、エラーがあることを示すフラグを付け、 SAPoffice メッセージをユーザに送ります。ユーザはそれをシステム管理者に連絡する必要があります。
  7. ロックテーブル内の該当するエントリは更新ワークプロセスによってリセットされます。

非同期更新が便利なのは、トランザクションからの応答時間が重要なポイントとなっており、またデータベース更新そのものが非常に複雑なため、 VBLOG に記録するという追加のシステム負荷が意味を持つ場合です。トランザクションをバックグラウンドワークプロセスで実行しているときは、非同期更新には全く利点がありません。

 

 

 

コンテンツフレーム終了