みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
リスト形式のレイアウトで、複数人が同時に扱うチェックリストを作成しています。
Get(持続ID)を使ってアクセス端末ごとに異なる変数を用意して、編集したレコードに抜けがあった場合に
そのユーザだけが編集したレコードから脱出できないようにする方法を模索中です。
(○×で×なら、○に変更するかコメントを入力しないと出られないようにしたいが、
○×変更するたびにイベントが起こる…というのはしんどいので、レコード移動、レイアウト切替をトリガにしたいが全員巻き込みたくない)
変数を動的に設定してやればできるんじゃないかと思って
https://community.filemaker.com/thread/79221
こちらで紹介されていた方法を意味わからんなりに試しているのですが、
色々試してみても最後の$Dummyの値が?になってしまい、完全に行き詰ってしまいました。
> 変数を設定 [$変数名; 値:"$$hoge"]
> 変数を設定 [$値; 値:350]
> 変数を設定 [$Dummy; 値:Evaluate ( "Let (" & $変数名 & " = " & Quote ( $値 ) & " ;" & "\"\"" & ")" )]
全体的には「Letで何かしたものを、Evaluateで式として扱った結果を$Dummyに入れましたよ」ということなんだろうかな、
それはそれとしても、Letの中で何をやってるのかが致命的にわからないな、、 ・・・という悲惨な状態です。
Let( " & $変数名 & " = " & Quote ( $値 ) & " ; " & "\"\"" & " )
これは「" & $変数名 & "」を変数名にして、値を「" & Quote ( $値 ) & "」に決めた?
(↑これも"&、&"で囲む意味がわからないのですが、消したら怒られる事だけわかった…)あと、
後の「" & "\"\"" & "」はいったい何をしてるものなのでしょうか?
お優しいどなたか、詳しく教えて頂けると嬉しいです…よろしくお願い致します。
Last edited by 肉塊 (2017-08-16 17:54:45)
Filemaker Advance 15 (win7) / Filemaker Go 15 (ipad mini/ipad mini2/ipad 2017)
Offline
要は、「変数名="$$ABC"」と「変数値="abc"」を引数に動的「変数を設定」する関数式だから、
「Let($$ABC="abc"; "")」テキスト関数を計算生成して、これをEvaluateで実行すれば良い訳で、
(冗長な3ステップでなくとも、1ステップでシンプル化して)
Let(
[
#変数名="$$ABC";
#値="abc";
#関数="Let(" & #変数名 & "=" & Quote(#値) & "; " & Quote("") & ")"
];
Evaluate(#関数)
)
結果を確認するのは、グローバル変数「$$ABC」を呼び出して、その値「abc」を表示してみると良いでしょう。
また、2つの引数は、計算式やフィールド、変数などに置換えて動的指定にして運用します。
Last edited by Hiro (2017-08-16 22:29:45)
Offline
Hiroさんありがとうございます!完璧に動きました!
やることの流れがシンプルでとても分かりやすくなって、とても助かりました。
変数を設定 [$dummy;値:
Let(
[
変数名= "$$" & Get(持続 ID) ; //変数名「$$持続ID」をつくる
値= Get(レコード ID) ; //値「レコードID」をつくる
関数= "Let(" & 変数名 & "=" & Quote(値) & "; " & Quote("") & ")" // 変数名=値にする
];
Evaluate( 関数 )
)]
フィールド設定 [レコードID照合; Evaluate(Let( 変数名= "$$" & Get(持続 ID) ; 変数名 )) ]
Letの中の&の働きは「 "変数名"="Quote(値)";"Quote("")" 」という文字列にするためのもの?で、
Letのケツの Quote("") は、ここに別のものが入ってると最終的な値が変わっちゃうから「これには特に値は持たせない」、的な役割だった?んですね。
これでようやく先に進めます!ありがとうございました!
Filemaker Advance 15 (win7) / Filemaker Go 15 (ipad mini/ipad mini2/ipad 2017)
Offline
フィールド設定 [レコードID照合;
Let(
[
変数名= "$$" & Get(持続 ID) ; //変数名をつくる
値= Get(レコード ID) ; //値をつくる
関数= "Let(" & 変数名 & "=" & Quote(値) & "; " & Quote("") & ")" // 変数名=値
];
Evaluate( 関数 )
)
&
Evaluate(Let( 変数名= "$$" & Get(持続 ID) ;変数名 ))
]
なんかまだ汚いような気がしますが、とりあえず一個にまとめられました。
Filemaker Advance 15 (win7) / Filemaker Go 15 (ipad mini/ipad mini2/ipad 2017)
Offline
> なんかまだ汚いような気がしますが、とりあえず一個にまとめられました。
それなら、いっそ、
↓
フィールド設定 [レコードID照合;
//==================
Let(
[
変数名= "$$" & Get(持続 ID) ; //変数名をつくる
値= Get(レコード ID) ; //値をつくる
関数= "Let(" & 変数名 & "=" & Quote(値) & "; " & Quote("") & ")" // 変数名=値
];
Evaluate( 関数 ) & 変数名
)
//===================
]
ただ、何でこんな回り諄い事するのか不明ですが?
Last edited by Hiro (2017-08-17 11:23:31)
Offline
わお・・・キレイ・・・
で、やっててわかったんですが、確かにこれをフィールドに入れる必要はまったくなかった…です。
とりあえず、
マルボタン→ マルにしたあと、$$持続IDの値消す
バツボタン→ バツにしたあと、コメントありなら$$持続IDの値消す、コメントなければ$$持続IDにレコード番号もたす
コメントフィールド→ 中身が入れば$$持続IDの値消す
これでバツつけたのにコメントがなければ$$持続IDがレコード番号持ってるので、
レイアウトスクリプトのOnRecordLoadとOnLayoutExitに
IF $$持続IDが値持ってれば、
$$持続IDが持ってるレコード番号に移動
コメント入力のスクリプトうごかす(コメントありなら$$持続IDの値消す)
全スクリプト終了、でEnd
を入れて、迂遠な感じはしますが思った感じの動作にはなりました…
もっと快適で、カンタンな方法があったりしそうでしょうか?
Last edited by 肉塊 (2017-08-17 12:17:22)
Filemaker Advance 15 (win7) / Filemaker Go 15 (ipad mini/ipad mini2/ipad 2017)
Offline
Pages: 1
[ Generated in 0.008 seconds, 12 queries executed - Memory usage: 530.93 KiB (Peak: 535.84 KiB) ]