統合

シードコードカレンダーを既存のファイルに追加する:早わかり解説

多くの方が、シードコードカレンダーを自分のファイルにペーストし、既存のイベントのテーブルにあるイベントをカレンダーに表示したいとお考えのことでしょう。このページは、そんな方々のための解説です。シードコードカレンダーの「SampleEvents」テーブルを自分のイベントのテーブルとして使いたいのであれば、ステップ2の解説に従ってこのテーブルを自分のファイルにインポートし、ステップ5に進んでください。

注意:自分のファイルをFileMakerのあるバージョンで開き、シードコードカレンダーを別のバージョンで開いてコピー&ペーストを少しでも効率よくしたいと考えることがあるかもしれませんが、この方法ではスクリプトの移行の際に問題が発生します。このカレンダーはFileMakerのバージョン10または11で適切に動作しますが、統合の作業はいずれか一方のバージョンで実施してください。異なるバージョンの間でのコピー&ペーストはしないでください。

1. ファイルをバックアップする

バックアップは忘れないでください。

また、重要なことがあります。統合を始める前に、既存のファイルにいくつか変更が必要な場合がありますので確認してください。

2.フィールド

2.1 シードコードカレンダーの「SampleEvents」テーブルから、以下の2つのフィールドを自分のイベントのテーブルに追加してください。

  • z_sc_TimestampEndCalc

  • z_sc_TimestampStartCalc

FileMaker Pro Advancedでフィールドをベーストした場合は、この2つのフィールドの計算式を編集して、「/」で始まり「/」で終わるコメントのタグを削除します(つまり、計算式の始めと終わりから「/*」と「*/」を取り除きます)。それから、計算式中の「DateStart」や「TimeStart」などのフィールドを、あなたのイベントのテーブルにある該当するフィールドに置き換えます。どちらのフィールドも、計算結果を「タイムスタンプ」にします。

索引設定は、計算フィールドのデフォルト状態のままです(索引設定;なし、必要時に索引を自動設定にチェックあり)。

2.2 次に、自分のイベントのテーブルの「TimeStart」フィールドに、オプションの「入力値の自動化」で以下の計算値を追加してください。 

Case ( 
Self = Time ( 24 ; 0 ; 0 ) ; Time ( 24 ; 0 ; 1 ) ; 
Self = Time ( 0 ; 0 ; 0 ) ; Time ( 0 ; 0 ; 1 ) ;
Self )

「フィールドに既存の値が存在する場合は置き換えない」のチェックボックスにはチェックを付けないでください。イベントを深夜0時に開始できるようにするには、この自動入力のオプションが必要です。

2.3 自分のイベントのテーブルの「TimeEnd」フィールドに、入力値の自動化の「計算値」のオプションを、以下の通り追加します。

Case ( 
Self = Time ( 24 ; 0 ; 0 ) ; Time ( 24 ; 0 ; 1 ) ; 
Self = Time ( 0 ; 0 ; 0 ) ; Time ( 0 ; 0 ; 1 ) ; 
Self > Time ( 24 ; 0 ; 0 ) ; Self - Time ( 24 ; 0 ; 0 ) ;
Self )

 「フィールドに既存の値が存在する場合は置き換えない」のチェックボックスにはチェックを付けないでください。イベントを深夜0時に開始できるようにするには、この自動入力のオプションが必要です。

3.テーブル

シードコードカレンダーから既存のファイルに、「CalendarRows」と「CalendarInterface」、「CalendarColors」の3つのテーブルをインポートします。なぜFileMaker Pro Advancedが必要なのだろうと思ったことはありませんか。これがその答えです。ただし、手作業でテーブルを作ることもできます。手作業で作る場合は、まず通常のフィールドを作り、次に計算フィールドを作ります。「CalendarInterface」から作り始めて、それから「CalendarRow」、そして「CalendarColors」を追加します(データを分割している場合、これらのテーブルはインターフェイスのファイルに追加してください)。

 

4. 値一覧

