12月恒例のAdvent Calendarですが、FileMakerに関するものもここやここで始まっています。
filemakerhacksでもめずらしく小ネタ集が公開されていましたので紹介します。
Tips ’n’ Tricks(パート1)
(元記事はこちら)
Kevin Frank
2015/11/30
ここ何年か雑多なチップスを集めていて、数がたまったらブログ記事にしようと考えていましたが、ついにその日が来たようです。初心者からベテランまで、すべてのレベルの開発者にとって新しくて有用な情報があることを願っています。
まずはFM14特有のチップスを2つ。
Tip #1: レイアウトモードのツールチップ
FileMaker 14のレイアウトモードでは、オブジェクトの右下のバッジにマウスをホバーすると、設定内容がツールチップで表示されます。
Tip #2: スクリプトワークスペースでShiftキーを押しながらリターン
スクリプトワークスペースで、Shiftキーを押しながらReturnキーを押すと、現在の行の上に新しい行を追加できるのをご存知ですか? これは通常のReturnキーと同様に、テンキーのEnterキーでも動作します。
続く3つは、リレーションシップグラフの関連です。
Tip #3: リレーションシップグラフにテキストメモを追加する簡単な方法
MacでOptionキーを押しながらドラッグ、あるいはWindowsでAltキーを押しながらドラッグすることで、テキストメモを作成できることをご存知ですか? あらかじめテキストメモツールを選択しておく必要はありません。
Tip #4: もっともシンプルなテキストノート
FM13以降では、ノートの背景を透明に設定することでテキストノートの枠線を非表示にできます。
ちなみにFM12で同じことを試すとこうなります。
Tip #5: 分離モデルのテーブルオカレンスを識別する
[分離モデルがわからない場合は、Seedcodeのブログに優れた概要紹介があります。]単一ファイルのソリューションでは、[管理]メニューの[データベース…]の[テーブル]タブを見ることで、簡単に各テーブルのテーブルオカレンス(TO)を識別することができます。
一方分離モデルのソリューションで、現在のファイルの外に存在するテーブルのTOを見つけたい場合はどうすればいいでしょうか? そのようなときに役に立つトリックをいくつか紹介します。次の2つのファイルがあります。
- NRLT_Database (インターフェースファイル)
- NRLT_Tables (データファイル)
A) インタフェースファイル内に、tagsテーブルのTOが複数あるかどうかを知りたい
B) 複数のTOをすべて選択して、それらの色を一回の操作で変更したい
それでは、インターフェイスファイルのリレーションシップグラフを表示して、tagsテーブルのTOを探して選択します。どれでも構いません。ここに一つありました。
次にCmd-u(Macの場合)あるいはCtrl-u(Windowsの場合)か、またはこのボタンをクリックしてハイライト表示のオプションを選択します。
ここでこれらの4つのボタンの状態に注目します。アクティブになっている場合、TOが複数あるということがわかります。
(TOが複数ない場合は、灰色の表示のままです。)
これでtagsのTOをすべて選択したので、簡単に色を設定できます。
[注:リレーションシップグラフでは、TOの名前がイタリック表示になっていることによって外部ファイルのテーブルを参照していることがわかります。]もう一つのトリックは、これは急場しのぎの範疇に入りますが、インタフェースファイルの中のtagsテーブルのすべてのTOを急ぎで確認したいという場合、Cmd-u(または自分の好きな方法)で対象を選択しておいて、一時的に整列させるという方法があります。少し試行錯誤が必要ですが、次のようになります。
([データベースの管理]を終了するときに、変更を保存しないように注意してください。)
このセクションをより格調高く締めくくるために、同じことをデータビューアを使っておこなう方法も紹介します。
ExecuteSQL ( "
SELECT TableName
FROM FileMaker_Tables
WHERE BaseTableName = ?
" ; "" ; "" ; "tags" )
結果としてこのようなきれいなリストが返されます。
_g_TAG__ac
con_TAG
con_TAG__clear_tags
con_TAG__kill
DelDep_con_TAG
TAG
tag_TAG__deDupe
同じ方法で、TAGのTOの数を数えることもできます。
次に日付フィールドに関するいくつかのチップスを紹介します。一つ目は非常にシンプルですが、今後数年間のことを考えればあなたの指の移動距離を大幅に節約できます。
Tip #6: 日付の区切りにピリオドを使う
日付を入力するときにはスラッシュ(/)またはハイフン(-)を使用すると思いますが、ピリオド(.)も同様に動作します。
4.15.2016
(タッチタイピストにとっての)利点は、日付を入力するときにホームポジションから手を離さずに済むということです。この方法は日付範囲を入力するときに特に便利です。例えば今年の8月の最初の20日間を検索するという場合、次のように指定できます。
8.1...8.20
もちろん、範囲演算子のピリオドは3つの必要はなく2つでも機能します。
8.1..8.20
Tip #7: SQLの世界からFileMakerの世界に日付を移動する
ExecuteSQLで日付を取得する場合、この形式になります。
YYYY-MM-DD
ただしFileMakerはこれを有効な日付形式として認識しません。FileMakerが認識していないことは、次のように確認できます。
この日付をFileMakerに認識させるための一つの簡単な方法は、ハイフンをプラス記号に置き換えて日本形式に変換することです。
YYYY+MM+DD
これで日付として認識できました。
GetAsDate(およびGetAsTimestamp)に加えて、これらの関数すべてで日本形式の日付を扱うことができます。
同じ流れで、日付フィールドに“2015-11-30”を設定しようとすると、FileMakerはクエスチョンマークだけを表示します。しかし“2015+11+30”とすると正しくフォーマットされた日付が表示されます。
[日本形式の日付についての詳細は、Birthday Challengesのパート1とパート2を参照してください。それぞれのコメントセクションにも参考になるやりとりがあります。]今日の記事の残りでは、様々な検索テクニックを探ります。
Tip #8: 特定の文字で始まるエントリを検索
あなたは会社名がQで始まるすべての顧客のリストを作成するよう指示を受けました。あなたはこのように検索しますか?
Q*
もちろん違いますね。これでは会社名に含まれる単語のいずれかがQで始まるエントリがすべて返されてしまいます。
これでどうでしょう?
==Q*
うまくいったようです。
解説: 「==
」はフィールドの完全一致演算子であり、FileMakerへの指示としては「会社名フィールドの内容がQで始まり何らかの文字列が続くものを探せ」となります。
Tip #9: 数字で始まるエントリを検索
会社名が数字で始まるレコードを検索したい場合はどうすればいいでしょう? この場合、#
(任意の一桁の数字)演算子が使えそうですが、単純に#*
で検索すると、会社名に含まれるいずれかの単語が数字で始まるレコードがすべて返されてしまいます。
ここでほしいのは、名前の最初が数字で始まる会社だけです。そして前のチップスと同じように、条件を次のようにすれば、
==#*
求めていた結果が得られました。
Tip #10: テキストフィールド内の数字を検索
例えば、名称の中に100が含まれる会社を検索したいとします。普通に検索条件に100を指定すればいいと考えるかもしれませんが、データによってはこの仮定は危険かもしれません。例えば、以下のような場合です。
テキストフィールドを検索したので、1000にも一致します。これは例えば、Louで検索したときに、LouだけでなくLouis, Louise, Louisianaなども検索されるのと同じです。
100を含むレコードだけを見つけたい場合、=
(単語全体が一致)演算子を使用して次のように検索します。
=100
はい、うまくいきました。
会社名に任意の3桁の数字を持つ顧客を見つけたい場合は、この条件式で検索します。
###
任務完了です。
Tip #11: 奇数または偶数の検索
以下のようなテーブルがあります。
ページ数が奇数のレコードを検索するよう指示を受けました。もちろん次のような計算フィールドを定義することができます。
If ( Mod ( pages ; 2 ) = 1 ; "Odd" ; "Even" )
これをレイアウトに配置して「odd」を検索します。
または次のような検索を実行することもできます。
pagesは数字フィールドなので、=(ワードマッチ)演算子を省略できます。
いずれも、5つの条件で1, 3, 5, 7, 9で終わる値を検索し、結果は次のようになります。
ドル単位での奇数を探す場合、costフィールドでも同じ検索を実行できます。しかしセント単位で奇数のエントリを探す場合は、条件を次のように設定します。
結果は次のとおりです。
まとめ
今日はここまでですが、まだいくつか残りがあるので、時期は未定ですが近々公開されるパート2をお楽しみに。