みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
https://www.youtube.com/watch?v=BPwbhyPhanQ&t=5s
この動画を参考に、いくつかのフィールドの編集履歴を残したいと思っていますが、分離型のためか、うまくいきません。
編集履歴フィールドの入力値の自動化の計算値は以下のようになっています。
Let (
[
// これらのフィールドの変更により再評価させるためのもの
%トリガ = [履歴を残したいフィールド名いろいろ]
] ;
// 記録する内容
Get ( ホストのタイムスタンプ ) & "|" &
Get ( アカウント名 ) & "|" &
Get ( アクティブフィールド名 ) & "|" &
$$Before & " → " &
Get ( アクティブフィールド内容 )&
Case ( not IsEmpty ( Self ) ; ¶ ) &
Self
)
質問1: 計算値の中に$$Beforeというグローバル変数が使われているのですが、この部分が結果に出てきません。
別ファイルのレイアウトで操作している場合は、計算値内のグローバル変数は効かないのでしょうか?
質問2: スクリプトによってフィールド内容が変更されたときはグローバル変数の設定が行われず、もちろんアクティブフィールドもありませんので、うまくいきません。
これはどのように対処すればよいでしょうか。すべて履歴に残せればそれに越したことはないのですが、もし複雑になりそうなら、とりあえず手入力の履歴だけとれるようになっていればOKです。
よろしくお願いします。
Offline
変数はそのファイル内のみで有効です。
ファイルをまたいで値を渡すのは、
スクリプト引数を使って可能です。
スクリプトでフィールド内容を変えるのなら、
そのスクリプトで履歴を作ればいいのでは。
Offline
$$Before は、対象フィールドでOnObjectEnter で設定しているようです。
>スクリプトによってフィールド内容が変更されたときは...
この方法の場合は、そうなりますね。
フィールドを設定の前に フィールドへ移動しておけば動作します。
【Claris FileMaker 2023】から、編集履歴が取れる、「OnWindowTransaction」スクリプトトリガが追加されました。
以下に詳しく書いてくれています。この機能では、レコード削除の場合も履歴が取得できます。
https://ywc.com/filemaker/?p=14638
Offline
$$Before は、対象フィールドでOnObjectEnter で設定しているようです。
すみません、そこは書いておくべきでした。動画を確認していただいたようで、補足ありがとうございます。
グローバル変数の設定というたった1行以外にはスクリプトを使わずにできるところがいいと思ってこの方法を試しています。
グローバル変数の代わりに、フィールドを一つ作ってしまって、そこに編集前の値を入れるようにしてみます。
「OnWindowTransaction」はもし今後アップデートすることがあれば試したいと思います。
ありがとうございました。
Offline
グローバル変数の代わりに、フィールドを一つ作ってしまって、そこに編集前の値を入れるようにしてみます。
これだとフィールドに入るだけで再計算が行われてしまいました…むずかしい…
Offline
読み返してみましたが、
スクリプトはファイルをまたいではいませんよね。
一つのレイアウトのみで完結していますよね。
とすれば、
> $$Beforeというグローバル変数が使われているのですが、この部分が結果に出てきません
ここの一点を詰めて解決しないとだめでしょう。
チェックすべきは、、
スクリプトステップ
スクリプトトリガ
だけでしょうね。
Offline
>これだとフィールドに入るだけで再計算が行われてしまいました
計算式でそのグローバルフィールドを参照しているからでしょう。
Evaluate(”フィールド名")
にすれば、そこは解決すると思いますが
再計算されてるってことはフィールド設定ならトリガスクリプトが動いているわけだから、変数に入らないのは変ですよね。変数名を打ち間違えてるとか^^;;
データビューアで確認してますか?
みなさん返信がおそくなりもうしわけありません。
レイアウト用のファイルではうまくいかなかったことを元テーブルのファイルで試してみたところ、うまく動作することが確認できました。
ということは、やはりデータベース管理のフィールドの入力値の自動化の計算値の中(「の」が多くてすみません)にグルーバル変数が使われている場合に、他のファイルで再計算のきっかけとなるアクションが起きたとしても計算値内のグローバル変数(今回の場合は$$Before)はないものとして扱われてしまうということかなと思います。
グローバル変数はファイル内だけで有効ということを考えれば不思議なことではないですね。
フィールドの入力値自動化でフィールド内容を設定するのではなく、同内容のフィールド設定をするスクリプトにして、履歴を取りたいフィールドのexitにも新たにスクリプトトリガを仕掛けるという、普通のやり方にしたらうまくいきました。
ありがとうございました。
Last edited by fpck (2023-06-07 15:11:54)
Offline
読み返してみましたが、
スクリプトはファイルをまたいではいませんよね。
一つのレイアウトのみで完結していますよね。
スクリプトはファイルをまたいでいませんが、フィールドの計算値はまたいでいた、ということです。
Offline
再計算されてるってことはフィールド設定ならトリガスクリプトが動いているわけだから、変数に入らないのは変ですよね。変数名を打ち間違えてるとか^^;;
データビューアで確認してますか?
すみません、「結果に出てきません」というのは、変数には出ているけど、編集履歴フィールドの中身という結果には出てこないという意味でした。
データビューアで変数が正しく設定されていることは確認できていました。
Offline
Pages: 1
[ Generated in 0.006 seconds, 10 queries executed - Memory usage: 571.15 KiB (Peak: 588.05 KiB) ]