FileMakerでメディア管理 2-3 小ネタ:快適操作

ファイルメーカーでメディア管理システムを作る話。とことん楽をしたい。それだけのために苦労して仕組みを作ります。オマケ的に、快適操作の一例を挙げてみたいと思います。

Digital Boo Pennguin Icon

小ネタ:快適操作

レイアウトでよく使うボタンとかポップアップメニューについてです。

ボタンはボタンを配置してスクリプトを割り当てるだけなので簡単だし便利だし、放っておくとレイアウト中がボタンだらけになります。フィールドさえボタンになったりします。あまりにもボタンだらけなので「もうちょっと何とかならんのか。例えばプルダウンメニューみたいにまとめてポップアップできるとか・・・それやっ」というわけで近年はボタンに割り当てる代わりにポップアップメニューを作っています。

ポップアップメニュー

フィールドの表示スタイルにポップアップメニューあります。普通はフィールドへの入力に使いますね。でもそれとは違って、ボタンの代わりにポップアップを使うのですがそれってどういうこと?こういうことです。

あるフィールドに値一覧を割り当ててポップアップメニュー表示にして選択したら某かの処理が行われます。ボタンでの処理をメニュー方式にしただけのことです。これが省スペース的にも使い勝手的にも大変よろしいんです。

作り方

作り方は、メニューを表示するフィールドにスクリプトトリガOnObjectModifyをセットします。

材料

  • メニューを表示するフィールド
  • 表示する値一覧
  • トリガに仕込むスクリプト
  • 実際に動かすスクリプト(必要なら)

メニューを表示させるフィールドはグローバル格納です。データベースの大事なデータを入れるフィールドではなくて、ただのメニュー表示用、スクリプトを動かすためだけのフィールド、単なる入れ物です。

このグローバル格納フィールドをレイアウトに配置してコントロールスタイル「ポップアップメニュー」に指定。そして値一覧を表示します。値一覧には目的の言葉をあらかじめ仕込んでおくわけですが、目的の言葉とは・・・後ほど具体例で。

グローバルなメニュー表示用フィールドに割り当てるスクリプトを書き、フィールドスクリプトトリガーOnObjectModifyに仕込みます。これはフィールドの内容が変更されれば実行されるトリガーです。値一覧で選ばれた項目名を実行させます。

そして必要に応じてですが、実際に動かすスクリプトです。トリガーに設置するスクリプトだけで事足りる場合もありますから必要ならということで。

以上を用意して快適メニューを作ります。

スクリプトトリガOnObjectModifyにセットするスクリプトにはパターンがあります。理屈は同じですがちょっと異なります。ポップアップメニューの目的にもよります。

  • スクリプトを実行させるスクリプト
  • 特定の処理(検索・絞り込み)を行うためのスクリプト

こういうことです。値一覧で選んだ「項目」をトリガーで実行するわけで、その項目が何なのかということに直結します。

スクリプトを実行させるメニュー

すでに作成済みの何かと便利な使えるスクリプト、そのスクリプト名と同じ名前を値一覧に仕込みます。

フィールドトリガーのスクリプトもかんたんです。「スクリプトを実行 [名前で] 」これを書きます。これだけで基本OK(あといろいろ丁寧に作り込むこともありますけど基本はこれだけ)

例えば「タイトルでソート」というソートさせるスクリプトを作りますね。値一覧に「タイトルでソート」という項目を追加しますね。メニューフィールドのトリガーに「スクリプトを実行[名前で]」を仕込みますね。ブラウズモードでメニューから「タイトルでソート」を選びますね。するとタイトルでソートスクリプトが実行されますね。

フィールドで選ぶ -> 選ばれたのと同じ名前のスクリプトが実行される という流れです。実に簡単な話ですよね。

特定の汎用的な処理をさせるメニュー

基本、上記だけですべて事足りますが、少し違うパターンもあります。スクリプト名による実行ではなく、値一覧の項目名を使って特定処理をさせるパターンです。

例えばメニューで選択された項目名に応じて特定フィールドを検索・絞り込みするということもその一つ。

値一覧に、検索・絞り込みさせたい言葉を追加しておきます。メニューのトリガーには「その言葉(フィールド内容)で検索」するスクリプトを仕込みます。

