みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっています。
FM13 Win7使用です。
レコード内容の修正が記録されるようにスクリプトを設定しています。
テーブル
RecordIDF(Get(UUID))
レコードロックF(テキスト)
変更履歴テーブル
RecordIDF(テキスト)
アカウント名F
タイムスタンプF
変更内容F
リレーション
テーブル::RecordIDF = 変更履歴テーブル::RecordIDF
レコードロック/修正スクリプト
IF[IsEmpty(テーブル::レコードロック)]
カスタムダイアログ
フィールド設定[テーブル::レコードロック=ロック]
変数を設定[$$修正フラグ;""]
Else IF[notIsEmpty(テーブル::レコードロック)]
カスタムダイアログ
変数を設定[$$RecID;テーブル::RecordID]
検索モードに切り替え
フィールド設定[テーブル::RecordID;$$RecID]
検索実行
フィールド設定[テーブル::レコードロック=""]
変数を設定[$$修正フラグ;"修正中"]
End IF
フィールドPre取得スクリプト
IF[テーブル::レコードロック=ロック]
フィールドへ移動
現在のスクリプト終了
End IF
IF[not IsEmpty($$修正フラグ)]
変数を設定[$$Pre;Get(アクティブフィールド内容)]
End IF
変更終了時スクリプト
IF[$$Pre=Get(アクティブフィールド内容)]
現在のスクリプト終了
Else
カスタムダイアログ
変数を設定[$$RecID;テーブル::RecordID]
変数を設定[$$TimeStamp;Get(タイムスタンプ)]
変数を設定[$$Post;【テーブル名::変更フィールド】$$Pre → Get(アクティブフィールド内容)]
レイアウト切り替え[変更履歴]
新規レコード
フィールド設定[変更履歴テーブル::RecordID;$$RecID]
フィールド設定[変更履歴テーブル::アカウント名;Get(アカウント名)]
フィールド設定[変更履歴テーブル::タイムスタンプ;$$TimeStamp]
フィールド設定[変更履歴テーブル::変更内容;$$Post]
レイアウト切り替え[元のレイアウト]
End IF
新規レコードを作製した時はスクリプトが作動しないようにflgを立ててありますので割愛しています。
①新規レコード作成
②レコードロック/修正スクリプト(レコードロックのほうだけが作動します)
③レコードロック/修正スクリプト(修正のほうが作動します)
④修正するフィールドに入る(OnObjectEnterでフィールドPre取得スクリプトが作動します)
⑤修正
⑥フィールドから移動する(OnObjectExitで変更終了時スクリプトが作動します。)
⑦レコードロック/修正スクリプト(レコードロックのほうだけが作動します)
というように変更内容を記録しています。
このときにフィールドが「編集ボックス」だと問題なく作動するのですが「チェックボックス(ラジオボタンは試していません)」だと作動しません。
チェックボックスでも作動させることは出来ますでしょうか?
宜しくお願いいたします。
スクリプトは分っていませんが、、
チェックボックスのトリガは
OnObjectModify
でいいのでは。
ただし、チェック1回ごとにトリガされますね
Offline
チポ様
ありがとうございます。
スクリプト長いですよね。。。
すいません。
単純に書くと
①レコードのロックを外す。
②フィールドに入ったときの値を取得する($$Pre)
③フィールドから出るときに現在のフィールド内容が$$Preと変化しているかを照合する
④変化していた場合、変更履歴テーブルに内容を保管する。
⑤レコードをロックする。
といったものです。これを3つのスクリプトで制御しています。
OnobjectModifyで試してみたのですがトリガされません。
宜しくお願いいたします。
チェックボックスをチェックすると
OnObjectModify
でトリガされますよ
> ②フィールドに入ったときの値を取得する($$Pre)
チェックボックスをチェックしても、
フィールドはアクティブになりませんから、
その値を得るにはそれなりの方法が必要でしょう。
Offline
フィールド個別にやろうとすると、今問題の件とかドラッグ&ドロップの対応とか面倒なので、変更専用のテーブル(レコード?)を使って、コミット時に記録した方が楽かもしれない。
チポ様
ありがとうございます。
もう一度試してみます。
フィールド設定みたいなイメージですかね?
チェックボックスの場合は別フィールドを作成してそこで評価するとかならできますか?
scripter様
テーブル(レコード)自体を複製するという解釈であっていますか?
ああ、間違えた。
チェックボックス、ラジオボタン
共にクリックでフィールドが選択されます。
ドロップダウンと間違えてしまいました -_-
Offline
チポ様
ありがとうございます。
フィールドが選択されるということはフィールドがアクティブになるということですか?
ということはOnObjectExitが使用できるということでしょうか?
その通りですね。
Offline
チポ様ありがとうございます。
聞き方が悪かったですね。
少し長くて見るのが面倒くさいかも知れませんが #1 のスクリプトはトリガされるはずということでいいのですか?
トリガされるはずです。
警告音とか、カスタムダイアログを表示で
スクリプトが実行されているか確認できますよね。
Offline
Pages: 1
[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 524.44 KiB (Peak: 544.98 KiB) ]