2006/03/29

「文書が見つかりません」に対応する

DominoでWebアプリケーションを作成したとき、ビュー上に「文書が見つかりません」と、大きく表示されることがよくあります。これは、文字通り、ビューに文書が存在しない場合に表示されます。

これはDominoの標準機能であり、開発者が何もしなくても表示されるのですが、これは以下の2点で問題となることがあります。

  • メッセージは自動的に表示され、開発者はメッセージをカスタマイズすることが出来ない。表示するのをやめることも標準機能では出来ない。
  • メッセージが非常に大きく目立つ。
これに対応するため、長いこと多くの開発者たちが解決方法を検討してきました。

さて、今回に限った話ではありませんが、このように「Dominoが勝手にやってしまうことを制御する」ためには、主に2つのアプローチがあります。

  1. Dominoがそれを勝手に生成しないよう、極力工夫をする
  2. Dominoが生成してしまったものは仕方ないとし、生成されてしまったものの表示をいかにコントロールするかを工夫する
一言でいえば、上記の1.はサーバーサイドで、2.はクライアントサイドで何とかしようというアプローチです。

今 回の問題を含め、古典的アプローチとしては主に1番目の解決方法が行われていました。例えば、以下のLDD Todayの文書ではこの問題に対する解決策が提示されています。これは、「存在しなかったら、ビューを隠すようにする」というサーバーサイドでの工夫に なります。

「文書が見つかりません」というメッセージの置き換え

一方、サーバーサイドで出来ることには、やや限界があります。今回はこれでもよいですが、ビューを開くたびに、@Dbcolumn が動くのも、ちょっと気にかかります。

そこで登場するのが、クライアント側のテクノロジ(CSS、DHTML)です。
これを使って見事に解決した例が、以下の記事になります。(英語)

Using the DOM to replace "No documents found"

ここで、ポイントとなっているのは、この「文書が見つかりません」というのは、常に h2タグ に囲まれて生成されているということです。(h2タグというのは、見出し2レベルのタグであり、だから、文字サイズが大きい)

すなわち、このビューページの中で、h2 タグがこれしか存在しなければ、h2タグの中身を問答無用に書き換えてしまおうというアプローチです。(事実、よほどパススルーHTMLなどで直接指定しない限りは、h2タグは使われていないと思います)

最初のアプローチとしては、 h2 タグ部分を非表示スタイル指定してしまうという方法です。この方法は文字列を書き換えるのではなく、見えなくしてしまう方法です。非常に簡単です。
第二のアプローチとしては、JavaScriptのDOM機能を使って、h2タグの中身を上書きしてしまうという方法です(DHTMLともいいます)。この場合は、文字列までもがコントロール可能になります。

な かなか JavaScript でこのようなことを行うのは、まだメジャーではないけれど、Ajax全盛期において、少しずつ主流になってくると思います。なお、クライアントサイド側で の調整は、ブラウザ依存があったり、ユーザー側がCSSやJavaScriptをオフにすることで全て無効化されてしまうため注意が必要です。また、クラ イアント側でのアプローチも、Dominoが生成するHTMLに依存するため完璧なコントロールが出来るわけではないですが、少なくとも今回に関しては見 事に機能するという一例になります。

コードの詳細は、紹介した notestips.com のサイトにて記述がありますので、英語ではありますが是非読んでみて下さい。

0 件のコメント: