みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
途中にレイアウトが切り替わるステップが含まれるスクリプトをOnRecordLoadで設定したところループしてしまいます。
ブラウザモードのみでの設定なので、いったん検索モードにして元のレイアウトに戻る、というのも試したのですが、検索モードからブラウザモードに戻る時点でトリガが発動してしまうみたいです。
検索モード=特定のレコードでない、ところからブラウザモード=特定のレコードに入る、ということで発動してしまうという仕様なのでしょうか。
なにかループを回避できるアイデアありましたら知恵をお願いします。
Offline
検証ナシのアイデアだけですが、
トリガースクリプト始動後、グローバル変数にレコードIDとかの足跡履歴を残すようにしておき、
次回OnRecordLoad時に前回足跡と相違した場合のみ、スクリプト処理へ進み
足跡変数更新するようにする、とか。
Last edited by Hiro (2017-08-15 21:52:03)
Offline
If [$$スクリプト実行中]
現在のスクリプト終了 [テキスト結果: ]
End If
変数を設定 [$$スクリプト実行中; 値: 1]
#実際に実行するスクリプト
#スクリプト終了時
変数を設定 [$$スクリプト実行中; 値: 0]
グローバル変数はそのファイルの全スクリプトでユニークなものにしておいた方がいいです。
途中でスクリプトを終了させる分岐がある場合は、そこでも0に設定しておくようにしないと次回以降スクリプトがスルーされてしまうので気をつけてください。
Offline
実際には2回レイアウトの出入りがあったのですが、回答を参考に変数でいけました。ありがとうございます。
この掲示板新参でルールがよくわかっていないのですが
-そもそもの目的が、
-レコードの修正ログをとる。
-その際にOnRecord修正前の値を格納する。
-変数を使えない画像等のオブジェクトをどう格納するか。
-ということでした。
-今回は別レイアウトのグローバルフィールドにコピーペースとするという方法を使ったのですが他にいい方法はありますでしょうか。
このような場合別のトピックをたてた方がいいですか?
Last edited by yup (2017-08-16 11:24:49)
Offline
またまた、検証ナシですが、
Base64Encode関数でテキスト変換すれば変数が使える、かと。
Offline
-変数を使えない画像等のオブジェクトをどう格納するか。
オブジェクトも変数に設定出来ますよ。
Offline
OnRecordLoad をスクリプト実行中は、動作しないようにするには、
OnRecordLoad の 引数に Get(スクリプト名) を設定
OnRecordLoad で指定したスクリプトの先頭に以下を記述
If [not IsEmpty ( Get(スクリプト引数) )]
現在のスクリプト終了 []
End If
上記のようにすると、スクリプト実行中は、引数にスクリプト名が入るので OnRecordLoad の動作を制限できます。
Offline
オブジェクト変数にできました!
http://filemaker-jp.custhelp.com/app/an … -における変数の活用
こちらにはっきりと
>変数に画像やファイルを保存することはできません。画像やファイルを保存する必要がある場合は、(グローバル設定の)オブジェクトフィールドの使用を検討してください。
とありましたので試してもみませんでした。。。
Base64Encode関数を使う方法も、もしこの記述通りオブジェクトがそのまま変数に設定できないのだとしたら有効そうですね。
必要はなくなったのですが、引数に Get(スクリプト名) を設定する方法、参考になりました。スクリプトの過程でレコードを読み込んだときにはこの引数が空ではなくなり。。。という理屈ですね。
ありがとうございました、これをもって本当に解決とさせていただきます。
Offline
オブジェクトフィールドから変数に入れても、フィールド値がなくなると変数も参照不可能になります。(参照のみ、でない場合)
Offline
フィールド値がなくなると変数も参照不可能になります。(参照のみ、でない場合)
クリップボードのようなものではなく、リンクのようなものということですか。
いったんある画像を「変数を設定」して、その後その画像を削除、その後に他のフィールドに「フィールド設定」しても無事元の画像が入りました。
参照のみ、でない場合、とはどういう意味でしょうか。
Offline
>フィールド値がなくなると変数も参照不可能になります。(参照のみ、でない場合)
ホントだ! 消えますね。
検証:
変数を設定 [$obj; 値:A::obj]
消去 [選択; A::obj]
レコード/検索条件確定 [ダイアログなし]
フィールド設定 [A::obj2; $obj]
>クリップボードのようなものではなく、リンクのようなものということですか。
あ~そんな感じのようですね。
オブジェクトフィールドに実体を保存している場合は、それを消すと変数も参照不可。
オブジェクトフィールドに(ファイルの参照データのみ保存)としている場合は、フィールド値を消しても実際のデータは、参照出来るので変数も利用可能という事なんですね。
Offline
バグなのか仕様なのかわかりませんが、参照不可になるのは空になった場合で、直接他の画像をペーストした場合でもそのまま元の画像が変数に残っています。
オブジェクトフィールドに関してはスクリプトなどは使いませんので、フィールド選択して、delteキーで画像を消すか、他の画像をペーストするか、が考えられる操作方法です。
ペーストした場合は変数にそのまま画像が残るのでよしとします。
キーで画像を消した場合の処理として、もう一つオブジェクトフィールドを作り、OnObjectKeystrokeトリガでもともとのオブジェクトフィールドから新しいオブジェクトフィールドに画像をコピーし、その新しいオブジェクトフィールドの画像を変数に設定するという方法を考えました。
それか単純に外部参照にするかですね。
Offline
変数が導入される以前はグローバルフィールドを常用していました。
いくつか必要な場合では、1つの繰り返しグローバルフィールドで
配列変数的な使い方ができ、それはそれでむしろ便利です。
Last edited by Hiro (2017-08-18 11:58:27)
Offline
今回のケースでは、同一レイアウト内にグローバルフィールドを配置した場合はレコードがmodifyされてしまい、別レイアウト(別テーブル)にグローバルフィールドを配置した場合はトリガースクリプトがループしてしまう、というジレンマがありました。
理解が深まりました。ありがとうございます。
Offline
Pages: 1
[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 546.24 KiB (Peak: 567.15 KiB) ]