初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2023-06-02 15:19:58

fpck
Member

フィールドの編集履歴を残したい

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

#2 2023-06-02 17:03:33

チポ
Member

Re: フィールドの編集履歴を残したい

変数はそのファイル内のみで有効です。

ファイルをまたいで値を渡すのは、
スクリプト引数を使って可能です。

スクリプトでフィールド内容を変えるのなら、
そのスクリプトで履歴を作ればいいのでは。

Offline

#3 2023-06-02 17:13:31

qb_dp
Member

Re: フィールドの編集履歴を残したい

$$Before は、対象フィールドでOnObjectEnter で設定しているようです。


>スクリプトによってフィールド内容が変更されたときは...

この方法の場合は、そうなりますね。
フィールドを設定の前に フィールドへ移動しておけば動作します。


【Claris FileMaker 2023】から、編集履歴が取れる、「OnWindowTransaction」スクリプトトリガが追加されました。
以下に詳しく書いてくれています。この機能では、レコード削除の場合も履歴が取得できます。
https://ywc.com/filemaker/?p=14638

Offline

#4 2023-06-02 18:44:14

fpck
Member

Re: フィールドの編集履歴を残したい

qb_dp wrote:

$$Before は、対象フィールドでOnObjectEnter で設定しているようです。

すみません、そこは書いておくべきでした。動画を確認していただいたようで、補足ありがとうございます。

グローバル変数の設定というたった1行以外にはスクリプトを使わずにできるところがいいと思ってこの方法を試しています。

グローバル変数の代わりに、フィールドを一つ作ってしまって、そこに編集前の値を入れるようにしてみます。

「OnWindowTransaction」はもし今後アップデートすることがあれば試したいと思います。
ありがとうございました。

Offline

#5 2023-06-02 19:01:18

fpck
Member

Re: フィールドの編集履歴を残したい

fpck wrote:

グローバル変数の代わりに、フィールドを一つ作ってしまって、そこに編集前の値を入れるようにしてみます。

これだとフィールドに入るだけで再計算が行われてしまいました…むずかしい…

Offline

#6 2023-06-05 09:42:16

チポ
Member

Re: フィールドの編集履歴を残したい

読み返してみましたが、
スクリプトはファイルをまたいではいませんよね。
一つのレイアウトのみで完結していますよね。

とすれば、
> $$Beforeというグローバル変数が使われているのですが、この部分が結果に出てきません
ここの一点を詰めて解決しないとだめでしょう。

チェックすべきは、、
スクリプトステップ
スクリプトトリガ
だけでしょうね。

Offline

#7 2023-06-05 10:35:45

himadanee
Guest

Re: フィールドの編集履歴を残したい

>これだとフィールドに入るだけで再計算が行われてしまいました
計算式でそのグローバルフィールドを参照しているからでしょう。
Evaluate(”フィールド名")
にすれば、そこは解決すると思いますが

再計算されてるってことはフィールド設定ならトリガスクリプトが動いているわけだから、変数に入らないのは変ですよね。変数名を打ち間違えてるとか^^;;
データビューアで確認してますか?

#8 2023-06-07 14:56:40

fpck
Member

Re: フィールドの編集履歴を残したい

みなさん返信がおそくなりもうしわけありません。
レイアウト用のファイルではうまくいかなかったことを元テーブルのファイルで試してみたところ、うまく動作することが確認できました。
ということは、やはりデータベース管理のフィールドの入力値の自動化の計算値の中(「の」が多くてすみません)にグルーバル変数が使われている場合に、他のファイルで再計算のきっかけとなるアクションが起きたとしても計算値内のグローバル変数(今回の場合は$$Before)はないものとして扱われてしまうということかなと思います。
グローバル変数はファイル内だけで有効ということを考えれば不思議なことではないですね。

フィールドの入力値自動化でフィールド内容を設定するのではなく、同内容のフィールド設定をするスクリプトにして、履歴を取りたいフィールドのexitにも新たにスクリプトトリガを仕掛けるという、普通のやり方にしたらうまくいきました。

ありがとうございました。

Last edited by fpck (2023-06-07 15:11:54)

Offline

#9 2023-06-07 15:01:09

fpck
Member

Re: フィールドの編集履歴を残したい

チポ wrote:

読み返してみましたが、
スクリプトはファイルをまたいではいませんよね。
一つのレイアウトのみで完結していますよね。

スクリプトはファイルをまたいでいませんが、フィールドの計算値はまたいでいた、ということです。

Offline

#10 2023-06-07 15:03:43

fpck
Member

Re: フィールドの編集履歴を残したい

himadanee wrote:

再計算されてるってことはフィールド設定ならトリガスクリプトが動いているわけだから、変数に入らないのは変ですよね。変数名を打ち間違えてるとか^^;;
データビューアで確認してますか?

すみません、「結果に出てきません」というのは、変数には出ているけど、編集履歴フィールドの中身という結果には出てこないという意味でした。
データビューアで変数が正しく設定されていることは確認できていました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 571.78 KiB (Peak: 588.69 KiB) ]