例えば「ファイル種類」フィールドに対して「画像」「動画」「音楽」などを検索してざっくり絞り込むことは頻繁にあると思います。値一覧に「画像/動画/音楽」と仕込んでおくとしましょう。いえ、もっと楽するために、値一覧にファイル種類フィールドそのものを指定します。すでに入力された内容が値一覧として得られます。

フィールドスクリプトトリガーOnObjectModifyではスクリプトを以下のように仕込みます。

1 検索モードに切り替え
2 フィールド設定 [フィールド ファイル種類 内容 メニューフィールド内容]
3 検索実行

ポップアップメニューで選んだテキストが指定フィールドを対象に検索されるというだけです。もうちょっと汎用性を高めましょうか。

スクリプト引数を指定する手間を惜しまなければこのスクリプトは汎用的な検索スクリプトとなります。この場合なら、スクリプトトリガーに目的のフィールド名「ファイル種類」をスクリプト引数として付与してあげます。

1 変数 $w 仕込み [メニューフィールドの内容]
2 変数 $f 仕込み [スクリプト引数]
3 検索モードに切り替え
4 フィールドを名前で設定 [ フィールド “テーブル::” & $f ] [内容 $w ]
5 検索実行

どこでも使える汎用的な検索スクリプトできました。スクリプトは放っておくと増えすぎますから、できるだけ汎用的なスクリプトを書いてあちらこちらで流用するのが望ましいですよね。

スクリプトを名前で実行させるメニューと理屈は同じですけど、スクリプトを名前で実行ばかりを作っていたらスクリプトが増えすぎて鬱陶しいので、利用目的が決まっているもの(この場合は検索)は使い回せる形にしてスクリプトが増えすぎることを防ぎます。

条件に応じて切り替わる値一覧メニュー

グローバルフィールドと値一覧の組み合わせ、条件に応じて変化する親子メニューで活躍したりもします。

例えば最初のポップアップメニューで「お料理」を選んだら、その隣のメニューには「だし巻き/タコ唐揚げ/鯖の燻製」などと表示され、「ドリンク」を選んだら隣メニューに「生ビール/ワイン/焼酎」などと表示させたりするアレです。「動的値一覧」とよく呼ばれています。

このアレはFileMakerの鬼門の一つで、理解するのがとても難しいんですが、まあ、そういうこともできます。私はあほですのでこれを理解するのに長い年月が必要でした。

このアレは、大分類と小分類をリレーションしておき、値一覧に「大分類」「小分類(大分類に照合)」を仕込んで、それをグローバルメニューに代理入力させて検索・絞り込むというやり方です。丁寧に書き出すと長くなるかもしれないのでここでは割愛します。

これをポップアップメニューと組み合わせて上のようなポータルのフレキシブルな絞り込みに使ったりしています。

グローバルフィールド専用ファイル

私個人的にですが、どんなFileMaker書類を作っても、ボタンと同じくらいこうしたポップアップメニューを多用するので、結果グローバルフィールドがたくさん作られます。

このフィールドは単なる代理の入れ物でどうでもいいものです。なのにあちらこちらで同じようなものを多用するから、専用ファイルを作りました。「参照フィールド」「スクリプトメニュー用1」「検索用2」とか、そんな名前のグローバル格納のフィールドばかり集めたグローバル専用ファイル。このファイル、多くの自作ファイルメーカー書類にテーブルを読み込んで利用しています。格納がグローバルだとリレーションしなくてもどこでも使えるので、これ意外と便利です。というか今まで何やってたんというか。

グローバルフィールドのついでに、よく使う汎用スクリプト、よく使うスクリプト部品やデザイン部品、そういうのも集めて、自分専用初期設定利用システムFMファイルとして重宝しております。長年使ってきて今頃こんな楽ちんな使い方を思いつくとは、おれって天才かめっちゃあほのどちらかやな。と自画自賛自暴自棄。

スクリプトについてちょっと書いてしまいましたが、次のページに続きます。スクリプトについて。

FileMakerでメディア管理 2-4 スクリプト

広告
FileMakerでメディア管理
カテゴリーFileMaker
このエントリーをはてなブックマークに追加

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください