フィールドを追加する

カレンダーに独自のフィールドを追加するには、どのようにしますか?

概要

カレンダーでデータがどのように表示されるかの書式の多くは、「Source No X」レイアウト上(「Source No 1」など)に設定してあります。このレイアウトで、どのフィールドを(おそらく計算フィールド)を「サマリ」に使用するかを決定します。「サマリ」は、すべてのカレンダーの画面上で表示されるイベントの属性です。「サマリ」フィールドに計算を用いることによりカレンダー上に何でも表示させることができます(たとえば、ユーザのイニシャルとイベントの詳細など)。

ただし「日」表示はスペースに余裕があり、「サマリ」に加えて何らかの情報を表示させることもできます。

「日」表示

イベントのテーブルにあるどのフィールドでも、カレンダーの「日」表示上に配置できます。また配置するフィールドを必要に応じて入力可能にすることもできますが、後述の通り、若干注意が必要です。

「日」表示にフィールドを追加するには、以下のように「CalendarRows」テーブルから「SampleEvents」テーブルにリレーションシップを作成します。

CalendarEventUIDCalc_FirstValue = _id

「_id」の部分が、あなたのイベントのテーブルにあるプライマリーキー(ユニークID)です。このリレーションシップによって、イベントのテーブルから「日」表示にフィールドを追加することができます。

次に、レイアウトモードで、カレンダーの「日」タブに切り替えます(レイアウトモードで「日」タブに切り替える方法は、「カレンダーのタブ」を参照してください)。そして、イベントのテーブルからフィールドを追加するだけです。これでオリジナルのカレンダーファイルにある「SampleEvents」テーブルからのフィールドになります。

Refresh Calendar...」スクリプトの最後にある「ウィンドウの再表示」ステップを変更して、「キャッシュ結合結果を書き込む」のオプションを使うようにします。Macの場合はこのままにしておいてかまいませんが、Windowsの場合やパフォーマンスをできるだけ望む場合には、これをIfの記述にまとめて「$$sc_Mode = "Day Sched"」のときのみオプションで「キャッシュ結合結果を書き込む」ようにし、それ以外では通常の再描画にすることもできます。

複数のデータソース

そして、言うまでもないことですが、FileMakerのイベントのテーブルのひとつひとつについて同様のリレーションシップを設定しない限りは、一度に動作するのは1つのテーブルに対してのみです。プライマリーキーがすべて前置されている場合、“真”となるリレーションシップは一度に1つだけであるため、このようにして他のイベントのフィールドをスタックすることができます。プライマリーキーが前置されていない場合はSeedCodeまでご連絡ください。解決のためのカスタムソリューションをご用意しております。

入力できるフィールド

イベントのテーブルに含まれるフィールドの入力を許可すると、情報が編集されてイベントの移動や色の変更が発生する可能性があることに注意してください。FileMakerは、あなたがフィールドを編集したためにこうした状況が発生するということを検知できません。このような場合には、フィールドに「Refresh Calendar { UseExistingData ; DontRefresh }」をコールするスクリプトトリガを設定する必要があります(「OnObjectSave」のスクリプトトリガを推奨します)。このスクリプトには、パラメータを渡さないでください。

カレンダーの表示に応じて別のフィールドが見えるようにすることはできますか?

タブごとにフィールドを変更する

概要

はい、できます。上述のセクションでは「日」表示にフィールドを追加する方法を解説しましたが、他の表示で表示される項目を変えることもできます。ここで解説する例では、「月」表示にイベントのテーブルの「MyField」という名前のフィールドだけを表示し、他の表示ではカレンダーの「サマリ」に割り当てたフィールドを表示する方法を解説します。

変更内容

まず、ファイルのバックアップをとりましょう(^-^)

  1. 「Write One FileMaker Event in iCal Format」スクリプトの編集ウインドウを開き、「$scical_Summary」変数を設定している行を見つけます。
  2. 以下の計算式を変更します

     GetField ( $$sc_FieldForSummary )

    「SampleEvents」を「Source No 1」に相当する自分のファイルのテーブルオカレンス名に、「SampleEvents::MyField」を「月」表示で表示したいフィールドの名前にします。ここでのCaseの記述を用いて表示によって設定を変えることができ、他の表示や他のソースでは「GetField ( $$sc_FieldForSummary ) 」によってデフォルトとされているフィールドはそのままであることに注目してください。

    Case ( 
        Get ( レイアウトテーブル名 ) = "SampleEvents" ; // 「Source No 1」に相当する自分のファイルのテーブルオカレンス名にする
            Case ( 
               $$sc_Mode = "Month" ;  SampleEvents::MyField ;
               $$sc_Mode = "Week Sched" ; GetField ( $$sc_FieldForSummary ) ;
               GetField ( $$sc_FieldForSummary ) // 他のモード
            )
        ; GetField ( $$sc_FieldForSummary ) // 他のソースやテーブル
      )

    参考:カレンダーで使用できるすべてのモードと表示については「カレンダーのモード」に記載しています。

    ソースが1つだけの場合は、「Get ( レイアウトテーブル名 )」の検証は省いてかまわないことに注意してください。この検証をすることで、カレンダーの動作は若干重くなります。この検証を省く場合は、上述の計算式の先頭の2行と最後の2行を削除します。

  3. この時点で、「MyField」が1つだけの場合は、「月」表示のイベントの時間の横に表示されます。時刻も取り除きたい場合は、「Format Event Time --- Edit Time Formats for Events Here ---」スクリプトを編集します。スクリプトの最後の「変数を設定」の記述について、その4行目で「日」表示に関する行をコメントアウトしてあります。この行のコメントを解除し、モードの形式を「Day Sched」から「Month」に変更します。これで「月」表示から時刻が取り除かれます。
 これで完成です!