【AD入門:002】ゾンビビューを撃退(2)
さて、ゾンビビューができてしまう理由を探ってみましょう。
Notesのビューは、DB内の文書を一覧形式で表示させることにより、ユーザーに目的の文書を簡単に探し出すことができる工夫が施されています。条件に一致する文書だけが表示されるようにする「ビューの選択式」、表示されるデータを決める「列式」、表示される順序を決める「ソート」の設定などにより、アプリケーション開発者はビューを作成します。
しかし、ビューをユーザーが利用するたびに、文書を抽出し、表示する内容を決めて、ソートしていては表示までに時間がかかり、効率も悪くなります。
そこで、Notesではあらかじめビューに表示する文書を抽出し、それをビュー索引としてDB内に格納しています。一度ビューの索引が作成されると、DB内の文書に変化がない限り、再利用が可能なためビューの表示が効率良く行えます。もし、文書が追加、更新、削除されると、Dominoサーバー上でデフォルトで稼働しているUpdateタスクが、自動的にビューの索引を更新する仕組みになっています。
もし、ユーザーがNotesクライアント上でビューを表示したまま放置し、そのDBの文書が変更されたりして、ビュー索引が更新されていると、画面に表示されている情報が古くなってしまいます。
そこで、ビューのプロパティで、ビュー索引が更新されたときの動作を決めています。デフォルトは、「インジケータを表示」が選択されているので、ビューの左上に更新をしらせるボタンが表示されます。つまり、ユーザーがインジケータボタンをクリックした時点で、サーバー上のビュー索引をもとにクライアント画面を再表示します。
さて、前回紹介したビューの選択式をもう一度見てみましょう。
SELECT @Adjust(@Today;0;0;-7;0;0;0) < @Created
この選択式の中で、@Todayという関数を使っていますが、これは現在の日付を取得する関数です。取得するもと情報は、システムの時計であるため、いま取得した値は、次の瞬間ではもう違う値になっているのです。つまり、一度抽出した条件は、次の瞬間には値が置き換わったものと見なされ、またビュー索引を作成しなおさないといけないのです。
そのため、インジケータを押して画面を更新しても、すぐに新しいビュー索引ができてしまい、インジケータでそれを知らせるため、ゾンビビューができてしまいます。
ゾンビビューを表示するようにNotesクライアントで表示を切り替えると、索引が古いと判断したビュー索引は破棄され、再度索引を作成し直してから画面に表示されるため、索引が作成されるまでの間、画面左端に稲光マークが点滅して、表示されるまでに大幅な時間がかかってしまいます。
◎鉄則
Notesでは、@Todayや@Nowなどの日時関数は、ビューの選択式や列式で使用することは避けるべし
次回は、図で少しまとめてみましょう。
');
})();
//-->
Notesのビューは、DB内の文書を一覧形式で表示させることにより、ユーザーに目的の文書を簡単に探し出すことができる工夫が施されています。条件に一致する文書だけが表示されるようにする「ビューの選択式」、表示されるデータを決める「列式」、表示される順序を決める「ソート」の設定などにより、アプリケーション開発者はビューを作成します。
しかし、ビューをユーザーが利用するたびに、文書を抽出し、表示する内容を決めて、ソートしていては表示までに時間がかかり、効率も悪くなります。
そこで、Notesではあらかじめビューに表示する文書を抽出し、それをビュー索引としてDB内に格納しています。一度ビューの索引が作成されると、DB内の文書に変化がない限り、再利用が可能なためビューの表示が効率良く行えます。もし、文書が追加、更新、削除されると、Dominoサーバー上でデフォルトで稼働しているUpdateタスクが、自動的にビューの索引を更新する仕組みになっています。
もし、ユーザーがNotesクライアント上でビューを表示したまま放置し、そのDBの文書が変更されたりして、ビュー索引が更新されていると、画面に表示されている情報が古くなってしまいます。
そこで、ビューのプロパティで、ビュー索引が更新されたときの動作を決めています。デフォルトは、「インジケータを表示」が選択されているので、ビューの左上に更新をしらせるボタンが表示されます。つまり、ユーザーがインジケータボタンをクリックした時点で、サーバー上のビュー索引をもとにクライアント画面を再表示します。
さて、前回紹介したビューの選択式をもう一度見てみましょう。
SELECT @Adjust(@Today;0;0;-7;0;0;0) < @Created
この選択式の中で、@Todayという関数を使っていますが、これは現在の日付を取得する関数です。取得するもと情報は、システムの時計であるため、いま取得した値は、次の瞬間ではもう違う値になっているのです。つまり、一度抽出した条件は、次の瞬間には値が置き換わったものと見なされ、またビュー索引を作成しなおさないといけないのです。
そのため、インジケータを押して画面を更新しても、すぐに新しいビュー索引ができてしまい、インジケータでそれを知らせるため、ゾンビビューができてしまいます。
ゾンビビューを表示するようにNotesクライアントで表示を切り替えると、索引が古いと判断したビュー索引は破棄され、再度索引を作成し直してから画面に表示されるため、索引が作成されるまでの間、画面左端に稲光マークが点滅して、表示されるまでに大幅な時間がかかってしまいます。
◎鉄則
Notesでは、@Todayや@Nowなどの日時関数は、ビューの選択式や列式で使用することは避けるべし
次回は、図で少しまとめてみましょう。