10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FileMakerAdvent Calendar 2019

Day 19

FileMakerでのキャンセル処理の実装

Last updated at Posted at 2019-12-18

FileMakerでの開発業務をしているとお客様からキャンセル機能が欲しいとご要望いただくことが多く、
レイアウトオプションの「レコードの変更を自動的に保存する」の話をさせていただくがイマイチ収まりが悪いことが多い。

UI上の考慮だとかについて今回は割愛し、キャンセル機能の実装についてのみ、ざっくりと

前提ファイル

  • FileMaker Pro Advanced 18 (古いバージョンでもまぁ動きます)

実装

テーブル構造

スクリーンショット 2019-12-03 10.58.03.png

肝になるのはフィールド「#Flag」だけで、初期値として「0」が格納される様に設定してあります。
余談ですけどシステム用のフィールドの頭に記号を付ける時「#」を使うのはマイナーなんですかね

画面

スクリーンショット 2019-12-03 10.57.00.png

挙動

スクリーンショット 2019-12-03 10.57.24.png

スクリーンショット 2019-12-03 10.57.48.png

スクリプト

スクリーンショット 2019-12-03 10.58.57.png
スクリーンショット 2019-12-03 10.58.39.png
スクリーンショット 2019-12-03 10.58.47.png

スクリプトの動きについて

スクリプトの挙動としては「Layout: OnSavingRecordEvent」でフィールド「#Flag」の値をチェックし
OKボタンが押されるまでは、レイアウトの保存イベントを中止させることで、レコード復帰で戻せる状態をキープしている。
Get(レイアウトテーブル名)を使用しているのは、フラグとなるフィールドを用意してあげれば他のレイアウトでの使い回しが容易なため。

余談

Get(変更されたフィールド)などで、イベントのタイミングをもうちょっと制御したり
UIを作り込むためのフィールドを追加した際に、少し面倒になる。
フィールド名に記号を追加しておいてGet(変更されたフィールド)で取得した際に、
PatternCountでフィルターして例外処理を組んであげれば良いかと。

願望

レイアウト上のフィールド情報をJSON形式で取得したい。
レイアウト上にフィールド.プロパティ名でデータを表示したい。
極論レイアウトをオブジェクトとして書き換えたいんだけどそこまでするならFileMakerでやる必要とは、、、、

10
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?