シードコードカレンダーを開き、既存のファイルに値一覧を5つ、再作成します(「Contacts」は除く)。ステータスやリソースの一覧は自由に使ってかまいませんが、シードコードカレンダーで使用している名前に変更してください。名前は後から、元に戻すことができます。その他の値一覧は、そのままにしておく必要があります。ただし「Calendar Times」の時刻の書式は好みに応じて自由に変更してかまいません。これについては、いったん設定が完了して使ってから変更したいケースもあるかもしれません。

ここでは、そしてこの後も、既存のファイルにデータが入っていても、「SampleContacts」に関して何もインポートする必要はありません。

5. テーブルオカレンス

「ファイル」メニューの「管理」から「データベース」を選択し、ダイアログの「リレーションシップ」タブをクリックして自分のファイルのリレーションシップグラフを表示します。左下にある小さな緑色の「+」ボタンをクリックして、自分のイベントのテーブル(カレンダーに表示させたいレコードが保存されているテーブル)に新規のテーブルオカレンスを1つ追加し、「SampleEvents」という名前にします(テーブルオカレンスの名前の途中にはスペースを入れないでください)。この名前は、後で変更できます。

連絡先のテーブルが別にある場合、同様にして新しいテーブルオカレンスを作成し、その名前を「SampleContacts」と変更します(繰り返しになりますが、ダブルクォーテーションを付ける必要はありません。また名前の途中にスペースを入れないでください)。これを、ほかで使用しているものに相当するフィールドを使って、今作成した「SampleEvents」テーブルオカレンスと関連づけます。「SampleEvent」の連絡先IDを、「SampleContacts」の中の連絡先の一意のIDと関連づけるというようなことです。

6.リレーションシップ

リレーションシップグラフで、以下の図のように「CalendarRows」を「CalendarInterface」に、そして「CalendarColors」に関連づけます。テーブルオカレンスの名前が、サンプルファイルのものと一致していることを念のため確認してください。

この時点で、もともとある「イベントリスト」や「イベント詳細」レイアウトと同じようにリスト表示でイベントの色を表示させたい場合には、「z_ColorCalc」フィールドをサンプルイベントからコピーして、自分のイベントのテーブルに追加します。計算式の最初と最後から「/*」と「*/」を削除します。そして「ステータス」として使われているフィールドを、自分のイベントのファイルのこれに相当するフィールドに置き換えます。このフィールドが、カレンダーのイベントの色分けに使用されています。

7. レイアウト(その1)

既存のファイルに空白レイアウトをいくつか作ります(この後のステップで、この空白レイアウトにコンテンツをペーストします)。シードコードカレンダーのレイアウト1つに対して、既存のファイルに1つレイアウトを作ります(ユーザに対して表示されるレイアウトはいくつかに限られますが、すべてのレイアウトが必要です)。以下のリストの先頭のレイアウトを作成し、それを複製して他のレイアウトを作るのが最も簡単です。レイアウトを作ってから「レイアウト設定」ダイアログを開き、「アクティブ時にフィールドのフレームを表示」のチェックをはずします。また、FileMaker 11をお使いの場合には、「クイック検索を有効にする」のチェックもはずします(クイック検索機能を使ってカレンダーを検索したい場合は、「イベントリスト」レイアウトで有効のままにしておくか、またはfmSearchResultsを使ってクイック検索を拡張できます。以下の設定が終わり、カレンダーを開いた後で、この設定をします)。複製して名前を変更したレイアウトは、「レコードを表示」ポップアップメニューでテーブルの関連付けを以下のリストの通りにしてください。

ここでも、連絡先のレイアウトがひとつもない場合を除き、連絡先のレイアウトを追加する必要はありません。

シードコードカレンダーと同じように区切り線のレイアウト(「Calendar Interface」に基づくレイアウト)を作るとよいかもしれませんが、これはあくまでも見た目と使い勝手だけの問題です。各レイアウトが、以下に示すテーブルオカレンスに基づいていることを確認してください。

ここまでできたら、作成したレイアウトが、シードコードカレンダーのレイアウトと完全に同じ名前であることを確認します。また、すべてのレイアウトから、ヘッダとフッタを削除します。

最後に、ステップ3でテーブルをインポートした際に作られたデフォルトのレイアウトは、削除します。

イベントのリストやイベントの詳細に使用したいレイアウトがこの段階ですでに作られているかもしれません。その場合は、「自分で作ったレイアウト」を参照してください。

