みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっています。
チェックボックスのスクリプトトリガについて質問です
チェックボックスに「 a b c 」の選択肢があるとします。
・「a」を選択した場合、スクリプトトリガは「Enter」→「Modify」→「Save」という解釈であっていますでしょうか?
・チェック後にフィールド外のどこかをクリックしないと「Exit」はトリガされないのでしょうか?
・「a」を選択後、フィールド外をクリックせずに「b」を選択した場合は「Modify」→「Save」となるのでしょうか?
よろしくおねがいします。
> 「a」を選択した場合、スクリプトトリガは「Enter」→「Modify」→「Save」という解釈
矢印の意味が理解できませんが、、
そのフィールドが選択されていない状態で、
チェックを入れると Enter、Modify が働きます。
そのトリガで、そのフィールドを抜けるようなことをしなければ、
そのフィールドは選択されていますから、
さらにチェックを入れれば Modify、Save が働きます。
> チェック後にフィールド外のどこかをクリックしないと「Exit」はトリガされないのでしょうか
クリックと限らず、何らかの方法でフィールドを抜けるときに Exit が働きます。
Offline
チポ様
ありがとうございます。
矢印は動く順番?のつもりでした。
Enterにスクリプト1 Modifyにスクリプト2 を設定した場合
スクリプト1が最初に働いて次にスクリプト2が働くというイメージで書いてしまいました。
わかりづらくて申し訳ありません。
選択されたままの状態になっているのに初めて気がつきました。
ありがとうございます。
チェックボックスに「 a b c 」の値一覧を設定
OnObjectEnter
変数を設定[$$Pre:Get(アクティブフィールド内容)]
カスタムダイアログ[$$Pre]
OnObjectExit
変数を設定[$$Post:Get(アクティブフィールド内容)]
カスタムダイアログ[$$Post]
をそれぞれ設定しました。
フィールドが空欄の状態で「a」をチェックするとカスタムダイアログには「a」がでました。
「a」が表示されているカスタムダイアログの「OK」を押すと続けてダイアログが出たのですが内容は「空欄」でした。
僕は
最初(OnobjectEnter)のダイアログ「空欄」
次(OnobjectExit)のダイアログ「a」
のように思っていたのですが考え方が間違っていますでしょうか?
その場合、どのようにすれば僕の思っているようなことができますでしょうか?
宜しくお願いします。
> フィールドが空欄の状態で「a」をチェックするとカスタムダイアログには「a」がでました
正常でしょう。
> 「a」が表示されているカスタムダイアログの「OK」を押すと続けてダイアログが出たのですが
この時点でフィールドから抜けることは有りませんから、
Exitが働いたとは思えません、何かの間違いでは。
> 最初(OnobjectEnter)のダイアログ「空欄」
このようにするには、スクリプトを
元に戻す[元に戻す]
変数を設定[$$Pre:Get(アクティブフィールド内容)]
元に戻す[再実行]
このようなステップを踏む必要が有るのでは。
スクリプトトリガはそれによって、
スクリプトの実行がイベントの処理前か後ろかが有ります。
Enterは処理後ですからチェックボックスをチェック後にスクリプトが起動しますね。
ヘルプ参照してください
http://www.filemaker.com/help/14/fmp/ja … tml#801100
Offline
チポ様
ありがとうございます。
> 「a」が表示されているカスタムダイアログの「OK」を押すと続けてダイアログが出たのですが
この時点でフィールドから抜けることは有りませんから、
Exitが働いたとは思えません、何かの間違いでは。
トリガがSaveになっていました。申し訳ありません。
> 最初(OnobjectEnter)のダイアログ「空欄」
このようにするには、スクリプトを
元に戻す[元に戻す]
変数を設定[$$Pre:Get(アクティブフィールド内容)]
元に戻す[再実行]
このようなステップを踏む必要が有るのでは。
これは1つ前の僕の記事の場合(フィールドに何も入力されていない状況での動作)のことです。
常時というつもりで書いたわけではありません。
スクリプトトリガはそれによって、
スクリプトの実行がイベントの処理前か後ろかが有ります。Enterは処理後ですからチェックボックスをチェック後にスクリプトが起動しますね。
ヘルプ参照してください
http://www.filemaker.com/help/14/fmp/ja … tml#801100
ヘルプを参照しました。
チェックするときの動作の流れは
フィールドに入る
チェックする
OnobjectEnter(処理後)
値が保存される
OnobjectExit(処理前)
フィールドから出る
という流れであってますでしょうか?
> フィールドに入る
> チェックする
> OnobjectEnter(処理後)
チェックボックスの場合、
フィールドに入ってからチェックを入れる
もちろんこれも可能ですが、
チェックを入れてフィールドに入る
ことも可能ですね。
Enterで得られるそのフィールドの値は両者で異なりますね。
ここは私も今回初めて気がつきました。
Enterでチェックボックスフィールドの値を得るには注意が必要ですね。
> OnobjectExit(処理前)
> フィールドから出る
でいいと思います。
Offline
チポ様
ありがとうございます
> フィールドに入る
> チェックする
> OnobjectEnter(処理後)
チェックボックスの場合、
フィールドに入ってからチェックを入れる
もちろんこれも可能ですが、
チェックを入れてフィールドに入る
ことも可能ですね。Enterで得られるそのフィールドの値は両者で異なりますね。
ここは私も今回初めて気がつきました。
Enterでチェックボックスフィールドの値を得るには注意が必要ですね。
OnObjectEnter
変数を設定[$$Pre:Get(アクティブフィールド内容)]
カスタムダイアログ[$$Pre]
OnObjectExit
変数を設定[$$Post:Get(アクティブフィールド内容)]
カスタムダイアログ[$$Post]
このスクリプトを設定した場合は同じ値がカスタムダイアログに出てしまいました。
これは「チェックしてからフィールドに入る」ということですよね?
できるならばEnterはチェックする前に作動させたいのですが「フィールドに入ってからチェック」はどのように設定すればいいのでしょうか?
宜しくお願い致します。
そういうイベントはないですよね。
普通のマウス操作ではチェックした結果としてフィールドに入るんで、ドロップダウンでも同様では。Enterトリガで値一覧を変えようとしてもだめだった記憶が。。。
タブ順前のフィールドからタブキーとか、
そのフィールドの余白をクリック、
とかでチェックボックスをクリックしないでもフィールドを選択できます。
前のフィールドのトリガ Exit で チェックボックスのEnter の代わりをさせてもいいのでは。
Offline
Layouter様 チポ様
ありがとうございます。
やはり単体では無理そうですね・・・
フィールド内容の変更のフラグを立てようと思ったのですが違う方法に変更します。
いろいろとありがとうございました。
変更のフラグならonObjectModifyでは?
ドラッグ&ドロップで変更されるとトリガでは対応できないと思う。
Layouter様
変更された際に変更前の値を格納しておきたいのです。
OnObjectEnter
変数を設定($$Pre:Get(アクティブフィールド内容))
OnObjectExit
If($$Pre≠Get(アクティブフィールド内容))
この2つのスクリプトを設定してあります。
もし If($$Pre≠Get(アクティブフィールド内容)) なら別テーブル(修正履歴テーブル)に
「レコードID」「アカウント」「タイムスタンプ」「変更元テーブル」「変更元フィールド」「変更内容」を収めるようにしています。
変更があった場合のみならばLayouter様の言うとおりでOnObjectModifyをかければいいのですが、変更前の値も残しておきたいのです。
チェックボックスの場合は$$Preの値が取得できないと思いますので難しいかなという結論に至りました。
チェックフィールドの大きさをぎりぎりまで小さくすると、
余白のクリックができなくなります。
また、タブ順から外せばtab送りでフィールドの選択ができなくなります。
こうすれば、チェックボックスのクリック以外にそのフィールドに入れなくなりますから、
トリガ Enterで レス#5の方法で入る前の値を得られますね。
フィールドにこだわらなくても、
OnRecorLoad
OnRecordCommit
でもいいのでは。
しかしいずれの場合でも、
Layouterさんが書かれたように、
ドラッグ&ドロップされるとだめですね。。
Offline
チポ様
ありがとうございます。
チェックフィールドの大きさをぎりぎりまで小さくすると、
余白のクリックができなくなります。また、タブ順から外せばtab送りでフィールドの選択ができなくなります。
こうすれば、チェックボックスのクリック以外にそのフィールドに入れなくなりますから、
トリガ Enterで レス#5の方法で入る前の値を得られますね。
レイアウトのほうでも対策(まではいかなくても)を考えて見ます。
チェックボックスの□の部分以外に透明な図形をかぶせるのもありですかね?
チェックする前とチェックする後の値を変数で収めておくためのスクリプトは
OnobjectEnter
変数を設定[$Post:Get(アクティブフィールド内容)]
元に戻す[元に戻す]
変数を設定[$$Pre:Get(アクティブフィールド内容)]
元に戻す[再実行]
フィールドに移動[]
OnobjectExit
If($$Pre≠Get(アクティブフィールド内容))
こんな感じで大丈夫でしょうか?
フィールドにこだわらなくても、
OnRecorLoad
OnRecordCommit
でもいいのでは。
OnRecordLoadやOnRecordCommitの場合、フィールドにあるすべてのチェックボックスを変数として格納しておかないとだめですか?
チェックボックスのフィールドが多数配置されているレイアウトもあるのですが・・・
しかしいずれの場合でも、
Layouterさんが書かれたように、
ドラッグ&ドロップされるとだめですね。。
ドラッグ&ドロップは普段使用していないと思うので大丈夫だとは思っていますが、ダメならまた対策を考えます。
> チェックボックスの□の部分以外に透明な図形をかぶせるのもありですかね
だめでしょう、透明でなくても下のフィールドクリックできちゃいます。
チェックボックスのチェックでEnterが働くとします
> OnobjectEnter
> 変数を設定[$Post:Get(アクティブフィールド内容)]
これは不要では
> 元に戻す[元に戻す]
> 変数を設定[$$Pre:Get(アクティブフィールド内容)]
> 元に戻す[再実行]
これはいいでしょう
> フィールドに移動[]
これだとチェックボックスクリック1回でフィールドを抜けますが、
それでいいのでしょうか?
複数チェックしたい場合困っちゃうのでは。
> OnobjectExit
If($$Pre≠Get(アクティブフィールド内容))
これで変更が有ったか分かりますね。
> OnRecordLoadやOnRecordCommitの場合、フィールドにあるすべてのチェックボックスを変数として格納
そうなりますね。
全てのフィールドを調べるのならその分変数に格納しておかないとだめでしょう。
もっと簡単に考えて、
OnRecordCommit
が働いたら何らかの変更が有ったと見てはだめでしょうか。
変更したけど元に戻した
でも働いちゃいますが ;;;
Offline
チポ様
ありがとうございます。
レコード内容を直す機会はあまりないと思いますので、複数チェックの場合は都度変更してもらうことにします。
過去の業務の記録、要は電子カルテみたいなものを保存しているため変更がある場合はちゃんと記録をとっておきたいと考えています。
今やってみました。
フィールド内容が空欄でなく、その後変更があった場合は上手くいきました。
フィールド内容が空欄でその後変更があった場合、フィールドの変更が上手く認識されませんでした。
スクリプト
OnobjectEnter
元に戻す[元に戻す]
変数を設定[$$Pre:Get(アクティブフィールド内容)]
元に戻す[再実行]
カスタムダイアログ[$$Pre]
フィールドに移動[]
OnobjectExit
If($$Pre≠Get(アクティブフィールド内容))
カスタムダイアログ[$Post]
End IF
カスタムダイアログにて確認してます。
連投すみません。
#18の件ですが、グローバル変数がローカル変数になっていました。
チポ様のやりかたで無事にできました。
ありがとうございます。
Pages: 1
[ Generated in 0.022 seconds, 9 queries executed - Memory usage: 571.63 KiB (Peak: 592.54 KiB) ]