0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FMC2Goスケジューラーの絞り込みの条件を覚える仕組み

Last updated at Posted at 2015-12-23

FileMaker Advent Calendar 2015の24日目

FMC2Goスケジューラーの絞り込みの条件を覚える仕組み

もう少し「Session Filter」スクリプトを見てみる

一番最初のブロック

151224-01.png
このブロックでユーザーがどんな絞り込みの条件にしているかを保持、管理しているようです

以前に書いた「FMC2Goスケジューラーにおける絞込み検索機能」のつづきで、「Session Filter」スクリプトが呼び出されるときに絞り込み条件がスクリプト引数で渡されることは確認した
151221-01.png

それを踏まえてスクリプトを見ていく

  1. ローカル変数「$param」にGet(スクリプト引数)=絞り込み条件を入れる
  2. カスタム関数「AddRemoveFromList」で処理した結果を「Utility」テーブルの「gScheduleFilter」フィールドに入れる
  3. 「gScheduleFilter」フィールドに入っている絞り込み条件をValueCount関数で数える
  4. 絞り込み条件の件数が0件ならすべてのレコード(セッション)を対象にしてスクリプトを終了する

ざっくりとこういう流れになっているようです

カスタム関数「AddRemoveFromList」は何をしているか

151224-02.png

AddRemoveFromList

Case( 
ValueCount( FilterValues ( ValueList ; Value ) ) ; 
Let( 
[ValueList = ¶ & ValueList & ¶ ; 
ValueList = Substitute( ValueList ; ¶ & Value & ¶ ; ¶ );
ValueList = Middle ( ValueList ; 2 ; Length(ValueList) - 2 )
]
;
ValueList
);
 
If ( not IsEmpty(ValueList) ; ValueList & ¶ )  & Value

)

うぅーむ FileMakerにカスタム関数のデバッガが欲しい

簡単に流れを追ってみる

この「AddRemoveFromList」は引数が2つ

  • ValueList:改行区切りテキスト(改行リスト)
  • Value:今回処理したいItem

初回の実行

ValueListはからっぽ
Valueには「水曜日」=「水曜日」が押された
とする

1.FilterValues関数でValueListをValueでフィルタする

FilterValues

目的
フィルタ値で指定した値のみを含むテキスト結果を、フィルタするテキストに入力されている順序で返します。
構文
FilterValues ( フィルタするテキスト ; フィルタ値 )
引数
フィルタするテキスト - テキスト式またはテキストフィールド
フィルタ値 - 指定されたテキスト内の保持する値

2.FilterValues関数はフィルタした結果を改行区切りテキスト(改行リスト)を返すので、ValueCount関数で数えると既にValueがValueListに含まれているかわかる

ValueCount

目的
テキスト内の値の合計数を返します。
構文
ValueCount ( テキスト )
引数
テキスト - 任意のテキスト式またはテキストフィールド

3.今回はValueListはからっぽなので、ValueCount関数は0を返す
4.not IsEmpty(ValueList)は0になるのでValueListはValueになる

実行された結果

  • ValueList:水曜日
  • Value:水曜日

2回目の実行

ValueListは水曜日
Valueには「金曜日」=「金曜日」が押された
とする

初回と同様に
1.FilterValues関数でValueListをValueでフィルタする
2.今回はValueListは水曜日なので、ValueCount関数は0を返す
3.not IsEmpty(ValueList)は1になるのでValueListはValueListの末尾に改行を付加したものにValueを加えた値になる

実行された結果

  • ValueList:水曜日[改行]金曜日
  • Value:金曜日

3回目の実行

ValueListは水曜日[改行]金曜日
Valueには「水曜日」=「水曜日」が再び押された
とする

今までと同様に
1.FilterValues関数でValueListをValueでフィルタする
2.ただしValueListは水曜日[改行]金曜日なので、ValueCount関数は1を返す
3.ValueListの前と後ろに改行を付ける

  • ValueList:[改行]水曜日[改行]金曜日[改行]
  • Value:水曜日

4.ValueListの値でValueの前と後ろに改行を付けたものと一致するものを改行で置換する(Substitute関数)
※[改行]水曜日[改行]金曜日[改行で[改行]水曜日[改行]を[改行]で置換する

  • ValueList:[改行]金曜日[改行]
  • Value:水曜日

5.Middle関数を使って先頭と末尾の改行を取り除く
Middle

目的
テキストの先頭文字位置で指定された文字から、文字数で指定された文字数分のテキストを抽出します。
構文
Middle ( テキスト ; 先頭文字位置 ; 文字数 )
引数
テキスト - 任意のテキスト式またはテキストフィールド
先頭文字位置 - 任意の数値式、または数値を含むフィールド
文字数 - 任意の数値式、または数値を含むフィールド

Length

目的
フィールド内の文字数を返します。 これにはスペース、数字、特殊文字もすべて含まれます。
構文
Length ( フィールド )
引数
フィールド - 任意のテキスト、数字、日付、時刻、タイムスタンプ、またはオブジェクトのフィールド、あるいは任意のテキスト式または数値式

※Middle ( [改行]金曜日[改行] ; 2 ; Length([改行]金曜日[改行]) - 2 )

  1. Length([改行]金曜日[改行])は5
  2. Middle ( [改行]金曜日[改行] ; 2 ; Length([改行]金曜日[改行]) - 2 )は2文字目から5-2=3文字取り出すので、金曜日だけ残る

実行された結果

  • ValueList:金曜日
  • Value:水曜日

これらによって現在指定されている絞り込み条件を「Utility」テーブルの「gScheduleFilter」フィールドで保持、管理しているようだ

また「Utility」テーブルの「gScheduleFilter」フィールドに絞り込み条件を保存しておくことによって、FMC2Goスケジューラーにおける絞込み検索機能で確認した各ボタンの条件付き書式が動作するようになっている

左側の○には
151220-07.png

右側の表示項目には
151220-08.png

PatternCount

目的
テキストに、検索テキストで指定された文字列がいくつ含まれているのかを返します。
構文
PatternCount ( テキスト ; 検索テキスト )
引数
テキスト - 任意のテキスト式またはテキストフィールド
検索テキスト - 任意のテキスト式、または検索する文字の集合を表すテキストフィールド

今日はここまで

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?