Brownさんによるトランザクションについてのシリーズ記事の第5回最終回です。前回までの記事をまだ読んでいない方は、以下から参照してください。開始するのと同じくらい重要です。レコードが作成/編集/削除されたら、スクリプトはそれで終わりということではありません。最後がもっとも重要です。Karbonとmodularfilemaker.orgのtransactionモジュールがどう動作するか説明します。その一部か全体を使用してください。説明したように、トランザクションの終了とは、変更をコミットしようと試みて、プロセスのどこかでエラーがあった場合は元の状態に戻すことです。この時に追加であと片付けも行います。それではFileMakerのトランザクションを終了する方法を見てみましょう。Transactionというスクリプトがあります。トランザクション全体が完了した後で呼び出されます。我々の例で言うと、EstimateとEstimateItemがOrderとOrderItemにコピーされた後です。以下がスクリプトの基本的な形です。「エラー処理」をオンに「レコード/検索条件確定」ステップエラーがあればそれをキャプチャ復帰するコミットを試みる実際のトランザクションの手順(ポータルありまたはポータルなし)がすべてうまくいけば、1つ以上のテーブルに対する当初意図した変更は完了しています。レコードが作成されたか、既存のレコードの一部のフィールドのデータが変更され、すべてのレコードがコンピュータのメモリ上で開かれたままになっています。ここで、変更を実際のファイルにプッシュして変更を保存します。そこでコミットを試みます。変更をコミットするという明示的な手順により、それらの変更はFileMakerファイル自体にプッシュされます。それによりデータが保存されます。新しいレコードが他のユーザのファイルに表示され、フィールド値が編集されたり、レコードが削除された結果が、他のユーザーの環境に反映されます。このステップでは、トランザクションプロセスによって所有されているすべてのレコード(新しく作成または編集されたレコード、および親のEstimateレコード)の所有権も解放します。ロックを解除して他のユーザに変更(編集または新しいレコード)が見えるようにし、今度は彼らが編集できるようにします。FileMakerでは、コミットステップは一度にすべてのレコードをコミットします。順番があるわけではありません。すべてが同時にコミットします。この機能によって、すべての変更が一度に行われたことが保証されます。途中でのエラーコミットステップでエラーが発生した場合は、ロールバックに進みます。それはどんなエラーでしょうか?今回の例ではレコードを作成しているので、検証エラーが発生する可能性があります。レコードを作成または編集している場合、検証エラーが発生することがあります。コミット時になんらかのフィールドレベルの検証の計算式にエラーがあると、コミットは失敗する変更をロールバックするプロセス内のどこかにエラーがある場合、トランザクションモデルはプロセスが行った変更をロールバックできます。これまでに加えられた変更はコンピュータのメモリに保持されているので、加えられた変更は単に破棄されるだけです。ファイルには保存されません。キューに入れられた変更がエラーを投げることがあります。それについてはすでに説明しました。同じようにこの最後のコミットのステップでもエラーが起こりえます。どこかにエラーがあれば、ロールバックを開始します。FileMakerでは「レコード/検索条件復帰」を使います。このステップは、現在のレコードとトランザクション中に変更されたすべてのレコードを元に戻します。ItemはOrderテーブルにコピーされません。開始コンテキストレイアウトのonRecordCommitにスクリプトトリガが設定されていてコミットが失敗した場合、トリガは失敗し、そのスクリプトは実行されません。あと片付けFileMakerのトランザクションが終了したら、残りの処理を行ってこのプロセス全体を終了させます。DBTransactionsのようなコンテキストを使用している場合、トランザクションの成功または失敗の理由を説明する情報をレコードに追加できます。KarbonとModularFileMakerには、エラーを取得してJSONオブジェクト形式で報告する一連のカスタム関数があります。この情報は後での参照用にフィールドに記録されます。FileMakerトランザクションを終了するトランザクションを終了する部分は、プロセスの重要なステップです。トランザクションを始めたからには、手順にしたがってプロセスを終わらせる必要があります。同時にあと片付けもすることをお勧めします。トランザクションがどのようにコミットまたはロールバックしたかを理解するのに重要だと思われる情報を、ログに記録してください。