カレンダーの組み込み

統合のオプション

Most folks will paste SeedCode Calendar into their file and use an events table they already have for the events they want to see in the calendar.

If you don't need to have the calendar "in" your file, you can still link the two files, pointing the calendar at your events table instead of the "SampleEvents" table it comes with. Linking in this way is much faster but means you'll have two files instead of one. (The chief disadvantage of this is that you have to have the same accounts and passwords in each file, unless you set the calendar file to auto-open with its own low access password for everyone.)

If this sounds like it might be for you, follow our instructions for the Quick Integration.

ここで解説する手順は、カレンダーに表示したいレコードを保存するテーブルがすでにあると仮定しています。テーブルがまだなければ、シードコードカレンダーの「SampleEvents」テーブルを自分のファイルにペーストし、以下の手順2は省略してください。

カレンダーに表示したいテーブルが複数あるかもしれません(または1つのテーブルに複数の日付フィールドがあるかもしれません)。現時点では、それは心配ありません。ひとつのテーブル/フィールドを設定して動作するようになってから、イベントの追加のソースを構成できます。

成功の鍵

カレンダーを統合する際(あるいはFMPのコードを別のファイルに移行する際)に最も多いミスは、実行するステップの順番です。FileMakerで新しいコードをファイルにペーストする順番には、きわめて注意が必要です。レイアウトを作ってから、そのレイアウトを使うスクリプトをペーストすれば、すべてうまくいきます。スクリプトで使われるレイアウトを作る前にスクリプトをペーストすると、コードは壊れ、解明はとりわけ難しくなります。

したがって、十分に経験のある開発者の方も、ここに記載したステップに注意深く、順番通りに従ってください。少なくとも、初めてカレンダーを統合するときには。

ステップ・バイ・ステップの手順:シードコードカレンダーを自分のファイルにペーストする

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

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

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

If you want to use the "SampleEvents" table in SeedCode Calendar as your events table, instead of a table you already have, just import it into your file in step 2 below and skip step 5.

2. フィールド

2.1

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

  • zscTimestampStartCalcNum
  • zscTimestampEndCalcNum

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

既存のソリューションには、終了日のフィールドがないかもしれません。次のステップで取り上げる、時刻のフィールドもないかもしれません(開始時刻と終了時刻)。最も簡単なのは、これらのフィールドを既存のイベントのテーブルに追加することです。こうすることで、統合が簡単になり、複数の日にわたるイベントも使えるようになります(イベントに時間を使用しない場合や1日を越えるイベントは扱わないようにしたい場合には、新たに作成したフィールドに対して自動入力の計算式が使えば必ず空欄にできることに留意してください)。

新規フィールドを作る場合は、日付のフィールドのタイプは「日付」に、時刻のフィールドのタイプは「時刻」にしてください。

2.2

次に、自分のイベントのテーブルの「TimeStart」フィールドに、オプションの「入力値の自動化」で以下の計算値を追加してください(以下の記述をそのまま、または「SampleEvents」の定義からコピーできます)。

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 ) + 1 ; 
Self )

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

2.3

自分のイベントのテーブルの「TimeEnd」フィールドに、同じ入力値の自動化の「計算値」のオプションを追加します。繰り返しになりますが、 「フィールドに既存の値が存在する場合は置き換えない」のチェックボックスにはチェックを付けないでください。イベントを深夜0時に開始できるようにするには、この自動入力のオプションが必要です。

2.4

カレンダーのガントチャート、イベントの繰り返し、メールの通知を使うのであれば、シードコードカレンダーの「SampleEvents」から、さらにいくつかのフィールドを自分のファイルに追加します。

  • z_LinkedWithinProject
  • z_MilestoneSort
  • z_Notified
  • z_Repeating_id

3. テーブル

