みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
どうもFMP12AdのMac版です。
ある住所録テーブルがありまして、Aウインドウには住所録に登録されているレコードをリスト表示のレイアウトで表示しています。(名前やID番号など)
そこに小窓ととてBウインドウを表示してAウインドウでアクティブなレコードの詳細(詳しい住所、電話番号など)をフォーム形式で表示させてます。
Aウインドウでアクティブレコードを切り替えた場合、Bウインドウの表示も連動して切り替えたいのですが出来ますでしょうか?
Offline
Bは別テーブル、同一テーブルの別レイアウトどちらなのですか。
いずれにしてもAテーブルにトリガを設定して関連レコード移動かな。
変数を設定[$id;ID]
エラー処理[オン]
ウィンドウを選択["B"]
If[Get(最終エラー)]
//ウィンドウがない場合新規ウィンドウ["B"]等の処理
EndIf
検索実行[ID;$ID]
AのレイアウトのOnRecordLoadトリガで実行。
>>#2
同一テーブルの別テーブルです
>>#3
ありがとうございます。
検索実行で分からないんですが、$idではなく$IDですか?
検索方法の詳しい設定を教えていただけますか?
因みに以下が僕が書いたスクリプトです。
ウインドウを選択["B"]
If[Get(最終エラー)]
スクリプト実行[Bウインドウを新規で開く]
End If
関連テーブルへ移動[テーブル:住所録2※自己リレーション;現在のレイアウト]
ウインドウを選択["A"]
これをAレイアウトのトリガに設定してAウインドウで任意のレコードを切り替えてもBウインドウの表示は変わりませんでした。
Offline
間違えました
>>#2
同一テーブルの別レイアウトです。
Offline
超手抜きサンプル。閉じてから開くのでイライラ。
http://pupld.net/21/131224/3cp5hlegz7/index.cgi
Window.fmp12
>>#6
まさしく最初に作ったスクリプトです。。。画面がちらつくので出来るだけこの動作はさけたいのですが。。。
どうしたものか。。。
Offline
小窓のウインドウはいつ、どのようにして開いているのですか。
Bが他のファイルなら、関連レコードへ移動で既存のウィンドウを変更できますけど、そうじゃないと思って使わなかった。
検索実行は、条件の指定がわからなければ
検索モードに切り替え[]
フィールド設定[ID;$id]
検索実行[]
でもよい。
変数名はフィールド同様大文字小文字の区別ありません。(実際はただのtypoだけど)
ウインドウが開いているかの判定は
IsEmpty ( FilterValues ( WindowNames ( Get ( ファイル名 ) ) ; ウインドウ名 ) )
でできます。
で、
If[Get(最終エラー)]
スクリプト実行[Bウインドウを新規で開く]
End If
Ifステップの真偽の結果で選択されているウインドウが異なりますヨ
しかし、
関連レコードへ移動
では、
現在のウインドウか新規ウインドウしか選択できませんので、
既にBウインドウが開いていた場合まずいですよね。
結果、こんな方法で、、
グローバルフィールドを作り、IDとリレーション
スクリプトの考え方
フィールド設定[グローバルフィールド;ID]
If[IsEmpty ( FilterValues ( WindowNames ( Get ( ファイル名 ) ) ; ウインドウ名 ) )]
新規ウインドウ
End If
ウインドウを選択
レイアウト切替
表示方法の切り替え
関連レコードへ移動
これでいいかと。。
Offline
If[Get(最終エラー)]
スクリプト実行[Bウインドウを新規で開く]
End IfIfステップの真偽の結果で選択されているウインドウが異なりますヨ
それはスクリプトの内容によるわけですが、FM12では「新規ウィンドウ」だけでその新しいウィンドウが選択されてます。
前にそうじゃないこともあったような気がしたけどFM10や11のヘルプでも特に書いてないし...
前から新しいウィンドウが手前に出てきますから、元々そうだった気もする。
非表示のウィンドウを非表示のまま選択、ってのはできないし。何だったかな。
ああ、
> ウインドウを選択["B"]
このステップの後でしたね、
私の判定方法の場合でした ;;
必ずBウインドウが選択されているのですから、
そのウインドウで
関連レコードへ移動
ではまずいですよね。
> FM12では「新規ウィンドウ」だけでその新しいウィンドウが選択されてます
これは以前のバージョンから同じでしょう。
Offline
グローバルフィールドを「B」に作り、「B::ID」とリレーション
で、関連レコードへ移動でやることもできます。そういう意味かと思った。
レイアウト切替
表示方法の切り替え
もIfの中にした方がいいかな。
まあ、検索でもいいのでは。
グローバルフィールドを「B」に作り、「B::ID」とリレーション
私の提案はこの通りです。
#4の
関連レコードへ移動
ではまずいでしょう。
と言ったつもりでした。
レイアウト切替
表示方法の切り替え
もIfの中にした方がいいかな
私の方法に対してなら、、
Bウインドウが既に開いていた場合、そのウインドウにも
こうするのが間違いないでしょう。
Offline
小窓のウインドウはいつ、どのようにして開いているのですか。
最初にAウィンドウを開いたと、任意のレコードを選択(クリックでアクティブに)してからレイアウト内に設置したボタンでBウィンドウを呼び出します。
Offline
Bが他のファイルなら、関連レコードへ移動で既存のウィンドウを変更できますけど、そうじゃないと思って使わなかった。
検索実行は、条件の指定がわからなければ
検索モードに切り替え[]
フィールド設定[ID;$id]
検索実行[]
でもよい。変数名はフィールド同様大文字小文字の区別ありません。(実際はただのtypoだけど)
なるほど。大文字と小文字の区別ないんですね。ありがとうございます。
Offline
Layouterさん、チポさんありがとうございます。
お二人の意見を総合するとこんな感じでしょうか?
下準備
Bレイアウトにグローバルフィールドを作成してIDフィールドと自己リレーションしておく。(AレイアウトにはIDフィールド設置)
スクリプト
フィールド設定[グローバルフィールド;ID]
If[IsEmpty ( FilterValues ( WindowNames ( Get ( ファイル名 ) ) ; ウインドウ名 ) )]
新規ウインドウ[Bレイアウト]
End If
ウインドウを選択[Bレイアウト]
レイアウト切替
表示方法の切り替え
関連レコードへ移動
Offline
If[IsEmpty ( FilterValues ( WindowNames ( Get ( ファイル名 ) ) ; ウインドウ名 ) )]
ウインドウ名は、実際のウインドウ名を正確にテキストで入力します。
新規ウインドウ[Bレイアウト]
Bウインドウでは?
後はそれでいいでしょう、
お試しください。
Offline
返信が遅くなりました。すいません。
無事できました。ありがとうございます。
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 559.06 KiB (Peak: 579.97 KiB) ]