注意:Event Listは、ボディパート以外に集計パートが設定されています。

8. スクリプト

シードコードカレンダーからスクリプトをインポートします。インポートするには、「SeedCode Calendar」フォルダの先頭にあるチェックボックスをクリックしてチェックを付けるだけです。これで、フォルダの中にあるスクリプトがすべてインポートされます。インポートの際にエラーのレポートがたくさん表示されますが、これは正常です。後述の「セットアップ」で、スクリプト中に使用されているフィールドや設定を、既存のファイルの中の値に指定し直します。

ただし、スクリプトの名前が重複するために名前が変更されたとメッセージが表示された場合は、インポートしたスクリプトの名前のうち「2」で終わっているものを探して、修正してください。たとえば、このカレンダーには「Upon Opening」という名前のスクリプトがあります。すでに同じ名前のスクリプトがある場合、インポートしたスクリプトの名前は「Upon Opening 2」となります。これを修正するには、もとからあるスクリプトの名前を「Upon Opening Main」などと変更し、次にインポートしたスクリプトの名前を「Upon Opening」と変更します。カレンダーのスクリプトは、今後のステップで正常に動作させるためには「SeedCodeCalendar」ファイルにあるものと必ず同じ名前にします。

9. レイアウト(その2)

シードコードカレンダーの各レイアウトから、レイアウトのコンテンツをコピーし、既存のファイルの同名のレイアウトにペーストします。「Calendar Rows」や「Calendar Color Records」も含め、すべてのレイアウトについてこの作業をします。レイアウトを大きくする必要があるとメッセージが表示されるかもしれませんが、大きくしてかまいません。

「イベント詳細」では、レイアウトの見た目や、フィールドやボタンの追加など、好きなように編集してかまいません。「repeat」ボタン、その下に「show repts...」ボタン、画面の一番下に大きい「close...」ボタンの3つのオブジェクトだけは、このように配置してください。後でこのレイアウトをまた編集することもできますので、ここでは「Summary」、「Date」、「Time」フィールドを自分のイベントのテーブルに含まれる関連フィールドとともに並べておくだけでもかまいません。

10. レイアウトのスクリプトトリガ

スクリプトトリガを割り当てます。レイアウトに対するスクリプトトリガはレイアウトの要素をコピー&ペーストする際には移行されないため、設定し直す必要があります。設定が必要なのは2つだけですので、ご安心ください。

レイアウト:「Calendar」(トリガ1件)

イベント:OnRecordLoad

スクリプト:「Load Calendar Layout」

以下で有効:ブラウズと検索

(これを、4つのカレンダーレイアウトのそれぞれに対して設定します)

レイアウト:「Event Details」(トリガ1件)

イベント:OnRecordLoad

スクリプト:「On Event Record Load」

以下で有効:ブラウズ

設定が完了したら「Calendar Home」レイアウトに戻り、ブラウズモードに切り替えます。

11. セットアップ

11.1 カレンダーの設定

「Load Calendar Settings - On Startup...」スクリプトの編集ウインドウを開き、コメントに従って必要に応じて値を変更します。

11.2レコードのソート

「"Sort FileMaker Records...」スクリプトの編集ウインドウを開き、指示に従って、ソートのステップを自分のイベントのテーブルにあるフィールドを使うように編集して、レコードが日付/時刻の昇順でソートされるようにします。

11.3 データの割り当て

「Source No 1」レイアウトに切り替え、レイアウト上の指示に従ってフィールドをあなたの「SampleEvents」テーブルのフィールドに割り当てます。「Summary」は、ここではあなたのイベントのタイトルなどのシンプルなフィールドに割り当てます。実際に使ってからこのステップに戻り、「Summary」をmulti-line eventの表示の作成に割り当てるなど、さらに面白い使い方をしてみてください。

12. クリーンアップ

「SampleEvents」のテーブルオカレンスを、分かりやすい名前に変更します。ファイルを開くときに実行するスクリプトとして「Upon Opening」スクリプトを指定し、ファイルを開くときに実行するレイアウトを好みに応じて削除します。

13.スクリプトの実行

これで完了です。「Upon Opening」スクリプトを実行すると、イベントが「日」表示で表示されます。

ご活用ください!