Report

イベントのレポートです。 >> 写真へ >> アンケートの声へ

第56回 条件付書式の掘り下げ検証
・開催日時:2010/02/20 18:00-19:30
・開催場所:Apple Store Ginza 3F シアタールーム
概要:
簡単で便利で効果の大きい条件付書式ですが、まだ使っていないという方も多いようです。そこでデータベースにおける条件付き書式の基本的な使いどころから、ちょっとした発想で大幅に開発効率をアップできる秘訣まで、さまざまな具体的活用例とその実現方法をご紹介します。
レポート:
Ver.7になってからというものバージョンが上がるたびにデカ目の新機能が出現するので、最近はしんどさを自覚している筆者です。てか、いまだに手駒がv9なもんで、メモ取りながらも時々気ィ失ってます。今回は条件付き書式の深耕ということですね。注目すべき箇所に視線を誘導する気の利いたインタフェースを作りたいならコレでしょう。超めんどくさい式をぐりぐり押し込んで悦に入ろうとすると表示が重くなったりもするようですが、要所を押さえて効果的に使えば、頭良さげな雰囲気を発散すること間違いなしです。さて【掘り下げ】とは、どのくらい深いとこまで潜ろうとしてるのか気になります。(ワタシの理解を越えないように頼んますよ先生。)
(唐突な補足:難航してたスピーカー弄りですが、ほぼネットワーク製作完了です。あっと驚く金物の冴え+繊細感。J社ユニットたちがようやく本領発揮でっせ。)


第56回 FileMaker Fun Night!「条件付き書式の掘り下げ検証」
お題は...
FMテクニック「誰でも組み込めるインクリメンンタルサーチ」
恒例Tips対決!
【特集:条件付き書式の掘り下げ検証】



●FMテクニック「誰でも組み込めるインクリメンタルサーチ」
(竹内さん)
「インクリメンタルサーチ」とは、検索条件を1文字ずつタイプする毎に、対象が順次絞り込まれていく、あのカッコイイやつのこと。Mac OSのSpotlightのようなアレだね。
・1文字毎に値を確定することなく実現できるようになったのは、スクリプトトリガのお陰。要するにタイプするたびに裏でスクリプトが起動して必要な動作を行う。
・従って実現可能なのはver.10のみで、ver.9の場合は近くにボタンを置いておき、スクリプトを起動させる必要がある。動くには動くがちと面倒ではある。

▼実装の考え方
・何か入力されたらスクリプトが起動する。
・入力されている条件を取得する。
・検索対象のフィールドを特定する。
・条件と対象とするフィールドの組み合わせに応じて検索を実行する。

▼ここでデモ。
onObjectModifyイベントで目的のスクリプトをトリガする。
ここでのポイントは、順次絞り込みのためにユーザはその動作を繰り返し実行するということだ。
つまり、検索実行後に検索条件入力フィールドの既存文字列の末尾にカーソルを戻す必要がある。
それともう一つ、対象が見つからない場合に生エラーを出さないようエラー処理を入れとかないとカッコ悪い。

起動時にonObjectModifyでトリガされるということは、条件とする文字数が減った場合にも動作する。なので最後に条件が空欄になったときのことも考えて分岐を用意しておくことになるだろう。

更に改善するならば、検索対象のフィールドを選択可能とか何でも来いにする等が考えられる。
・検索動作を複数フィールドを対象としたOR検索にする。
・検索モードにして、目的のフィールドに条件をセット
・新規検索条件を追加し「次のフィールドへ移動」してまた条件をセットする。
この動作をループすることでOR検索とする。
ループには脱出条件が必要。何回繰り返すか...自動的にそのレイアウトを調べて計算させればクールだ。

▼パラメータの動的取得による汎用化について
ここで、レイアウト上のフィールド名を関数でGetしたり、リストのフィールド数をValueCountで数えて「次のフィールドへ移動」のループ回数を制御すれば、動作が決め打ちでなくなるため、別のレイアウトや別のファイルでそのまま再利用できるスクリプトになるのであ〜る。
ただし、ループ回数は検索条件入力用のフィールドを除外するために、戻り値から1を減じる必要あり。

