FileMakerのトランザクション: ゲームの終盤

今回は、Geist InteractiveのJeremy Brownさんによるトランザクションについてのシリーズ記事の第5回最終回です。
前回までの記事をまだ読んでいない方は、以下から参照してください。

  1. FileMakerのトランザクション: 自信を持ってデータを更新する
  2. FileMakerのトランザクション: 正しくスタートする
  3. ポータルを使用したFileMakerのトランザクション処理
  4. FileMakerのトランザクション: マジックによるプロセス
  5. FileMakerのトランザクション: ゲームの終盤 (今回)

FILEMAKER TRANSACTIONS: ENDGAME

(元記事はこちら)

Jeremy Brown
2019/5/15

FileMakerのトランザクションを終了する方法は、 開始するのと同じくらい重要です。レコードが作成/編集/削除されたら、スクリプトはそれで終わりということではありません。最後がもっとも重要です。以下では、 Karbonmodularfilemaker.orgのtransactionモジュールがどう動作するか説明します。その一部か全体を使用してください。

すでに説明したように、トランザクションの終了とは、変更をコミットしようと試みて、プロセスのどこかでエラーがあった場合は元の状態に戻すことです。この時に追加であと片付けも行います。それではFileMakerのトランザクションを終了する方法を見てみましょう。

トランザクションスクリプトを終了する

Karbonには、End Transactionというスクリプトがあります。トランザクション全体が完了した後で呼び出されます。我々の例で言うと、EstimateとEstimateItemがOrderとOrderItemにコピーされた後です。以下がスクリプトの基本的な形です。

基本構造

  1. 「エラー処理」をオンに
  2. 「レコード/検索条件確定」ステップ
  3. エラーがあればそれをキャプチャ
  4. 復帰する

コミットを試みる

実際のトランザクションの手順(ポータルありまたはポータルなし)がすべてうまくいけば、1つ以上のテーブルに対する当初意図した変更は完了しています。レコードが作成されたか、既存のレコードの一部のフィールドのデータが変更され、すべてのレコードがコンピュータのメモリ上で開かれたままになっています。ここで、変更を実際のファイルにプッシュして変更を保存します。そこでコミットを試みます。

変更をコミットするという明示的な手順により、それらの変更はFileMakerファイル自体にプッシュされます。それによりデータが保存されます。新しいレコードが他のユーザのファイルに表示され、フィールド値が編集されたり、レコードが削除された結果が、他のユーザーの環境に反映されます。

このステップでは、トランザクションプロセスによって所有されているすべてのレコード(新しく作成または編集されたレコード、および親のEstimateレコード)の所有権も解放します。ロックを解除して他のユーザに変更(編集または新しいレコード)が見えるようにし、今度は彼らが編集できるようにします。

FileMakerでは、コミットステップは一度にすべてのレコードをコミットします。順番があるわけではありません。すべてが同時にコミットします。この機能によって、すべての変更が一度に行われたことが保証されます。

途中でのエラー

コミットステップでエラーが発生した場合は、ロールバックに進みます。それはどんなエラーでしょうか?

今回の例ではレコードを作成しているので、検証エラーが発生する可能性があります。レコードを作成または編集している場合、検証エラーが発生することがあります。

コミット時になんらかのフィールドレベルの検証の計算式にエラーがあると、コミットは失敗する

 

変更をロールバックする

プロセス内のどこかにエラーがある場合、トランザクションモデルはプロセスが行った変更をロールバックできます。これまでに加えられた変更はコンピュータのメモリに保持されているので、加えられた変更は単に破棄されるだけです。ファイルには保存されません。

キューに入れられた変更がエラーを投げることがあります。それについてはすでに説明しました。同じようにこの最後のコミットのステップでもエラーが起こりえます。どこかにエラーがあれば、ロールバックを開始します。

FileMakerでは「レコード/検索条件復帰」を使います。このステップは、現在のレコードとトランザクション中に変更されたすべてのレコードを元に戻します。我々の例では、エラーが発生して「復帰」する場合、EstimateとすべてのEstimate Line ItemはOrderテーブルにコピーされません。

注意: 開始コンテキストレイアウトのonRecordCommitにスクリプトトリガが設定されていてコミットが失敗した場合、トリガは失敗し、そのスクリプトは実行されません。

あと片付け

FileMakerのトランザクションが終了したら、残りの処理を行ってこのプロセス全体を終了させます。DBTransactionsのようなコンテキストを使用している場合、トランザクションの成功または失敗の理由を説明する情報をレコードに追加できます。KarbonとModularFileMakerには、エラーを取得してJSONオブジェクト形式で報告する一連のカスタム関数があります。この情報は後での参照用にフィールドに記録されます。

FileMakerトランザクションを終了する

トランザクションを終了する部分は、プロセスの重要なステップです。トランザクションを始めたからには、手順にしたがってプロセスを終わらせる必要があります。同時にあと片付けもすることをお勧めします。トランザクションがどのようにコミットまたはロールバックしたかを理解するのに重要だと思われる情報を、ログに記録してください。

Leave a Reply