複数のテーブルから同一のカレンダーにレコードを表示するには、どのようにしますか?
概要
DayBackでは、まったく関連のないテーブルのイベントを1つのカレンダー上の含めることができます。カレンダーの「データソース」にあるイベントということです。そのため、電話、ミーティングなどの予定を保存しているイベントのテーブルのソースは、1つかもしれません。そして、カレンダーに仕事の期限を表示するテーブルを2番目のソースとして使う場合もあります。
カレンダーにはサンプルとして2つめのソース、「To-Do List」が設定されていて、複数のソースの動作を確認できます。この2つめのソースは、カレンダーの左方のサイドバーで「カレンダー」タブを開いてオン/オフを切り替えることができます。
同一のテーブルから複数のソースを設定することもできます。たとえば、仕事のテーブルに期限を保存し、電話をかける日付も仕事のテーブルに保存してあるとしたら、これらを2つの別々のソースにすることもできます。
複数のソースがあると、描画するレコードが多くなり、検索のリクエストも多く実行されるために、カレンダーの処理速度に影響を及ぼすことがあることに注意してください。一度に表示するイベントを少なくすれば、速くなります。したがって、ソースはいくつでも作成できますが、デフォルトですべてをいっぺんに表示することがないようにしてみてください。
新規イベントを作る際にどのソースを使うか、カレンダーはどのようにして決めているのですか?
まず、表示されているソースが1つだけの場合、イベントはそのソースに作成されます。
複数のソースが表示されている時は、見えているうちのいずれかが「新規イベントのデフォルトのソース」であるかどうかが確認されます。これに該当する場合、そのソースにイベントが作成されます。このデフォルトのソースは「Load Calendar Settings - On Startup --- Edit Configuration Here ---」スクリプトの最初の方で指定できます。
デフォルトのソースが表示されていない場合は、イベントは表示されている1つ目のソースに作成されます。
以上が、特に何も指定しないでイベントを作成する、つまりカレンダーをダブルクリックする場合の動作です。ただしカレンダーには独自の「+」ボタンを作るAPIがあり、指定した任意のソースにイベントを作成できます。これを活用して、たとえば「新規ToDo」ボタンを作ることができます。「Create Edit Delete Event ( SourceNo )...」スクリプトをコールするボタンにするということです。
このスクリプトの先頭に書かれているコメントに、新規イベントの作り方が詳しく記載されています。
FileMakerの2番目のソースを作成する
カレンダーの各ソースは、レイアウトによって表されています。カレンダーのサンプルファイルのレイアウトのうちのいくつかを見ると、そのことが分かります。「Source No 1」、「Source No 2」という名前のレイアウトがそれです。新たに作成するソースには、このような名前のレイアウトが必要です。
新たにFileMakerのソースを作成する方法は、以下の通りです。
1 「Source No 1」レイアウトを複製して、レイアウト名を「Source No 3」(または既存のレイアウトに続く連番の次の番号)と変更します。
2
3 レイアウトモードで作業をしていきます。「レイアウト設定」ダイアログで、新たに作ったレイアウトが使用するテーブルを、表示したいレコードのテーブルに変更します。ここでは例として、「Orders」という名前のテーブルと仮定します。
4
5 もともとある「イベント」テーブルを「Orders」テーブルの子にすると、注文に対して複数のイベントを表示できることに注意してください。1つの注文に対して1つの事項だけをカレンダーに表示するのであれば(たとえば期限など)、「Orders」自体を1つのソースにするのが最適です。
6
7 レイアウトモードで作業を続けます。設定の各タブで、詳細を入力したりソースのフィールドを割り当てたりします。設定できたらブラウズモードに切り替え、各タブでエラーが発生しないか確認します。最初にカレンダーの組み込みをする際に、イベントのテーブルにどのようにフィールドを追加したかを覚えていますか?必要なフィールドをすべて揃えるために、このテーブル(ここでは「Orders」)に同じフィールドを追加する必要があります。必ずここでフィールドを再確認しておきましょう。構築の手順のステップ2を見てこれらのフィールドを思い出し、ステップ2.1を見て必要な計算式を編集したことをおさらいしておいてください。 また、「TimeStart」フィールドに、以下のように計算値が自動入力されるようにしておくとよいでしょう(開始時刻のフィールドがない場合には、作成してください)。「TimeEnd」も同様です。フィールドを作成し、次の自動入力の計算式を使用します。
8 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 )
9 「フィールドに既存の値が存在する場合は置き換えない」のチェックボックスにはチェックを付けないでください。イベントを深夜0時に開始または終了できるようにしたい場合には、この値の自動入力のオプションが必要です。 「DBk_WebViewerSource」フィールドを編集する時は、先頭の変数でこのデータがどのソース番号のものかを宣言することに注意してください。必ず、自分のテーブルのものに変更します(サンプルでは「3」になっています)。
10
「Load Calendar Settings - On Startup --- Edit Configuration Here ---」スクリプトの編集ウインドウを開き、「Which sources are active by default」(デフォルトでアクティブなソースはどれか)のコメントを見つけます。自分のソースを起動時にカレンダーに表示したい場合は、その番号をこのコメントの後にあるList () 関数に追加します。ここで何もしない場合、自分のソースは「ソース」タブに表示されますが、このソースのイベントはユーザがソースをクリックして選択するまではカレンダーに表示されません。
11
12 「Load Source Settings at Startup --- Describe Your Sources Here ---」スクリプトを編集します。このスクリプトには、ソースごとに十数行がまとまったブロックがあります。既存のブロックをスクリプトにコピー&ペーストして、新しいソースのためのブロックを作ります。すでに作られているように、ソースのレイアウト名をテストするところからブロックが開始するようにしてください。すなわち、「Source No 3」をテストします。その後、ブロック内の各行を編集します。スクリプト中のコメントを参考にしてください。
これで完成です! 最初のソースに設定したように、カスタムアクション(カレンダーのイベント詳細のポップオーバー内からこのソースでの動作をさせるためのボタン)を追加することもできます。アクションの追加については「カスタムアクション」を参照してください。
デフォルトで表示されるソースはどのようにして指定しますか?
「Load Calendar Settings - On Startup ....」スクリプトの編集ウインドウを開いて、「Which sources are active by default(デフォルトでアクティブなソースはどれか)」のコメントを見つけます。起動時に自分のソースをカレンダーに表示させたい場合は、このコメントの後にある「List ()」関数にソースの番号を追加します。この設定をしない場合、「カレンダー」タブで使用可能なソースとして表示されますが、そのソースのイベントはユーザがソースをクリックして使用するまではカレンダーに表示されません。
1つのベーステーブルから複数のソースを設定できますか?
できます!たとえば「業務」や「プロジェクト」のテーブルから、異なる日付/時刻のセットを表示することができます(ただし多くの場合、関連テーブルを使って複数の日付を扱う方が有効です。詳しくは「簡単な構築(紐付け)」のステップ1を参照してください)。
ソースをまだ追加していなければ、「構築」の手順に従って、日付/時刻のフィールドの1つ目のセットを使ってソースを追加します。動作しているソースで、「DBk_WebViewerSource」フィールドを2回複製します(2つのソースに1つずつ使用します)。「Source Number 2」の「To-Do List」セットで、複製したフィールドを「DBk_WebviewerSource1」と「DBk_WebviewerSource3」という名前にします。
すでに1つ目のソースはセットアップされているため、「DBk_WebviewerSource1」は何も変更する必要はありません。「DBk_WebviewerSource3」の計算式で、適切な日付と時刻のフィールドを割り当てます。「sc_sourceNumber」変数が、新しいソースの番号と一致するようにしてください。次に、もともとあった「DBk_WebviewerSource」フィールドを、Case文で以下のように変更します:
Case (
$sc_SourceNo = 1 ;
DBk_WebViewerSource1 ;
$sc_SourceNo = 3 ;
DBk_WebViewerSource3 ;
)
フィールドをセットアップして2つ目のソースの追加を完了させます。これは別のテーブルからソースを追加するのとよく似ています(ただし少しだけ簡単です)。「Source No 1」レイアウトを複製して、レイアウト名を「Source No 3」と変更します。このソースに応じて日付と時刻のフィールドを割り当てます。このソースには同じベーステーブルオカレンスが使用されているため、その日付にだけ関連する「ステータス」や「リソース」などのフィールドがある場合を除いて、その他のフィールドは割り当て直す必要はありません。
最後に、上述のステップ4と5で解説したように「Settings」スクリプトをアップデートします。そして「Upon Opening」スクリプトを実行します。これで、このテーブルのレコードが、カレンダーに2回表示されるようになります!
ソースを削除したり、特定のユーザにのみ表示することはできますか?
「Source No 2」レイアウトの名前を「Unused No 2」に変更するだけです。FileMakerを終了してDayBackを再度開きます。
少し混乱させてしまうかもしれません。ソースについての記述はグローバル変数に保存されており、いったん定義したあとは、ソリューションを閉じて再度開くまで保持されます。一方、DayBackの「Load Source Settings at Startup --- Describe Your Sources Here ---」スクリプトでは、「Source No」という名前を含むレイアウトを探します。そのため、レイアウト名を変更することで、簡単に迂回し、なおかつコードは残しておくことが可能です。あとで簡単に戻せます。
もし、特定のユーザにのみ表示させたい場合には、「"Load Source Settings at Startup --- Describe Your Sources Here ---」スクリプトの中で、「Source No 2」のセクションをIf()文に含めることで、そのソースは特敵のユーザにのみ表示されます。
原文:MultipleSources|https://www.seedcode.com/pmwiki/index.php?n=DayBackForFileMaker.MultipleSources
コメント
0件のコメント
サインインしてコメントを残してください。