先月ご紹介したトランザクションについての記事は、調べたところ5年ほど前にTodd Geistさんが書いたものでした。FileMakerのトランザクション機能については基本的にそこから変わったところはありません。
先月Geist Interactiveのサイトで、トランザクションについての新しいシリーズ記事の連載が始まったようなので、合わせてご紹介します。
シリーズの他の記事も合わせてご参照ください。
- FileMakerのトランザクション: 自信を持ってデータを更新する
- FileMakerのトランザクション: 正しくスタートする
- ポータルを使用したFileMakerのトランザクション処理
- FileMakerのトランザクション: マジックによるプロセス
- FileMakerのトランザクション: ゲームの終盤
- FileMakerのトランザクション:レコードを編集する
FILEMAKER TRANSACTIONS: HAVE CONFIDENCE IN DATA CHANGES
(元記事はこちら)
2019/4/18
Jeremy Brown
FileMaker開発者としての仕事の大部分は、レコードを作成・編集・削除するワークフローをデザインすることです。スクリプトで複数のレコードの変更(追加・編集・削除)を完結させる場合、つまり、一つのまとまったエンティティ(請求書とその明細など)を完全に変更する必要がある場合は、データベーストランザクションが必要です。FileMakerのデータ変更を確実に行えるように、データベーストランザクションがどのように機能するかを見てみましょう。
例題
印刷会社用のカスタムAppを想定してみましょう。見積明細(Estimate Line Item)を持った見積書(Estimate)を作成します。
この例のワークフローでは、受注書(Order)と受注明細(Order Line Item)が、見積書(Estimate)と見積明細(Estimate Line Item)からコピーされます。以下はその場合に書かれるであろう典型的なスクリプトです。
このスクリプトにはいくつか問題があります。よく中身を見て考えてみてください。上で述べた内容に基づいて、どんな問題が見つかるでしょうか?
考える間、ここで少し待ちます。🙂
最大の問題は、新しいOrderレコードと新しいOrder Line Itemレコードを別々にコミットしていることです。以下が一連の動作です。
- Orderテーブルに移動して、レコードを作成する
- Order Line Itemテーブルに移動する。この操作で、Orderレコードがコミットされる
- Order Line Itemテーブルに新しいレコードを作成する
- ループの最初の繰り返しの後、新しいレコードを作成する。これによって、前に作成されたOrder Line Itemレコードがコミットされる
このように順番にコミットが行われていきます。データビューアでは、Get ( 開いているレコード数 ) は1を示しています。開いているレコードは1つだけです。前のレコードはすでにファイルに保存されています。
スクリプトの実行中に電源が切れるかネットワークに障害が発生した場合、受注明細レコードの一部が作成され、残りの明細レコードは作成されません。
これは問題です。
解決策
FileMakerはトランザクションに対応したデータベースプラットフォームです。トランザクションは、レコードを作成・編集・削除するための完全なプロセスです。このプロセスでは、作成または編集後にすべてのレコードがまとめてファイルに保存されるように設定されます。また、レコードに対して行われた変更をロールバックするようにも設定されます。トランザクションモデルにより、FileMakerのデータを信頼できるようになります。
全レコードをコミット
FileMaker開発者としてのあなたの目標は、信頼できるワークフローを提供して、ユーザのデータを正しく完全な状態に保つことです。トランザクションによって、データベース内のレコードに加えたすべての変更が確実にコミットされ、一度にデータベースに保存されます。
レコードをロールバックする
どこかにエラーがある場合(例えば停電によるデータの破損やのレコードの所有権の問題など)、FileMakerのトランザクションはデータを直前の状態にロールバックします。トランザクションモデルを使うことによって、レコードに対して行われた変更(追加/編集/削除)は、保存されません。前に保存されていたデータが保持されます。
トランザクションのステップ
トランザクションの完全な手順は次のとおりです。
- トランザクションを開始する
- レコードを作成/編集/削除する
- トランザクションを終了する
FileMakerではこれらすべてを実行することができ、初心者でもそれほど難しいことではありません。これらについて簡単に説明してから、これらについて別の投稿でさらに詳しく見ていきます。
トランザクションを開始する
トランザクションを実行するには、まずそれを開始する必要があります。正しいコンテキストを最前面に出し、追加するデータを取得し、そして準備をします。開始ステップには、以下のいずれかを含みます。
- 適切なトランザクション用のレイアウトに移動する
- 追加または編集するデータを検証する
- トランザクションを行うレコードを作成または開く。トランザクションログ情報を記録する
- レコードの所有権を取る
ここで行った手順に関係なく、最後の手順は、トランザクション処理を続行するか、何かが正しくない場合にはトランザクション処理を停止することです。
複数のレコードを更新する
トランザクションが開始されて続行できる場合、レコードを追加するか、編集するか、削除します。この部分は簡単です。私たちが毎日書いているスクリプトそのものです。これについては今後の記事で詳しく説明します。
トランザクションを終了する
トランザクションの終了時には、
- 行ったレコードの変更のコミットを試みる
- エラーがないか確認する
- エラーがある場合はレコードを復帰する
- (適宜追加)データの後片付け。トランザクションの成功(または失敗)およびその他の情報を記録する
トランザクションの構成
FileMakerのトランザクションの構成は単純です。必要なのは以下にあげるものだけです。
- 開始時のコンテキスト
- レコードが追加されるテーブルオカレンスとのリレーション。このリレーションで「このリレーションシップを利用して、このテーブルでのレコードの作成を許可」を有効にする
- スクリプトでレコードの作成/編集/削除を制御し、誤ってレコードをコミットしないようにする
FileMakerデータを信頼する
今のところはこれで十分です。これは一つのやり方であり、じっくり議論する価値があるものです。これからいくつかの記事で、上記の3つのステップについて説明していきます。概念的な話と実際の操作の両方について論じる予定です。確実に変更がすべて行われるか、まったく行われないようにして、FileMakerのデータを信頼できるものにすることが重要です。この話題にはより詳しい説明が必要なので、今後の記事でカバーしていく予定です。乞うご期待。