手順
データベースエラーが発生したときにデータの整合性を確保するには、アプリケーションテーブルをIDocステータステーブルと同じ論理作業単位に転記する必要があります。そうしないと、「テーブルスペースがありません」などのデータベースエラーが発生して次のようになる可能性があります。
-
アプリケーションテーブルは正しく更新され、IDocステータスの更新は失敗します。IDocのステータスは「アプリケーションに渡す準備ができています」であり、データはすでに処理されていますが、2回目に処理されます。
-
IDocステータスの更新は成功し、アプリケーションの更新は失敗します。アプリケーションテーブルは更新されていませんが、IDocのステータスは「正常に処理されました」です。IDocを再度処理することはできないため、データがアプリケーションに到達することはありません。
1つの論理作業単位のみが使用されるようにするために、アプリケーション汎用モジュールはデータをデータベースにコミットしてはなりません。関数が呼び出され、IDocのステータスレコードが更新された後、データはALEレイヤーによってコミットされます。
COMMIT WORKはすべての呼び出しトランザクションの最後に自動的に実行されるため、呼び出しトランザクションを使用してアプリケーションデータを更新する場合、これは不可能です。この場合、後で示すように、トランザクション自体を変更する必要があります。
呼び出しトランザクションの代わりに呼び出しダイアログはCOMMITWORKを回避しますが、ダイアログステップにPERFORM ON COMMITステートメントが含まれていない場合にのみ使用できます-コミットはダイアログの終了後にALEを使用して設定されるため、ダイアログ中に設定されるすべてのグローバル変数は失った。したがって、呼び出しダイアログは細心の注意を払って使用する必要があります。
IDocにマスタデータ(顧客データなど)が含まれている場合、必要に応じて欠落データをいつでも再送信でき、IDocを2回処理しても重複ドキュメントが作成されないため、問題はそれほど深刻ではありません。