似たような効果をもたらすテクとしてポータルフィルタリングがあるが、あれはリレーションを利用しているので検索記号が使えないし、一部の一致で対象レコードを表示するためにはかなりの仕込みが必要だ(ここに書くのはちと無理)。今回のネタは純粋に検索なのでそういったトレードオフ要素のないところが嬉しい。
動作がやや複雑に見えるものの、数万レコード程度までであれば十分実用レベルの速度が出るとのことなので、是非とも試されたい。

▼Q&A
タブ順の指定との関係はどうなるか?
→関係あり。タブ順を除外したフィールドへは「次のフィールドへ移動」ではカーソルが入らないので、条件はセットされない。
 逆から言えば、必要なフィールドだけタブ順をセットしておくことも可能なわけか。



●恒例 Tips対決!


・茂田さん
 (1)集計フィールドの定義ダイアログで「個別」にチェックしておくと、その集計対象が繰り返しフィールドの場合は集計結果も繰り返しタイプになる。
 (2)レイアウトモードで、Option+コマンドAキーを押すと、単なる全選択ではなく「同一のもの」を全選択する動作になる。

・野田さん(来場者)
 ValueListItems()は、フィールドを参照する値一覧に含まれる選択肢、つまり重複のないリストを返す関数である。
 ここで自分自身の出現ポジションを取得するフィールドを小計パートに加えて、値一覧の「2番目のフィールドの値も表示」にチェックすると重複値を含むリストが返るようになる。

・イトゥーさん(ジーネクスト)
 スクリプトのループにおいて「最後まで来たら終了」を使ったとき、実は内部的には101のエラーが発生している(FMSの場合はエラーログに残る)。
 これを避けるには、スクリプト終了間際のところに、エラーにならないステップを含めておけば良い。

・竹内さん
 更新タイムスタンプが動作しないようにフィールドの値を変更するには、数字(自動入力式がセットされた)フィールドをいったん計算フィールドに変更してからまた元に戻せば良い。



●【特集:条件付き書式の掘り下げ検証】
(Shinさん)
ver.9以降、つまり条件付き書式の実装より後にFileMakerを始めたヒトはラッキー。
それ以前は特定の値のとき赤文字といった動作を実現するために、計算フィールドで表示を分岐させ、それぞれに別の文字色を設定して2枚重ねて置く、なんてことが普通に行われていたから。他に方法がなかったわけなんだが、これをやると要らんフィールドが増えるし、レイアウト変更で発狂するしと、いいことはなかった。可変対象が結局フィールド値だけというのもつまらなかった。なので大きく世界が広がった後で門を叩いた人たちはラッキーというわけだ。

言うまでもなく、条件付き書式とは、状態を判断して文字書式を動的に切替可能とする機能。
条件とは一つではなく、複合条件での判断もできる。
では、その対象とは、
・テキスト
・マージフィールド
・テキストで作られたボタン
・フィールド
・レイアウト記号
・webビューア

原則として、矩形や線といったレイアウト部品には適用できない。

▼設定のノウハウいろいろ
・対象がフィールドの場合「値が」を選択することで自身の値を判定させれば設定は簡単になる。
・レイアウト上の固定文字列の表示を切替える場合は「計算式が」を選択して目的のフィールド値を判定させれば動的な切替ができる。
・複数の条件が設定されている場合は、条件リストの上から順に判定していくが、行によって判定結果がばらつくときは最後の判定結果が適用される。Case式とは違うので注意。
・日付や数字書式は、条件付き書式とは別に保持され、競合した場合は条件付き書式が負ける。ただし背景色は条件付き書式の設定が生きる。

▼条件付き書式の設定を使い回すには
たとえば「IsEmpty(Self)/計算式が」としておく。こうすればレイアウト上でフィールドをコピペしてから他のフィールドに指定を変更しても条件付き書式の動作が継承される。

更に、作業を楽にするテクをひとつ。
設定のコピー元とするフィールドを最前面にセットする。
手前のコピー元フィールドと、奥に置かれたコピー先フィールドをまとめて選択し、設定ダイアログを開く。
すると最も手前のコピー元フィールドの設定を代表選手としてダイアログが開く。
ここで単にOKすると、奥にあるフィールドの設定が最前面のものの設定に統一される。

▼条件付き書式でそもそもの表示/非表示の切替はできないか
できない。
しかし、ある条件のときには巨大な文字サイズになるよう設定すれば、フィールドの範囲に文字がまったく表示できなくなり、消えたと同じになる。
うむ。今となってはやや懐かしい、とんちネタのようではあるが。

