ノーツ・アプリケーションを Web に移植するということは、数行の HTML コードをフォームやビューに加えるだけというような簡単なものではありません。ノーツ・アプリケーションでは、ドミノ
サーバーが実行する部分とノーツで実行する部分に分かれていますが、これはブラウザー・ベースのアプリケーションとは大きく異なります。これは、ノーツ・クライアントの能力が
Web ブラウザーと大きく異なっており、また、ブラウザーとサーバー間で使用するプロトコルも異なるためです。
Web ブラウザーとブラウザー・サーバーのアーキテクチャーの限界は問題の根本的要因になります。これらの問題について、アプリケーションの機能をブラウザーで完全に再現できるかどうか、また、再現できるなら、どのようにすべきかという点を考慮しなければなりません。機能以外にも、クライアントとサーバーの両者のパフォーマンスや、セキュリティーやアクセス権、そして使いやすさなど、その他の要素も問題となります。
誰があなたのアプリケーションの Web 上でのユーザーになるのでしょうか?ノーツ・クライアントを利用していたときの人々と同じでしょうか?まったく新しいユーザーでしょうか?もしくはそれの両方でしょうか?アプリケーションは
Web 上だけで実行するのでしょうか?それとも Web とノーツのユーザーの両者を扱うのでしょうか?
Web ユーザーはどこにいるのでしょうか?アプリケーションは社内のイントラネットからしかアクセスできないのでしょうか?それとも、Web
全体からアクセスできるようにするのが目標でしょうか?ユーザーに必要なアクセス権はどういったものでしょうか?また、これらは
Web アプリケーションにとってふさわしいでしょうか?
アプリケーションを実行する
これらの質問の答えに留意し、アプリケーションの分析に移りましょう。まず、あなたのノーツ・アプリケーションをブラウザーから実行しましょう。できるだけアプリケーションの機能を完全に見ましょう。できるなら、フォームを使って新しい文書の作成や保存をします。結果を考察し、エラーを記録します。そして、いったん逆戻りし、2つの主要なブラウザーでアプリケーションを比較します。つまり、あなたのユーザーが使用するであろう
Internet Explorer と Netscape Navigator の2つのブラウザーでアプリケーションを実行し、両者の違いを記録します。この実地評価で、アプリケーションを改善する変更点を発見し、問題点を見つけることができるでしょう。
フォーム
各フォームはブラウザーから正常に見えるでしょうか?グラフィックは正しく表示され、フィールドやフィールド・ラベルは揃っているでしょうか?ブラウザーによって相違点は無いでしょうか?ノーツ・ユーザーや
Web ユーザーのために別個のフォームやサブフォームを作成することで問題は解決できたでしょうか?フォームにはロータス
スクリプトが含まれていないでしょうか?ブラウザー用に、ロータス スクリプトを
JavaScript に置き換えなければなりません。既存のエージェントは Web でも利用できるでしょうか?検索文字列を処理するバックエンドのエージェントを書き直したり、もしくはそれらをスケジュールされたエージェントに変更する必要はあるでしょうか?
ビュー
各ビューは Web 上で正しく動作するでしょうか?すべての列は表示されるでしょうか?文書を選択できますか?そうでなければ、HTML
のリンクを作成するためにコードを付け加える必要があるでしょうか?アプリケーションで要求されるすべてのアクションは利用できるでしょうか?
ユーザー・インターフェースとグラフィック
アプリケーションのユーザー・インターフェースやグラフィックのデザインは
Web アプリケーションとしてユーザーの意図と一致するでしょうか?アプリケーションの既存の操作方法はブラウザーで正常に動作するでしょうか?そうでなければ、ノーツ・クライアントの機能の欠落を埋め合わせるために、さらに指示の選択を加える必要があるでしょうか?ノーツでは不必要だった、ホームページやセクション・ページやヘルプ・ページへのアンカー・リンクが
Web では必要になるでしょうか?
Web や ノーツのために重複フォームを利用する
段落非表示のプロパティーはフォーム全体に作用します。ノーツ・クライアント用とブラウザー用に2つのフォームを作成し、それぞれに異なる名前をつけますが、別名は同一にします。そして、段落非表示のプロパティーを設定して、1つはノーツ・クライアントからは不可視になり、もう1つが
Web ブラウザーから不可視になるようにします。フォームをオープンする際に別名を用いることで、ドミノはユーザーのクライアントに応じて、正しいフォームをオープンできます。
Web ページを表示したいだけというような場合に、フォームをオープンする際のパフォーマンスへの影響を減らす方法として、ページのすべての
HTML コードをフィールド名つきの HTML にします。ドミノはフォーム上のフィールドを検索するときに、フォームのチェックや計算を行わずにブラウザーにフォームの内容を送信します。また、非常に大きな
HTML をドミノ・データベースに格納するために HTML フィールドを使用できます。フォームは
HTML フィールド (テキストまたはリッチ・テキスト) と共に使用してください。そして、HTML
コードをコピー・アンド・ペーストして、文書を保存し、リンクやパスの情報の修正をしてください。HTML
フィールドは計算もできますし、編集することもできます。あとでユーザーが編集できないようなページを作成したい場合は計算結果フィールドを用いてください。HTML
のページが含まれている文書を大量に作成するフォームを使用している場合は、編集可能フィールドを使用してください。
デフォルトでは Web エージェントはエージェントの作成者 (エージェントを保存したユーザー)
の ID で実行されます。Web ユーザーの ID でエージェントを実行するには、〔エージェント〕プロパティー・ボックスの〔設計〕タブをクリックし、Web
アクセスのセクションで〔Web ユーザーとしてエージェントを実行〕を選択します。
Web ユーザーがエージェントをこのプロパティーを設定して実行した場合に、ドミノはユーザーに名前とパスワードを要求し、データベースのアクセス制御リストから権限に違反していないかどうかをチェックするため、このオプションを利用することでセキュリティーを強化できます。
Print ステートメントを使用してエージェントから URL の参照や HTML ページの生成ができます。リダイレクトのフォームは、WebQueryOpen
イベントでは動作しませんが、WebQueryClose イベントからは動作します。これを、確認情報のユーザーへの送信やエージェントの実行結果の表示に使用することができます。
アプレットを使用することで Web ユーザーにノーツ・クライアントと同様のアクション・アイコンを見せることができます。画面よりもアクション・バーが大きな場合は、アクション・バーをスクロールすることができます。ノーツでは、アクションにはドロップダウン・メニューがあり、ユーザーがメイン・アクションをクリックしたときに、2段目の小さなボタンとして出現します。
このビックリ箱のようなインターフェースは、うまく設計された Web アプリケーションのような見た目の魅力がありませんし、たとえば、ユーザーが複数の文書を選択できるというような、ノーツ・アプリケーションで頻繁に利用される機能をいくらか提供しているだけです。
HTML と JavaScript でビューをカスタマイズする
幸運にも、カスタマイズすることで、ビューをより Web ライクで機能的にすることができます。最も基本的な改良として、ページにビューを埋め込んだり、HTML
コードを書き足すといったことが考えられます。以下に先ほどと同じビューがページに埋め込まれている様子をお見せします。
また、アプリケーションでは、1つのビューしか表示できないという制限もありません。ビューを複数のフォームやページに埋め込み場合、以下のビューの設定にしたがってオブジェクトのプロパティーを設定し、〔Java
アプレットを使用〕とするか、上書きして HTML として表示することもできます。デザイナーで埋め込みビューを〔ビュープロパティを使用〕に設定するには、ビューが埋め込まれているページをオープンし、〔埋め込みビュー〕プロパティーを編集します。
ビュー・アプレットは、複数文書の選択をサポートしています。これにより、ユーザーがエージェントで文書の一群を選択する必要がある場合でも、Web
アプリケーションに移行することができます。ビューをページに埋め込む場合、サーバー上のエージェントで処理するために、選択した文書の
ID のリストを提出するホットスポットやボタンを作成できます。これを実現するには
LiveConnect と呼ばれるプログラム技術が必要になります。これは、Internet
Explorer や Netscape Navigator、ノーツ・クライアントに組み込まれています。LiveConnect
により、Java アプレットのような他の言語で記述されたコンポーネントにJavaScript
からアクセスできるようになります。他のドミノの Java アプレットのように、ビュー・アプレットはアプリケーションの
JavaScript から指定できる API (Application Programming Interface) を備えています。ビュー・アプレット内で選択した文書の
UNID (Universal ID) のリストを作成し、このリストをサーバー上のエージェントに渡すというようなコードの例は、Lotus Technology Learning Center の「Getting a handle to documents selected in a view applet」という記事や、BinaryTree
社提供の「JavaScript lessons」シリーズをご覧ください。
アクション・バーの作成
アプリケーションでアクションのカスケード・メニューを使用する場合は、一般に
Web のビューやページでアクション・バー・アプレットを有効にすると思います。このアプレットは、以下の画面のように、アプリケーションのアクションを
HTML ページの上部にあるボタンの列に加えます。アクションにサブ・メニューがある場合、アプレットは最上部の項目がクリックされると小さなボタンの列を表示します。アクション・バー・アプレットをより有効活用するには、上述の
「フォームに関するヒントとテクニック」 のセクション 「エージェントとアクション」
をご覧ください。
Web ブラウザーでは、空欄に書き込んでユーザーからデータを収集するという最も基本的な手段以外のほとんどすべてにおいて、さまざまな制約があります。データ形式は制限されており、リッチ・テキストやファイルのアップ・ロードといった、ノーツの開発者やユーザーが当然のごとく使用している機能についても注意を払う必要があります。
R5 では、ブラウザーからのデータの取得に関して多くの機能が追加され、ノーツ・クライアントにさらに近づきました。フォームにリッチ・テキストのフィールドがある場合、フォームが
Web から編集されたことを特定し、リッチ・テキスト・フォーマットの変換をサポートするためにJava
エディター・アプレットが起動します。
中間結果の扱い
ノーツ・クライアント用のアプリケーションと Web ブラウザー用のアプリケーションの最も大きな違いの1つとして、中間結果の取り扱いが挙げられます。Web
ブラウザーと Web サーバーのやりとりはかなり制限されています。ブラウザーはサーバーに
URL の要求を出し、サーバーは要求された URL の内容をブラウザーに返します。要求された
URL は HTML のページかもしれませんし、サーバーでのアクションかもしれません。次に、HTML
のフォームがどのように動作するか説明します。クライアントは、変数名や値を含んだ検索文字列や
URL をサーバーに送ります。サーバーは検索文字列の内容を処理するスクリプトを確認します。
これとは対照的に、ノーツのフォームはより柔軟で、中間結果を持つことができます。アプリケーションで
@DbLookup 式を用いると、ユーザーはリストから値を選択でき、フォームをオープンするときに、その値を別の計算で用いることができます。これは
Web ブラウザーでは不可能なことです。Web ブラウザーでも同じような結果を得るためには、ユーザーが値をもつ文書を選択し、この文書の
ID をサーバー上のエージェントに渡して、エージェントがその値を調べ、計算を行い、新しい
HTML のページをユーザーに送り返すということを行います。
CGI 変数
ノーツでは開発者が簡単に利用できる多くの環境データがあります。もしユーザーの
ID を特定したい場合は、@UserName 式を用いるだけで済みます。@Author や @DbName、@ServerName
などを用いることで、アプリケーションの現在の環境に関する他の情報にも簡単にアクセスできます。ブラウザー上のアプリケーションでも同じような情報を利用できますが、そのためには、特別な手続きを取らなければなりません。
アプリケーションをノーツ環境から Web に移行できたので、ユーザー・インターフェースの設計に関する2つの点に挑戦しましょう。1つは、ノーツにあるような多くの特徴や機能に相当する部分が
Web ブラウザーには欠けているため、実際には使い勝手が悪くならなくても、使い勝手に関しては、あまり高い期待は得られないことです。それに対して、アプリケーションを本気で使用してもらうには、Web
ユーザーのグラフィックのデザインや視覚的なインパクトに対する期待を満たす必要があります。特にこれは、アプリケーションやナビゲーションに取り組む必要があります。
R5 では、現在ブラウザーにあるような多くの進んだ機能をサポートしているため、HTML
や JavaScript に詳しいほど Web ライクなアプリケーションを作成できます。ダイナミック
HTML を用いてレイヤーを使用したインターフェースを持つ Web サイトに関心があれば、たとえば、Iris
Today の「新しい Web 技術:ダイナミック HTML をドミノで利用する」には DHTML を用いたドミノ・アプリケーションのレイヤー・インターフェースの作成方法が紹介されているので、それをご覧ください。
しかし、ノーツ・アプリケーションを Web アプリケーションに変更するのに DHTML
について知っておく必要はありません。DHTML の基本をマスターし、うまく使えばいいわけです。そして、R5
が備えている視覚に関する機能を有効活用します。
配置の調整に表を使用する
Web ページで、構成要素の配置を調整するには表を用いるのが最も良い方法と言えます。HTML
の経験があれば、フィールドやテキスト、グラフィックのような構成要素を適切に並べるのは難しいと感じるでしょう。配置を簡単にするために、このような構成要素をフォーム上の表に配置するという作業がアプリケーションをブラウザーに移植する際に必要になるでしょう。
FIELD CheckEmployee := @If(First = "" | Last = "";"<font
face=arial size=4color=ff0000><b>You must enter your first and
last name<br>beforesubmitting this document";"");
FIELD CheckCategory := @If(Category = "";"<font face=arial
size=4color=ff0000><b>You must choose a category<br>for
this item";"");
FIELD CheckItem := @If(First = "" | Last = "";"<font
face=arial size=4color=ff0000><b>You must enter a a name<br>for
this item";"");
FIELD CheckDescription := @If(First = "" | Last = "";"<font
face=arial size=4color=ff0000><b>You must enter a description<br>for
this item";"");
扱いやすいロール・オーバー・ボタン
イメージ・リソースはアプリケーションをより Web ライクにするのにR5 の簡単な使用方法の例でしょう。ドミノでは、マウスが上を通過したときに状態が変わるロール・オーバー・ボタンへ、用意された画像リソースを自動的に変換できます。グラフィック・エディターを用いて、グラフィック間に1ピクセルの隙間を空けた単一の画像を編集します。
Web からのアクセスに対しては、ユーザーに1レベルのアクセス権に限定し、ノーツ・クライアントからのアクセスに対しては、通常のアクセス権を与えたい場合、以下の画面で表示されているドロップダウン・リストのように〔アクセス制御リスト〕の〔詳細タブ〕にある〔Web
ユーザーによるアクセスの上限〕を設定します。
たとえば、ここで〔読者〕のアクセス権限に設定すると、すべての Web ユーザーは、ノーツ・クライアントからアクセスするときには〔作成者〕や〔編集者〕のアクセス権を持っていても、〔読者〕のアクセス権に制限されます。
ノーツ・アプリケーションを Web アプリケーションに変換するときに直面する問題の中に、ノーツでの動作をブラウザー上で実現する方法を探すということも含まれます。もしあなたがノーツの開発者で、Web
のアプリケーションの開発に取り組み始めたばかりということであれば、解決方法を探し出す対象は身近にあります。