フィルタ

カレンダーのフィルタリングは、どのようにしますか?

フィルタは、検索と同じように動作します。カレンダー中のイベントのサブセットを表示するということです。

フィルタはウインドウ左方のステータスエリアにある「フィルタ」タブで利用できます。シードコードカレンダーにははじめから、タイトル、ステータス、リソースの3つのフィルタが用意されています。フィルタの動作を見るには、「ステータス」フィルタの中の項目をクリックします。すると、カレンダーにはそのステータスの項目だけが表示されます。フィルタでは、複数のステータスを選択できることに注意してください。

次は、フィルタの横にある「除外」ボタンをクリックしてみます。すると選択したステータス以外のイベントがすべて表示されます。

「タイトル」フィルタも同様です。「Call」と入力すると、「Summary」が「Call」で始まるイベントがすべて表示されます。これらのフィルタは、FileMakerでおなじみの「対象レコードの絞り込み」とほとんど同じように動作します。ただし、フィルタは大文字と小文字が区別されるという点が異なります。「Some」の場合、「Someone is coming over」のイベントは合致しますが、「Get me some help」は合致しません。

別のフィールドや別のソースでフィルタをかける

任意のイベントテーブルのどのフィルタでも既存のフィルタを指定できます。フィルタは、統合の際に編集した「Load Calendar Settings - On Startup...」スクリプトでフィールドに割り当てられています。

複数のソースを使っている場合は、同じフィルタをソースのテーブルごとに別のフィールドに割り当てられます。たとえば、あらかじめ用意されているタイトルのフィルタをあなたのイベントのテーブルの「Summary」フィールドに割り当て(つまり、タイトルのフィルタに入力されたテキストを含むイベントのサマリが検索されます)、手術のテーブルの「治療」フィールドにも割り当てることができます。

このようにするには(フィルタを複数のフィールドに割り当てるには)、割り当てたたフィールドを改行で区切ります。統合のサンプルで、フィルタ1と2がこのようになっています(フィルタを割り当てることができるのは、1つのテーブルごとに1つのフィールドだけであることに注意してください)。

さらに詳しく

「Event Title」のような包括的なフィルタは、各ソースのイベントのテーブルで、別々のフィールドに割り当てる必要があるかもしれません。そのため、フィールド名(理想的にはGetFieldName( ))のリターン区切りのテキストを各フィルタに割り当てられるようにしています。フィルタリングは、対象のソースと同一のテーブルオカレンスから先頭にマ割り当てられているフィールドに対して実行されます。

これは、ソースのテーブルオカレンスに対してローカルでフィールドをフィルタリングできるだけであるということです。しかしおそらく、これは便利なことです。

割り当てられたフィールドでソースのテーブルオカレンスに一致するものがない場合、フィルタをそのソースを除外します。「会社の会議」のソースには、「委任」のフィルタがあるとします。これは、ほかの場面では意味がありません。会議を「誕生日」のソースと一緒に表示していて「委任」をすべて表示するようにフィルタをかける場合、「誕生日」はすべて非表示になります。委任は存在しないからです。

新たにフィルタを追加できますか?

もちろん、できます。「スタッフ」というフィルタを追加して、1人または複数のスタッフのイベントだけを表示したいと仮定します(自分だけのイベントや、自分のチームのメンバーのイベントなど)。この場合、以下のように設定します。

  1. イベントのテーブルに、スタッフ名のフィールドを作成します。
    イベントのテーブルにスタッフの名前を入力するフィールドがまだないなら、作成します。この例ではフィルタとしてスタッフの名前を使用しますが、スタッフのID番号などを使用することもできます。
  2. スタッフの名前の値一覧を作成します。それから、「CalendarInterface」テーブルに、「FilterGlob_4」という名前のグローバルのテキストフィールドを作成します。
  3. レイアウトモードに切り替え、「Calendar」レイアウトの「フィルタ」タブを選択します。
  4. レイアウト上の既存のフィルタのフィールドのうちの1つを複製(コピー&ペースト)します。そしてこのフィールドを「FilterGlob_4」フィールドに変更します。上述の2.で作成した値一覧をこのフィールドで使用できるように書式を設定します。複数の項目を選択できるようにしたい場合は、チェックボックスセットの書式にします。
  5. これらのフィルタのフィールドには、スクリプトトリガが設定されています。既存のフィールドのうちのいずれかをコピーした場合は、スクリプトトリガを残しておくことができます。
  6. 「カレンダー」レイアウトの「フィルタ」タブの編集を続けます。「クリア」、「含める」、「除外」ボタンを複製します。新たに作ったフィルタの横に配置し、各ボタンのスクリプトのパラメータをフィールドの「番号」にします(この例では「4」に変更します)。各ボタンの条件付き書式を編集して、新しいフィルタの番号を使用するようにします(この例では「4」に変更します)。「含める/除外」の切り替えの編集方法は「おしゃれなスイッチ」で解説しています。
  7. 最後に、「Load Calendar Settings - On Startup...」スクリプトの編集ウインドウを開き、「Maps filters to fields」のコメントを見つけます。新しいフィルタを使用するために、新たに「変数を設定」の行を作成します(この例では「$$sc_FilterField4」です)。「GetFieldName」には新たに作ったフィールドを使用します(この例では「GetFieldName (SampleEvents::StaffName)」です)。
  8. 「Clear All Filters」スクリプトの編集ウインドウを開き、 「フィールド設定」と 「変数を設定」ステップを新たに作ったフィールドの分追加します。
  9. 「Build Filter ( Source No )」スクリプトの編集ウインドウを開き、「#Short circuit if no filters are filled in」のコメント下のIfステップの計算式に、加えたいフィルタを追記します。
  10. ブラウズモードに切り替え、「Upon Opening」スクリプトを実行します。これで完了です。

カレンダーにあらかじめフィルタをかけて、フィルタがかかった状態で開くことはできますか?

できます。イベントが大量にあって、そのうちの多くがすでに「complete」であったり関係のないものであったりする場合には、カレンダーの処理速度を上げるのにたいへん良い方法です。

「Load Calendar Settings - On Startup --- ここで設定の編集を行う ---」スクリプトの最後の方に、「必要な場合は、カレンダーを事前に検索しておきます。・・・」と続くコメントがあります。その後の行で、カレンダーに付属のデフォルトのフィルタを4つ設定しています。この設定の行は、無効に設定されています。FileMaker Pro Advancedをお使いであれば、このうちの任意のペアを有効にします。FileMaker Pro Advancedをお使いでなければ、必要なペアを作成し直します。

それぞれのペアのうちの1行目(「フィールド設定」)は、フィルタの値をセットしています(この例では「Something」)。2行目(「変数を設定」)は、そのフィルタをカレンダーのエンジンに渡しています。フィルタを有効にするにはこのペアの両方の行が必要ですが、編集が必要なのはペアのうちの1行目だけです(この例では「Something」)。