search
LoginSignup
1

More than 1 year has passed since last update.

FileMakerProの"OnFirstFileOpen"スクリプトトリガを実行させるたった一つの冴えたやり方

はじめに

前書き

  • この記事は FileMaker Advent Calendar 2020 24 日目の記事です。
  • 現時点 ( FileMaker Pro 19.2 ) では OnFirstFileOpen などというスクリプトトリガは存在しません。そのため、それと同じ挙動を果たすものを実装しようという記事内容です。

対象読者

検証環境

  • Windows 10 Pro ローカル環境
    • FileMaker Pro 19.2.1.14

準備

ファイルの準備

  • 以下二つのファイルを用意します
    • A.fmp12
    • B.fmp12

A.fmp12

B.fmp12

フィールドの用意

  • A.fmp12 ファイルの準備と同時に進める。リレーションさえ結べればよいので、何でも構わないから値を入れておいてください。

スクリプトの作成

  • 以下の四つを用意
    • open
    • set_global_var.for_return
    • set_global_var.done_init_open
    • return_global_var.for_return

image.png

  • open については以下のように
    • 一度実行されたら、二度目は実行されないようにする

image.png

  • set_global_var.for_return については以下のように
    • 一度しか実行されなければ 1 がセットされるだけ
    • もし二度以上実行されたら、実行された回数分だけ数字が増えてしまうように

image.png

  • set_global_var.done_init_open については以下のように
    • 一度実行されたよ、というフラグ

image.png

  • return_global_var.for_return については以下のように
    • set_global_var.for_return で格納されたグローバル変数を結果として返す

image.png

ファイルオプション

  • 表示するレイアウト の指定をおこなう

image.png

スクリプトトリガの設定

  • 上記で指定をしたレイアウトにおいてスクリプトトリガを設定する
  • OnLayoutEnteropen スクリプトを指定

image.png

検証

A だけ開く → スクリプト実行

  • A.fmp12 ファイルだけを開く
  • スクリプト confirmation を実行
    • 明示的に B.fmp12 ファイルを開いていないにもかかわらず、正しく値が 1 として返ってくる!

image.png

B を開いて別レイアウトと行き来してみる

  • 別レイアウトを用意し、行き来してみても……

image.png

  • 値は増えていません!

image.png

  • なお open スクリプトの二度目以後実行の制御をコメントアウトしてみると……

image.png

  • 当然、値が増えます。レイアウトを開き直せば開き直すだけ、値は増え続けます。ということで、ちゃんと制御は入れておきましょう。

image.png

おわりに

まとめ

  • 「ファイルを開いたとき最初に一度だけ必ずスクリプトが実行されるように」という "OnFirstFileOpen" を自分で実装するには、以下の手順を踏みましょう
    • 初期表示用のレイアウトを用意
    • OnLayoutEnter スクリプトトリガで open スクリプトを実行
    • open スクリプトが再実行されないようにグローバル変数でフラグ処理をすること
  • つまり、OnFirstWindowOpenOnWindowOpen には頼るんじゃない! 頼れるのは OnLayoutEnter だ! ということになるかと思います。スクリプトトリガ実行用のレイアウトを用意するのが、ベストプラクティスということでしょう。

感想

  • たった一つじゃない可能性は大いにありますが、何はともあれこれでやりたいことは実現できるし、予期せぬ挙動で沼に落ちることもなくなります。

ちなみに

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
What you can do with signing up
1