【FileMaker】既存のウィンドウは一つだけ表示したい

よく「次へ」とか「明細表示」とか同じレイアウトを新規ウィンドウで表示したいけれど、同じレイアウトのウィンドウが表示されるのはイヤ、一つのウィンドウにして、というコントロールのやり方です。

動き

例えば、こんなワラワラと複数のウィンドウが表示されている時。
よくある複数表示のウィンドウ

そして、もう一個ついでにドン。
おお、似たような名前でウィンドウができている
「表示」ボタンで、新しい画面を開いています。

微妙にウィンドウの名前が違うのに気づきましたか?
あ、名前がちょっとずつ違うね

このままだと、「表示」ボタンを押すごとに新しいウィンドウが開いてしまいます。

これをなんとか、、、同じウィンドウ名を開こうとしていたら、既存のウィンドウを前面に出してね、というスクリプトでコントロールします。
では、「表示」ボタンのスクリプトを改修していきます。

スクリプト

エラー処理 [ オン ]
変数を設定 [ $windowname ; 値: GetValue ( Get(スクリプト引数) ; 1 ) ] 
変数を設定 [ $windowlayout ; 値: GetValue ( Get(スクリプト引数) ; 2 ) ] 
変数を設定 [ $retWindow ; 値: Substitute ( Trim ( FilterValues ( WindowNames ( Get(ファイル名 )) ; $windowname ) ) ; "¶" ; "" ) ] 
If [ $windowname = $retWindow ] 
    ウインドウを選択 [ 名前: $windowname ; 現在のファイル ] 
Else
    新規ウインドウ [ スタイル: ドキュメント ; 名前: $windowname ; 使用するレイアウト: $windowlayout ] 
End If

スクリプトのポイントが2つあります。

ポイント1

ウィンドウ名を取得する時に、ちょっとした小細工をします。

このスクリプトにある、「同じウィンドウ名」が存在するかどうか、というのは、”WindowNames”という関数で現在開いているウィンドウの名前リストから、指定したウィンドウ名を探し出し、”FilterValues”でそのウィンドウ名だけを取得する、ということになります。
プラス、リストから取得した時に不要な空白を削除したり、改行マークがあったらそれを省くなどの小細工を追加して、正しくウィンドウ名を取得できるようにしておきます。

変数を設定 [ $retWindow ; 値: Substitute ( Trim ( FilterValues ( WindowNames ( Get(ファイル名 )) ; $windowname ) ) ; "¶" ; "" ) ] 

ポイント2

それから、「同じウィンドウ名」が抽出して、存在したらどうする、存在しなかったらどうする、という分岐をします。

If [ $windowname = $retWindow ] 
    ウインドウを選択 [ 名前: $windowname ; 現在のファイル ] 
Else
    新規ウインドウ [ スタイル: ドキュメント ; 名前: $windowname ; 使用するレイアウト: $windowlayout ] 
End If

ボタン指定

表示ボタンは、下の図のように作ったスクリプトと引数を指定します。
「表示」ボタン

引数2つ目は、新規ウィンドウで表示するレイアウト名になります。
既存ウィンドウが存在するときは使いません。

まとめ

開きたいウィンドウがあるときは、メニューの「ウィンドウ」で選択すればいいじゃないか、という気もしますが、一般的なシステムを使う人には触られたくないメニューもありますよね。
できれば勝手に触ってほしくないとか、ね。
業務システムは、FileMakerを知らない人も使いますので、できる限りメニューを使わないコントロールを実装していき、FileMakerを使っていることを意識せずに業務に集中してもらえるとうれしいですね。

他にもやり方はあると思いますが、既存ウィンドウを手前に出す一つのやり方として、みなさまの参考になれば幸いです。

では、楽しいFileMaker Lifeを!

追記

もっと簡単に実装したい!
開いているウィンドウが多いので、できればサクッと切り替えたい!
という方、こちらの実装方法を参考にしてください〜。