お客様:
この請求書の作成・編集画面ですが、【保存】ボタンを押したらデータが保存されて、【キャンセル】ボタンが押されたら、フォームを開く前の状態に戻すことはできませんか?
FileMaker開発者:
FileMakerだと無理ですね。FileMakerはフィールド以外の部分をクリックしたりレイアウトを閉じたりすると、その時点でレコードが確定するので、開く前の状態に戻すことは無理なんですよ…
お客様:
そうなんですか…FileMakerってやっぱり本格的なシステムだと使えないですね…
こんにちは。
株式会社ライジングサン・システムコンサルティングの岩佐です。
今回はFileMakerで、レコードのコミットとロールバックを制御する方法をご紹介します。
このテクニックを使うことで、冒頭にあるような「残念な」FileMaker開発者のようなセリフをいう必要は無くなります。
つまり、上記のような【保存】をクリックしたらレコードが保存され、【キャンセル】がクリックしたら元に戻すという動きを簡単に実現することができます。
また、一般的なプログラミング言語で開発してきた方にとっては、トランザクションのコミットとロールバックと表現したほうが解りやすいかもしれません。
FileMakerには、一般的なRDBMSにあるようなトランザクションの制御を少し変わった方法で実現します。
残念ながらこのような方法は、一般的なFileMakerの入門本には記載がありません。
しかし、FileMakerで大規模かつミッションクリティカルなシステムを実装するとなると、この辺りの技術は不可欠です。
特にFileMakerの最新バージョンでは、サーバサイドでスクリプトを実行という機能が搭載されました。
この機能が実装されたことで、通信状況が不安定になりがちなクライアントデバイスで、リスクの高いデータ更新処理を実施するのではなく、サーバサイドで「同期的に」実行することが可能になりました。
これは、一般的なRDBMSに例えるとストアドプロシージャに近いような機能になります。
もしくは、ソリューション構造をMVCモデルでたとえた場合ののコントロール層にあたるデータハンドリング部分を、サーバサイドで安全に実行するための機能と表現してもよいかもしれません。
このようなデータベースの複雑なデータ更新を安全に実行し、データの完全性を担保するためにはどうしてもこのトランザクション制御が必要になってきます。
多くのFileMaker入門書や解説書にはこの辺りのテクニックが記載されていないので、「FileMakerは大規模でミッションクリティカルなシステム開発には使えない」という印象を与えてしまいます。
しかし、そのようなことはありません。
実際、弊社では日々200デバイス近くのクライアントが、常時FileMakerServerにアクセスして、購買管理・販売管理・在庫管理・購買管理の各サブシステムが常に連携しながら動く大規模なソリューションをFileMakerで開発し、今でも運用・保守しております。
また、このシステムは、他の開発言語で実装されたソリューションとの連携も実現しているので、データの完全性が担保されている必要があります。そのようなソリューション開発に、トランザクション制御は不可欠です。
このビデオチュートリアルでは、FileMakerでトランザクション制御を簡単に行うためのテクニックを学ぶことができます。
このテクニックは非常に有用かつ、ある意味初歩的なものでもあります。
是非マスターして、あなたのソリューションをひとつ上のレベルにあげてください。
サンプルファイルURL:https://www.dropbox.com/s/vn2z917em00rb8e/CommitRoleBack.fmp12