第107回 レコードを明示的に保存する

こんにちは。エヌ・ケイ・カスタマイズの沖田です。
先週は、弊社が「鹿児島ユナイテッドFC」様のマッチスポンサーとなるスペシャルマッチがあり、無事終えることができました。弊社ブースへ来られた方々、ありがとうございました。そして、試合も勝利して記憶に残る1日となりました!

さて、今回はレコードの編集内容を Claris FileMaker の機能で自動的に保存するのではなく、ユーザがボタンを押すことで明示的に保存するようにします。また、変更を破棄するためのボタンによって変更前の状態に戻せるようにします。

よく、「入力をして、登録ボタンを押した時に保存できる仕組みにできませんか?」と聞かれることも実際多いです。構築の仕方はいろいろあるのですが、今回記載するのはそのうちの1つの方法として覚えて頂ければと思います。

以下の記事は、Claris FileMaker 関数・スクリプトガイド(バージョン 19 対応)より、
「20.レコードを明示的に保存する(818ページ)」を元に掲載しています。

この文献から、スクリプトトリガとグローバル変数を使って、Claris FileMaker のレコード自動保存機能をキャンセルしてしまう、というちょっと高度な技を学習することができました。文献の執筆者、関係者の方々に深謝いたします。

なお、このブログ記事の趣旨は、弊社所属スタッフの Claris FileMaker 学習の成果を公開することを目的とし、同時に、参考文献の内容の紹介に資するものであることを Claris International Inc. が確認しています。

Claris FileMaker 公式トレーニング教材

考え方

OnRecordCommit スクリプトトリガを使えばレコードの変更が確定(保存) される際にスクリプトを実行できます。保存ボタンが押されたときだけレコードの確定が行われるスクリプトを作成してスクリプトトリガに割り当てます。

関数・スクリプト実装例

(1) レイアウトにボタンと注意書きを配置します。
 ・レコードの変更を確定(保存) するためのボタン( 「保存」) と変更を破棄するためのボタン( 「キャンセル」) を配置します。
 ・レコードが変更されたときに保存を促す注意書きを表示するラベルを配置します。

レイアウトに表示用テキストと保存・キャンセルボタンを配置

 ・配置したボタンとラベルがレコードが変更されていないときに表示されないように[ 次の場合にオブジェクトを隠す] 設定を行います。ここでは取得関数の Get ( レコードのオープン状態 ) を使用してレコードの状態を取得します。レコードが確定されている(変更されていない) 状態では[ 0] が返ります。

◇ Get(レコードのオープン状態とは?

  • 現在のレコードの状態を示す番号を返します。

    「0」 閉じている(確定された)レコードの場合
    「1」 確定されていない新しいレコードの場合
    「2」 確定されていない変更されたレコードの場合

    「3」 確定されていない削除されたレコードの場合
  • 詳しくはこちらを参照ください。

 ・ 配置したボタンとラベルがレコードが変更されていないときに表示されないように[ 次の場合にオブジェクトを隠す] 設定を行います。ここでは取得関数の Get ( レコードのオープン状態 ) を使用してレコードの状態を取得します。レコードが確定されている(変更されていない) 状態では[ 0] が返ります。

キャンセルボタンと保存ボタンに[次の場合にオブジェクトを隠す]を設定

(2) レコードが自動的に確定されないようにスクリプトトリガを設定します。
 ・ [レイアウト設定] の [スクリプトトリガ] から OnRecordCommit スクリプトトリガにスクリプトを作成します。

レイアウト設定のOnRecordCommitスクリプトトリガ

 ・グローバル変数( $$確定フラグ ) が[ 1] の場合にレコードが確定されるようにします。 [現在のスクリプト終了] の [結果] を[ 1] にすれば OnRecordCommit スクリプトトリガが実行されレコードが確定されます。[ 変数を設定] スクリプトステップでグローバル変数の値もリセットします。

 ・それ以外の場合はレコードが確定されないようにします。 [現在のスクリプト終了] の [結果] を[0]にすれば OnRecordCommit イベントがキャンセルされレコードが確定されません。[ ウインドウ内容の再表示] でボタンとラベルに設定した [次の場合にオブジェクトを隠す] を評価しています(レコードに変更があったとき表示される)。

OnRecordCommit時のスクリプトの中身

(3) ボタンにスクリプトを割り当てます。
 ・「保存」ボタンのスクリプトを作成して割り当てます(ボタン設定)。グローバル変数に[ 1]を設定します。[レコード/検索条件確定] が実行されると OnRecordCommit スクリプトトリガが発生してレコードが確定されます。レコードの確定後には[ ウインドウ内容の再表示] で [次の場合にオブジェクトを隠す] が評価されます(レコードが確定されたので非表示になる)。

保存ボタン時のスクリプト

 ・「キャンセル」ボタンに [レコード/検索条件復帰] を割り当てます(単一ステップ)。レコードの変更は破棄されて変更前の状態に戻ります。

キャンセルボタン時はレコード/検索条件復帰 ステップを設定

実行

(A) レコードを変更したとき: 保存ボタン・キャンセルボタンと注意書きのラベルが表示されます。

何かしら変更が加わると、変更メッセージ、キャンセル 保存ボタンが表示される

(B) レコードの変更後に 「保存」ボタンを押したとき: レコードの変更が確定(保存) されます。

保存ボタンを押すと、レコードが確定される

(C) レコードの変更後に 「キャンセル」ボタンを押したとき: レコードの変更が破棄され、変更前の状態に戻ります。

キャンセルボタンを押すと、レコード変更が破棄されて、変更前の状態に戻る

まとめ

今回は、レコードを明示的に保存する方法について学習しました。このような方法は、他にもグローバルフィールドを用いた方法などいくつかあります。

いずれにしても、この明示的に保存する仕組みは、要望が多いですので、是非覚えておいて損はないと思います。

次回も引き続きよろしくお願い致します。
それでは、来週もお楽しみに!


参考文献: Claris FileMaker 公式トレーニング教材 から、「Claris FileMaker 関数・スクリプトガイド」等を参考にしています
https://content.claris.com/fmb19_reg-ja