2016年6月5日日曜日

スクリプト一時停止の罠をやっつける

FileMakerのスクリプトステップのひとつ、「スクリプト一時停止/続行」、使ってますか?

停止する時間を指定できますので、処理中にウェイトを挟むときとかに便利なやつです。

しかし、このスクリプトステップには罠があります。

デモ用ファイル



罠を再現するために作りました。

「メイン処理」ボタンを押すと、4秒間停止した後に、「終了」のダイアログが出るようになってます。

ところが、この停止している間に「割り込み処理」ボタンを押すと、停止したまま動かなくなります。

上のメニューバーに出ている「続行」を押すことでまた動き始めるのでよさそうなもんですが、

メニューバーは実用時には消しておくのが普通なので、実用時にこれが起きると、再開する方法がありません。

これがスクリプト一時停止の罠です。

やばくないですか?

というわけで今回は、この罠をやっつけたいと思います。



主役はポップオーバーさん。

レイアウト内に配置して、クリックしたときだけに表示させたいフィールドなどを置いておく、といったのが普通の使い方なのですが。

今回はこれを画面外に配置します(右上)。


スクリプト一時停止/実行の前に、このポップオーバーを開くようにしてあげます(ポップオーバーを開くというスクリプトステップはありませんので、ポップオーバーに名前をつけて、オブジェクト移動)。


すると、こういうふうになります。

ポップオーバーが開いているので、「割り込み処理」ボタンは押せません。

これで一件落着……に見えるんですが、実はそうじゃありません。

これだけだと、ポップオーバーがカバーしきれていない隙間をクリックしたとき、ポップオーバーが閉じてしまい、「割り込み処理」ボタンを押せるようになってしまいます。

ですので、追加で、スクリプト一時停止中は、ポップオーバーを閉じさせない細工をする必要があります。

具体的には、ポップオーバーのスクリプトトリガ・OnObjectExitにポップオーバーを閉じさせないためのスクリプトを設定します。

ポップオーバーから脱出されそうなときに、監視をさせるようなイメージ。

この監視網を張ってやれば、目的達成です。

ポップオーバーがレイアウトを守っているので、一時停止中にボタンは押せませんし、たとえ画面端をクリックされようとも、ポップオーバーが閉じることはありません。

何をしようが、4秒後には「終了」のダイアログが必ず表示されるというわけです。

ポップオーバーさん+監視スクリプト=鉄壁?