FileMakerでの開発業務をしているとお客様からキャンセル機能が欲しいとご要望いただくことが多く、
レイアウトオプションの「レコードの変更を自動的に保存する」の話をさせていただくがイマイチ収まりが悪いことが多い。
UI上の考慮だとかについて今回は割愛し、キャンセル機能の実装についてのみ、ざっくりと
前提ファイル
- FileMaker Pro Advanced 18 (古いバージョンでもまぁ動きます)
実装
テーブル構造
肝になるのはフィールド「#Flag」だけで、初期値として「0」が格納される様に設定してあります。
余談ですけどシステム用のフィールドの頭に記号を付ける時「#」を使うのはマイナーなんですかね
画面
挙動
スクリプト
スクリプトの動きについて
スクリプトの挙動としては「Layout: OnSavingRecordEvent」でフィールド「#Flag」の値をチェックし
OKボタンが押されるまでは、レイアウトの保存イベントを中止させることで、レコード復帰で戻せる状態をキープしている。
Get(レイアウトテーブル名)を使用しているのは、フラグとなるフィールドを用意してあげれば他のレイアウトでの使い回しが容易なため。
余談
Get(変更されたフィールド)などで、イベントのタイミングをもうちょっと制御したり
UIを作り込むためのフィールドを追加した際に、少し面倒になる。
フィールド名に記号を追加しておいてGet(変更されたフィールド)で取得した際に、
PatternCountでフィルターして例外処理を組んであげれば良いかと。
願望
レイアウト上のフィールド情報をJSON形式で取得したい。
レイアウト上にフィールド.プロパティ名でデータを表示したい。
極論レイアウトをオブジェクトとして書き換えたいんだけどそこまでするならFileMakerでやる必要とは、、、、