第99回 ポップオーバーを表示したままにする

おはようございます。こんにちは。こんばんは。
エヌ・ケイ・カスタマイズの 泉 です。

弊社は社員が増え、ブログの担当が回ってくるまでのインターバルが長くなりました。
前回が3月末で桜🌸の話をしていましたが、もう5月中旬!!
日差しが徐々に強くなり、子供との公園遊びが過酷になってきました。
今のうちから暑さ対策グッズをGetしていきたいと思います!!

それでは、さっそくFileMakerのテクニックについて勉強していきましょう

ポップオーバーを表示したままにする

FileMakerの開発に慣れていない頃は、データ(フィールド)の数に関係なく、入力画面に「ウインドウ」を使っていました。

ですが、最近はデータ量が少ない場合は、入力画面に「ポップオーバー」を利用することも増えてきました。
「ポップオーバー」だと画面遷移がなく、元のウインドウの情報を見ながら入力することもでき、
エンドユーザー様からするとメリットが多いと思われます。

ただ、ポップオーバーはその仕様上、ポップオーバーのエリア外をマウスでクリックすると、閉じてしまいます。
便利な機能(インタフェース)ですが、意図せず閉じてしまうと、エンドユーザー様の小さなストレスとなり、
そのストレスが積み重なると、システムへの印象に影響を与えかねません。

そこで、意図せず閉じてしまうことを防止する措置を講じましょう!!

どうやって実装するか

そもそも、ポップオーバーの「エリア外がクリックされたら閉じる」という仕様を、そとからどうこうできるのでしょうか?
レイアウトモードにして「ポップオーバーボタンの設定」を見ても、それらしい設定項目はありません。

ポップオーバーボタンの設定

では、どうするか

ヒントは「ポップオーバーボタンの設定」ダイアログにあります。
そうです「スクリプトトリガ設定」です!!

『エリア外がクリックされた』

というアクションは

『オブジェクト(ポップオーバーボタン)から他のオブジェクトにアクティブが移動した』

というイベントに置き換えられます。

これに該当するイベントが OnObjectExit です!!

スクリプトトリガを設定するイベントはわかりましたが、どうすれば『ポップオーバーを閉じる』をキャンセルできるのでしょうか?

それには、『イベント』と『スクリプトトリガ』の仕組みを知る必要があります。
今回の OnObjectExit を例にとってみましょう。

ポップオーバーが閉じる際には OnObjectExit イベントが発生します。
OnObjectExit スクリプトトリガにスクリプトを設定すると、そのスクリプトはイベントの発生前に実行されます。
スクリプトの結果を偽(0) にすることでイベントをキャンセル(なかったことに) できます。

以上のことを踏まえて、実装してみましょう!!

実装

  1. レイアウトにポップオーバーを配置します。
    配置したポップオーバーの中に閉じるためのボタンを配置します。

  2. ポップオーバーを閉じるためのスクリプトを作成して、「閉じる」ボタンにボタン設定します。
    • 「閉じる」ボタンが押されたことを示すフラグ(グローバル変数) を設定します。
    • [ ポップオーバーを閉じる] スクリプトステップでポップオーバーを閉じます。
    • [ レコード/検索条件の確定] スクリプトステップでポップオーバーボタンがアクティブのままになるのを防ぎます。

  3. ポップオーバーの中に配置した「閉じる」ボタンに、作成したスクリプトをボタン設定します。
    • 「閉じる」ボタンを押すと、スクリプトの 2 行目で [ポップオーバーを閉じる] スクリプトステップが実行された際に OnObjectExit スクリプトトリガが割り込んで実行されます。
    • スクリプトトリガが終了した後で 3 行目の[ レコード/検索条件確定] が実行されます。

  4. ポップオーバーが閉じる際に OnObjectExit スクリプトトリガで実行されるスクリプトを作成して、ポップオーバーボタンにスクリプトトリガ設定します。
    • 「If」でグローバル変数「$$閉じるフラグ」の値を評価して「閉じる」ボタンが押されたかどうか判定します。
    • グローバル変数が[ 1] の場合は [現在のスクリプトを終了] スクリプトステップが[ テキスト結果: 1]で実行されるようにします。グローバル変数の値も空に戻します。
    • それ以外の場合(ポップオーバーの外をクリックしたときなど) は[ テキスト結果: 0] で実行されるようにします。

  5. 作成したスクリプトをポップオーバーの OnObjectExit スクリプトトリガに設定します。

実行

(A) ポップオーバーの外側をクリックしたとき: ポップオーバーは閉じません。

(B) ポップオーバーの中の「閉じる」ボタンをクリックしたとき: ポップオーバーは閉じます。

まとめ

いかがだったでしょうか?

ユーザーインタフェースの良し悪しは、エンドユーザー様の作業、業務に直結します。
我々開発者は、お客様からの要望だけを実装するのではなく、開発中に自分がストレスに感じるところがあれば、可能な範囲で事前に解消してあげたいものです。

ただ、あくまでも「(予算、見積で)可能な範囲」ですよね。
開発者として、お客様のためを思ってシステムをリッチにしたい気持ちは、皆さんお持ちだと思いますが、要望外の仕様を実装するために、予算、見積をオーバーするのはWin-Winとは言えません。

え?今回の「ポップオーバーを表示したままにする」は、可能な範囲に入るか?ですって?

それは、、、
開発者の熟練度によると思います!!

それでは、次回のブログもお楽しみに!!

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