やりたい事
スクリプトトリガが発火したとき、ユーザー操作によって発火したか他のスクリプトのステップにより発火したかを区別したい。
Get ( コールスタック )があれば嬉しいが、無い。
Get ( スクリプト名 )だと今まさに実行中のスクリプト名しか取れない。
解決策
スクリプトトリガ設定時、スクリプト引数にGet ( スクリプト名 )を設定する。
解説
スクリプト内部でトリガが発火した場合、引数としてそのスクリプト名が渡されるし、ユーザー操作により発火したなら空であるから
If [ IsEmpty ( Get ( スクリプト引数 ) ) ]
# ユーザー操作による発火時の動き
Else
# スクリプトステップによる発火時の動き
End If
とすれば、うまく処理を分ける事ができる。
より具体的な使用場面
⌘+F などで検索モードに切り替えた時には何か処理をしたいが、[スクリプトステップ 検索実行]などの時には何もしないでほしい。
この場合、レイアウトのスクリプトトリガである"OnModeEnter"にスクリプトを仕込めば、検索モード切り替えの時にスクリプト実行できる。しかし、[検索実行]や[対象レコードの絞り込み]など、直感的にはウインドウモードの切り替えが発生しなさそうなタイミングでもトリガが発火してしまう。
このような場合、上記のように引数にGet ( スクリプト引数 )を渡せばユーザー操作とスクリプトステップを区別し、確実にユーザー操作時のみ処理を実行させることができる。
まとめ
スクリプトトリガを既存のレイアウトに新たに仕込む時、既存のスクリプトと競合して意図しない動きをしてしまうことは多い。
上記の対策である程度回避できる。