みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
FileMaker Pro 19.3.2, macOS Monterey 12.0.1
ループ処理を行うスクリプト(ループスクリプト)があり、処理内容にバグ、重い処理が入っていた場合に、
ユーザーが対応できるように、そのスクリプトの最初に「ユーザーによる強制終了を許可」をオンにしてあります。
ただ、上記のループスクリプトを実行させる前に
処理用のレイアウト等の設定をスクリプト(前処理スクリプト)で行なっており、
この前処理スクリプト内で、上記のループスクリプトを実行させています。
事後処理も、この前処理スクリプトでおこなっており、
途中で終了されないように、この前処理スクリプトでは「ユーザーによる強制終了を許可」をオフにしてあるのですが、
強制終了をおこすと、この前処理スクリプトも終了となってしまい、
事後処理が行われず、ループ処理中のレイアウトが表示されてしまいます。
ユーザーによる強制終了を行わせたあとに、自動でスクリプトを実行させる方法はありますでしょうか?
ご教示よろしくお願いいたします。
Last edited by 37 (2021-11-04 09:07:07)
Offline
簡単な実験してみましたが、「[ユーザによる強制終了を許可] スクリプトステップが影響するのは、このスクリプトステップが実行するスクリプトおよびすべてのサブスクリプトです。」て書いてあるにもかかわらず、サブスクリプトを強制終了すると呼び出し元に戻りませんね。
バグかな?
昔はマウスカーソルにESCが出てるときにESCキーを押すと「すべてのスクリプトを中断しますか」っていうダイアログが出てた気がするんだけど、記憶違いかなあ?
どっちにしても、そのユーザーの選択で中断したら、「すべて」なので、呼び出し元に戻るわけではなかった気がするけど...
esc か cmd+. でスクリプトが中断できましたよね。FM6までかな。
全てのスクリプトが停止していたので、その仕様のままだと思います。英語ヘルプもサブスクリプトに影響すると書いてあるので、記述の間違いなのでは。
Offline
親スクリプトがユーザ操作(esc等)で中断されると、サブスクリプトも中断されますね。
逆にサブスクリプトが中断されても、親スクリプトは中断されません。
※親スクリプトで[ユーザによる強制終了を許可](オフ)にしても、
サブスクリプトで[ユーザによる強制終了を許可](オン)にすると、
サブスクリプトを抜けたときに親スクリプトは[ユーザによる強制終了を許可](オン)になります。
(この動きは正しいのか?)
質問のケースはこちらではないかと。
escを1回だけ触れるように押す(ちょっとでも長めに押すと親スクリプトも中断される)と戻ることが確認できるかと。
Offline
himadaneeさん
Shinさん
Mozさん
重鎮の皆さんにご確認いただいたようで、大変ありがとうございます。
私もMozさんのおっしゃるような印象を持っていたので、
下記のMain()、_Loop()2つのスクリプトを用意してテストしてみました。
私のESCの押し方にも問題があるのかもしれませんが、
何度試しても、Endのカスタムダイアログが表示されません。
ちなみに⌘+.でも同じ挙動でした。
一時的なバグならよいのですが、皆さんの感触だと、以前からも同じ動きを
していそうなので、あまり解決策はない、と考えた方がよいのでしょうか?
引き続き、ご意見をいただければと思います。よろしくお願いいたします。
Main()
ユーザによる強制終了を許可 [ オフ ]
カスタムダイアログを表示 [ "Start" ; "開始しました。" ]
スクリプト実行 [ 指定: 一覧から ; 「_Loop()」 ; 引数: ]
ユーザによる強制終了を許可 [ オフ ]
カスタムダイアログを表示 [ "End" ; "終了しました。" ]
_Loop()
ユーザによる強制終了を許可 [ オン ]
Loop
Exit Loop If [ Let ( [ $counter = $counter + 1; $wait = 0 ]; 1000 < $counter ) ]
Loop
Exit Loop If [ Let ( [ $wait = $wait + 1 ]; 1000 < $wait ) ]
End Loop
新規レコード/検索条件
End Loop
Last edited by 37 (2021-11-04 12:50:00)
Offline
>サブスクリプトを抜けたときに親スクリプトは[ユーザによる強制終了を許可](オン)になります。
ああ、なるほど。エラー処理と同じで、スクリプト単位で元に戻ったりはしないってことですか。それは、ありそうですね。
しかし、
>escを1回だけ触れるように押す(ちょっとでも長めに押すと親スクリプトも中断される)と戻ることが確認できるかと。
これは確認できませんでした。うちはWindowsだからかな?
キーを押すのはリピート(押しっぱなしで2回目以降の連続打鍵として認識)するまでにある程度余裕があるので、間違えて2回押してる状態には簡単にはなりません。
[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 517.28 KiB (Peak: 521.82 KiB) ]