▼応用のまとめ
・Self関数の利用で使い回しを可能にしよう。変数も使えるし。
・インジケータ類の作成は、計算フィールドを使ってDB構造を汚すより、レイアウトにしか存在し得ないテキストオブジェクト+条件付き書式で作ろう。
・リスト表示の際のカレントレコード着色にも使えるし、グローバル変数を使ってソート基準フィールドのラベル色を切替えるなど応用範囲は広い。

▼Q & A
インジケータとしてレイアウト上で重ねて置くような場合、文字が重なって障害にならないか。
→見せない条件のときに巨大文字にするパターンだと文字同士が重なることはない。

グローバル変数を参照する条件付き書式では、画面が再描画されないと結果が反映されないのではないか。
→その通り。しかしスクリプトでグローバル変数をセットした直後に再描画やキャッシュ書き込みのステップを含めれば解決できる。

書式コピーコマンドで条件付き書式の設定はコピーできないの?
→残念ながら数字書式や日付書式、条件付き書式などは対象外のようだ。



次回は3/20開催。「FileMaker最新Tips連発大会」だす。
メモが追いつかんというイヤ〜な予感。
ま、皆さん実際に見に来て、聴きに来てくだされ。おながいしまつ。

おまけ(早くもネタ切れ?筆者quiz:レイアウト横手方向の最大幅のピクセル数は幾つか?)
前回の問題(FileMaker v1.0 がリリースされた1985年当時に開発元だった会社名は何でしょう。)の回答→Forethought Inc. ...実は私も知りませんでしたケド)

Reported by 金丸康明



アンケートのご協力、どうもありがとうこざいました!
ご意見、ご要望やご感想はこらちからお寄せください。 >> ご意見箱

Special Thanks to:
 FileMakerまんが:たまみそさん(今回のまんがはこちら
 イベントレポート:金丸康明さん
会場の様子:>> Topへ




インクリメンタルサーチの組み込み解説です





恒例・Tips対決!

会場からのすばらしいTips

Tips対決常連さまです



来場のみなさんのご感想:>> Topへ
男性たいへん参考になりました。
男性応用がたくさんできる要素が多いセッションありがとうございました。
男性大変テンポが早くアタマが刺激されて楽しかったです。
男性インクリメンタルサーチはとても参考になりました。データが200万件とかの場合は入力するたびに待たされそうな気もしますが、このどこでも使えるスクリプトはとても重宝しそうです。
男性検索の話はおもしろかったです。「フィールド設定」を使う方法などいろいろ応用できそうですね。
男性いつも有用な情報ありがとうございます。今回も大変参考になりました。
女性すごくためになりました。ありがとうございました。
男性今まで通り役に立つものをお願いします!
...某他のセミナーが宣伝ばっかりだったので。
男性今回の特集はよく使う内容だったのでとても参考になりました。(大きい文字で消えたように見せるTips最高です)
男性・チラシにスクリプトの全文が載っているのがすごく助かりました。
・ValueListItemsのTipsがすばらしかったです。
女性・モニターの色ですが、パステルピンクは識別しにくいです。
・今年の初参加なので、今頃ですが明けましておめでとうございます。今年もよろしくお願いします。
男性インクリメンタルサーチ、よくわかりました。スクリプトトリガ様々ですね。
男性インクリメンタルサーチスクリプト、早速利用させていただきます。ありがとうございます。
男性チェックボックスのTipsはありがたい!そもそもあれはどうにかならんのですかね、FileMakerさん(日本語フォントのベースラインも含め)
女性なかなか予定が合わないのが残念です。同じ内容を1日2回とかは...やらないですよね...?やっていただけると参加できる可能性が上がるのですが...。
男性今回のようにチラシにスクリプト等のポイントを書いてもらいたい。
男性現在主に使用しているFMがver8なので直接は使用できないネタが多かった。旧verでも使えるフォローを少し欲しかった。できればメルマガなどでしてもらえると嬉しいです。
男性お忙しいところ恐縮ですが、Shinさん、もう少しサンプルファイルの事前準備をお願いします...。デモがなく、口頭の説明で終わってしまうことが多いので...。

Copyright © 2004-2010sevensdoor.com. All rights reserved.