Import three tables into your file from SeedCode Calendar: CalendarInterface, CalendarRows, and CalendarColors. (If you're using data separation, add these tables to your interface file.)

If you're using FileMaker Advanced, you can just copy and paste the three tables. If you don't have Advanced, from your file select File / Import Records... / File and then select theSeedCodeCalendar file. Select the first of the three tables to import and for the target, select "New Table". FileMaker will create the new table and calcs for you but you'll have to come back and uncomment some of the calcs that couldn't find the items needed: come back after you've imported all three tables this way and remove the leading /* and trailing */ from your calcs.

If you don't have Advanced, and that sounds like too much, we'd be happy to complete this step for you, just send us your file.

カレンダーのTo-Doリストを使いたいがTo-Doのテーブルはまだないという場合は、この時点でシードコードカレンダーの「ToDoList」テーブルも自分のファイルにインポートすることができます。名前は「ToDoList」のままにしてください。そのほうが、この後のステップが簡単です。

連絡先、プロジェクト、フェーズを入れるテーブルもあります。既存のファイルには、これらのエンティティを表すテーブルがおそらくあるでしょう。これらは、後で整理します。連絡先やプロジェクトのテーブルがなく、あったほうがよいと考えるなら、この統合をいったん中止してSeedCode Complete(英語)を見てみるといいかもしれません。豊富な連絡先やプロジェクト管理システムとすでにリンクしているカレンダーが用意されています。

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

Just as you needed to click on fields on Event Details and point them at the proper fields in your table, you'll need to do the same to the Event List layout, and the on the To-Do Details and To-Do list, if you're using those, Again, you can map the basic date, time, and summary fields now so you know the calendar is working. We have a note at the end of these instructions reminding you to come back here and finish cleaning these layouts up.

4. 値一覧

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

Here, and in what follows, you don't need to import anything to do with SampleContacts orSampleProjects as you'll likely already have these things in your file. That is, you likely have a method of selecting contacts and projects and will want to use your existing method on the Event Details layout. (However, even if you do have an existing method, creating Contacts and Projects values lists now will let the Event Detail layout find those value lists when you paste the layout into you file. We also use this Projects value list on the calendar's filters: another good reason to create them now.)

5. テーブルオカレンス

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

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

6. リレーションシップ 

6.1 リレーションシップ その1

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

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

6.5. リレーションシップ その2

ガントチャートを取り除く場合、この項目は飛ばしてください。

If you'll be using the Gantt Chart you'll want to connect a few more things in the graph. First, create a relationship from CalendarRows to SampleEvents like this, where "id" is the primary key (the unique ID) in your events table. :

Then attach SampleEvents to your Contacts, Projects, and possibly your Phases table occurrences, as shown here:

It probably make sense to create new instances of these to attach to SampleEvents, but you don't have to. You'll likely want to rename your table occurrences to "Sample..." for now so that items pasted in later will line up. (Big time saver) If you don't have a Phases table, don't worry: phases are completely optional.

7. レイアウト その1

既存のファイルに空白レイアウトをいくつか作ります(この後のステップで、この空白レイアウトにコンテンツをペーストします)。シードコードカレンダーのレイアウト1つに対して、既存のファイルに1つレイアウトを作ります(ユーザに対して表示されるレイアウトはいくつかに限られますが、すべてのレイアウトが必要です。ただし「Demo Expired」は除きます)。以下のリストの先頭のレイアウトを作成し、それを複製して他のレイアウトを作るのが最も簡単です。

注意:以下に示すレイアウトと同じ名前のレイアウト(またはレイアウトフォルダ)が存在しないということが重要です。同じ名前のものがすでにある場合、この作業を続ける前にレイアウトやフォルダの名前を変更してください(そうです、FMPのデザイン関数ではではレイアウトとフォルダが区別されないので、「Calendar」という名前のフォルダでも問題が起きます)。

この最初のレイアウトの作り方を解説します。レイアウトを作ってから「レイアウト設定」ダイアログを開き、「アクティブ時にフィールドのフレームを表示」のチェックをはずします。クラシックのテーマを使用します。また、「クイック検索を有効にする」のチェックもはずします(クイック検索機能を使ってカレンダーを検索したい場合は、「イベントリスト」レイアウトで有効のままにしておくか、またはfmSearchResults(英語)を使ってクイック検索を拡張できます。以下の設定が終わり、カレンダーを開いた後で、この設定をします)。複製して名前を変更したレイアウトは、「レコードを表示」ポップアップメニューでテーブルの関連付けを以下のリストの通りにしてください。

ここでも、連絡先がない場合は、サンプルの連絡先のプロジェクトやフェースのレイアウトを追加する必要はありません。ただし、「Calendar Developer」と「Additional Skins」フォルダの中のレイアウトは作る必要があります。

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

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

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

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

To-Doリストを使用する場合は、 「To-Do Details」と「To-Do List」レイアウトも追加してください。

8. スクリプト

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

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

9. レイアウト その2

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

FileMaker 12ではレイアウトの高さは自動で調整されますが、レイアウトの幅は調整されません。手動でレイアウトの右端を動かして、シードコードカレンダーのファイルのレイアウトと同じ幅に合わせる必要があります(ほとんどのレイアウトでは、最も右にあるオブジェクトの端に合わせます)。

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

Just as you needed to click on fields on Event Details and point them at the proper fields in your table, you'll need to do the same to the Event List layout, and the on the To-Do Details and To-Do list, if you're using those, Again, you can map the basic date, time, and summary fields now so you know the calendar is working. We have a note at the end of these instructions reminding you to come back here and finish cleaning these layouts up.

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

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

レイアウト:「Calendar Home & Docs」(トリガ1件)
トリガ:「OnRecordLoad」(ブラウズモード)
スクリプト:「Load Home Layout」

レイアウト:「Calendar」(トリガ1件)
トリガ:「OnRecordLoad」(ブラウズモードと検索モード)
スクリプト:「Load Calendar Layout」
(「Calendar - no Side Menu」も同様にしてください。「Calendar iPad」と「Calendar iPad - no Side Menu」レイアウトも同様です)

レイアウト:「Event Details」(トリガ1件)
トリガ:「OnRecordLoad」(ブラウズモード)
スクリプト:「On Event Record Load」

レイアウト:「To-Do Details」(トリガ1件)
トリガ:「OnRecordLoad」(ブラウズモード)
スクリプト:「On Event Record Load」

レイアウト:「Repeat Options」(トリガ1件)
トリガ:「OnRecordLoad」(ブラウズモード)
スクリプト:「Set Initial Repeat variables」

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

11. セットアップ

自分に合うカレンダーにしていく段階です。カレンダーの動作とデフォルトの設定を制御するスクリプトを編集します。これらのスクリプトをじっくり通読しましょう。すべての設定を変える必要はありませんが、多くの箇所を変えていくことになるでしょう。ここで時間をとってどのような設定が使えるのかを覚えておくのは有用です。

11.1 カレンダーの設定

「Load Calendar Settings - On Startup ...」スクリプトと「Load Source Settings at Startup...」スクリプトの編集ウインドウを開きます。スクリプト全体にわたり、コメントに従って必要に応じて設定やフィールドの割り当てを変更します。

11.2 データの割り当て

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

A couple tips on field mapping:

  • Events with just a single date should have a start date: if your event has just an end date the calendar will fail. The same goes for times: if there is only one time, make it the start time.
  • Don't use calcs for things like the dates, times, or resources. The calendar wants to edit these values when you drag items around, and it can't edit calcs. Use auto-enter calculations instead if you must.

12. クリーンアップ

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

日本語補足:テーブルオカレンスを変更したら、11.1のスクリプト内でも変更する必要があります。

13. スクリプトの実行

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

次のステップ

いったん動作するようになったら、おそらくいくつかの設定に戻って、カレンダーをイベントに割り当て、さらに完璧に使えるようにしたいと考えることでしょう。さらに設定する箇所をいくつか挙げます。

  • Event Details ここに、割り当てられていないフィールドがいくつか残っているかもしれません。イベントから関連する連絡先やプロジェクトにジャンプするための矢印やボタンをもう一度チェックしたいということもあるでしょう。これについて詳しくは「連絡先へジャンプする」を参照してください。
  • Event List ここにも、割り当てられていないフィールドがいくつか残っているかもしれません。また、レイアウトモードに切り替え、イベントのリストのサマリの部分ももう一度確認してください。
  • To-Do DetailsTo-Do List To-Doリストを使用する場合、この詳細とリストのレイアウトでもおそらくフィールドの割り当てをいくつか飛ばしているでしょう。