2
0

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.

【filemaker】スクリプトトリガを発火させたのは何か特定したい

Posted at

やりたい事

スクリプトトリガが発火したとき、ユーザー操作によって発火したか他のスクリプトのステップにより発火したかを区別したい。
Get ( コールスタック )があれば嬉しいが、無い。
Get ( スクリプト名 )だと今まさに実行中のスクリプト名しか取れない。

解決策

スクリプトトリガ設定時、スクリプト引数にGet ( スクリプト名 )を設定する。

解説

スクリプト内部でトリガが発火した場合、引数としてそのスクリプト名が渡されるし、ユーザー操作により発火したなら空であるから

If [ IsEmpty ( Get ( スクリプト引数 ) ) ]
  # ユーザー操作による発火時の動き
Else
  # スクリプトステップによる発火時の動き
End If

とすれば、うまく処理を分ける事ができる。

より具体的な使用場面

⌘+F などで検索モードに切り替えた時には何か処理をしたいが、[スクリプトステップ 検索実行]などの時には何もしないでほしい。

この場合、レイアウトのスクリプトトリガである"OnModeEnter"にスクリプトを仕込めば、検索モード切り替えの時にスクリプト実行できる。しかし、[検索実行]や[対象レコードの絞り込み]など、直感的にはウインドウモードの切り替えが発生しなさそうなタイミングでもトリガが発火してしまう。

このような場合、上記のように引数にGet ( スクリプト引数 )を渡せばユーザー操作とスクリプトステップを区別し、確実にユーザー操作時のみ処理を実行させることができる。

まとめ

スクリプトトリガを既存のレイアウトに新たに仕込む時、既存のスクリプトと競合して意図しない動きをしてしまうことは多い。
上記の対策である程度回避できる。

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?