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