FileMaker Advent Calendar 2015の23日目
改行区切りテキスト(改行リスト)を取得する仕組み
改行区切りテキスト(改行リスト)とは?
単に改行で区切られたひとかたまりのテキストなんですが、FileMakerを使いこなしていく中で大きな役割をもっています
例えばこんなの
フィールドの中で改行して複数の値を入れたら、もうそれは改行区切りテキスト(改行リスト)として使えます
昨日[関連レコードへ移動] スクリプトステップについて書いてみるで、フィールドの中で改行して複数の値=改行区切りテキスト(改行リスト)を入れたら対象レコードの絞り込みに使えることに触れました
ということは改行区切りテキスト(改行リスト)どうにかすると便利に使えるということです
改行区切りテキスト(改行リスト)を扱える関数
改行区切りテキスト(改行リスト)を扱える関数で一番使いどころがあるのがGetValue関数です
GetValue
目的
値一覧にある値番号により与えられる要求された値を返します。
構文
GetValue ( 値一覧 ; 値番号 )
引数
値一覧 - 改行で区切られた値の一覧
値番号 - 一覧から返される値
ここでは改行区切りテキスト(改行リスト)を値一覧と呼んでますね
あとValueCount関数でしょうか
ValueCount
目的
テキスト内の値の合計数を返します。
構文
ValueCount ( テキスト )
引数
テキスト - 任意のテキスト式またはテキストフィールド
他にもいろいろとあるのでしょうが..
引き続き「Session Filter」スクリプトを見ていく
次のブロックを見てみる
「FMC2Goスケジューラーにおける絞込み検索機能」のつづきから引き続いてスクリプトを見てみる
いきなり見慣れない関数「ExecuteSQL」が出てきました
ExecuteSQL
目的
指定したテーブルオカレンスに対する SQL クエリーステートメントを FileMaker Pro データベース内で実行します。
構文
ExecuteSQL ( SQL クエリー; フィールド区切り; 行区切り { ; 引数... } )
引数
SQL クエリー - SQL クエリーステートメント。ステートメントには、2つのクエリーの結果を組み合わせた Union 句を含むことができます。ステートメントには、オプションの引数がクエリーのどこで使用されるかを示す、プログラムに基づいて生成された SQL(ダイナミックパラメータ)を含むことができます。ダイナミックパラメータを指定する場合は疑問符(?)を使用します。
フィールド区切り - 計算結果のフィールド間の区切りとして使用される文字列。空の文字列が指定されると、区切りはコンマになります。フィールド区切りは、計算結果の最終フィールドの後には表示されません。
行区切り - 計算結果の中のレコード間の区切りとして使用される文字列。空の文字列が指定されると、区切りは改行になります。行区切りは、計算結果の最終行の後には表示されません。
引数- クエリーステートメントのダイナミックパラメータの値として評価、使用される式。
戻り値のデータタイプ
テキスト
いきなり
行区切り - 計算結果の中のレコード間の区切りとして使用される文字列。空の文字列が指定されると、区切りは改行になります。行区切りは、計算結果の最終行の後には表示されません。
で空の文字列が指定されると、区切りは改行になります。って書かれています
ということはExecuteSQL関数は、デフォルトで改行区切りテキスト(改行リスト)が取ってこれる関数になっているようです
SQLとは
詳しくは
SQL - ウィキペディア
を参照
GUIでデータベース問い合わせを行わないデータベースシステムでは、一般的にSQLという問い合わせ言語を使って問い合わせの内容を書きます
GUIでデータベース問い合わせを行うものであっても、GUI操作の結果SQL文(SQLで書いた問い合わせの内容)を生成して実行しているものも多いです
ExecuteSQL関数は、FileMakerの外の世界では極一般的なやり方をFileMaker(12から)でも一部(簡単な問い合わせのみ)扱えるようにしたものです
「Session Filter」スクリプトのExecuteSQLを見てみる
このブロックでは
ExecuteSQL ( "Select \"__kp_Schedule_ID\" from Schedule" & $where ; "" ; "" )
なSQL問い合わせをしています
3つめの引数(行区切り)で""(空の文字列)が指定されているので、結果は改行区切りテキスト(改行リスト)で返ってきます
例えば「曜日」の「木曜日」を押した時、このブロックの中で使用されている各々の変数には
$IDs:問い合わせに該当するセッションIDが入る→該当するセッションIDの改行区切りテキスト(改行リスト)→[関連レコードへ移動] スクリプトステップで対象レコードを絞り込むための元ネタ
$where:SQLのwhere句という抽出条件を指定するものが入っている
where Date_DayName in ('木曜日')
- $$IDs:今回問い合わせに使用したSQL文が入っている
Select "__kp_Schedule_ID" from Schedule where Date_DayName in ('木曜日')
まとめ
今まで見てきた「Session Filter」スクリプトでは
- [関連レコードへ移動] スクリプトステップで対象レコードを絞り込みたい
ために
- 条件に該当するセッションIDを改行区切りテキスト(改行リスト)で取ってきたい
ために
- ExecuteSQLでデータベースへの問い合わせを行う
という流れになっているようです