Notes と Web アプリケーションを設計するためのヒント

Notes® ユーザーと Web の両方のクライアント向けのアプリケーションを計画する場合に考慮すべき分野は、次のとおりです。

セキュリティ

Notes ユーザーと Web ユーザーでは、セキュリティモデルが異なります。データベースへの [管理者] と [設計者] のアクセス権は Notes クライアントユーザーは使用できますが、Web ユーザーは使用できません。したがって、ユーザーがタスクを実行するために [管理者] と [設計者] のアクセス権を必要とする LotusScript® のアクションまたはエージェントは含められません。

ユーザー認証には、Web ブラウザから利用できるアプリケーションの計画がさらに必要です。多くの Web アプリケーションでは、匿名ユーザーのアクセス権がいくつかのレベルで用意されています。よりレベルの高いアクセス権の場合は、Web ユーザーと Domino ディレクトリ内の名前が一致する必要があります。Web ユーザーは一般的に省略形の名前を使用してアプリケーションにログインするため、Notes の正式なユーザー名を返して正しく認証するには、@UserName コマンドを使用する必要があります。

フォーム

多くの場合、Notes クライアントのアプリケーションと Web アプリケーションの両方で同じフォームを使用できます。フォーム上の設計要素の場合は、非表示式を使用してわずかな機能の違いを修正できます。ときには、Notes クライアントアプリケーションと Web ブラウザで異なるサブフォームを表示したい場合があります。この例では、次の式により、@BrowserInfo にあるブラウザの種類を判別する CGI 変数を使用して、ブラウザ固有のコードを含む NS または IE という名前の計算結果のサブフォームのどちらかが呼び出されます。

@If(@BrowserInfo("BrowserType")="Netscape";"NS";"IE")

各サブフォームには独自の JavaScript ヘッダーがあるため、計算結果のサブフォームを使用して JavaScript やその他のデータ型をフォームに選択的に組み込むことができます。

サブフォームは、すべてメインフォームと同時に開きます。ページを開いたあとの計算結果に基づいて、計算結果のサブフォームを表示することはできません。

フォームは、複数のクライアントの混在環境でも柔軟に対応できます。複数のクライアントをサポートするために設計したプログラムを使用して、Notes クライアントからアクセスされた場合に一連のコマンドを実行し、Web クライアントからアクセスされた場合には別のコマンドを実行するフォームイベントをプログラミングできます。Notes クライアントと Web クライアントでまったく異なるフォームを個別に設計するほうが簡単な場合もあります。この場合は、2 つのフォームに同じ別名を割り当てて、適切な状況でフォームが正しく表示されるように、1 つを Notes クライアントから非表示にし、もう 1 つを Web クライアントから非表示にします。

フィールド

Notes アプリケーションでサポートされているフィールドの種類が、すべて Web アプリケーションでもサポートされているとは限りません。例えば、ユーザーがリストにない値を選択して入力できる、複数値のキーワードフィールドが Web ではサポートされていません。その代わりに、Web アプリケーションでは 2 つのフィールドを使用します。1 つのフィールドでリストの新しい選択肢を受け入れ、もう 1 つのフィールドでリストを構築、表示します。ユーザーが Notes クライアントと Web のどちらからでもアプリケーションにアクセスできる場合、同じ値がすべてのユーザーに対して表示されるよう、フィールドの値を同期する必要があります。

Notes で機能するフィールド式と Web で機能するフィールド式の 2 つを使用して問題を解決できる場合は、両方の式をフォームに含め、[フィールドのプロパティ] インフォボックスから [Notes から非表示にする/Web ブラウザから非表示にする] を選択してどちらかの式を表示します。

Notes クライアントとブラウザの両方で同じフォームを使用する場合は、設計要素のプロパティにある「Notes から非表示にする/Web ブラウザから非表示にする」属性が役立ちます。ただし、「非表示」はクライアントごとに異なる意味を持つ場合があるので注意が必要です。Notes では、非表示フィールドは文書内にあり、スクリプトの計算に使用できます。一方、Web ブラウザでは非表示となるフィールドは、ページがブラウザに渡される前に Domino によって文書からも削除されます。フィールドの内容は JavaScript では使用できません。

ヒント: ブラウザでフィールドを非表示にする一方、JavaScript でその内容を使用する場合は、[Notes から非表示にする/Web ブラウザから非表示にする] オプションを使用せず、フィールドの [HTML Body Attributes] オブジェクトは「type=hidden」にしないようにします。次の項目を確認します。

Domino により、HTML ページに適切な <type=hidden> タグが生成されます。

<input type="hidden" name="fieldname" value="fieldcontents">

この方法で処理する名前と値は、保護されていません。ユーザーがブラウザの「ページのソースを表示する」機能をクリックすると、これらはすべて表示されます。

また、NULL は HTML で表現できないため、パスワードフィールド、$UpdatedBy、$HTMLHead などのフィールド、ユーザーのパブリックキーを含む NULL 文字のあるオブジェクトが、ブラウザにこのような方法で渡されるとは限りません。

アクション

Web ブラウザのユーザーには Notes のメニューコマンドに対するアクセス権がないため、Web アプリケーションではアクションがさらに重要な役割を果たします。例えば、文書の作成、編集モードへの切り替え、ビューの切り替え、または文書の転送などのタスクには、アクションを指定する必要があります。したがって、多くの場合 Notes クライアントユーザーからは非表示の Web アプリケーション用アクションバーを、独自に設計する必要があります。

ヒント: データベースのボタンを Web 対応にするには、[データベースのプロパティ] インフォボックスで [Web アクセス: ページ生成時に JavaScript を使用] にチェックマークを付けます。このプロパティが設定されていないと、Domino では文書中の最初のボタンだけしか認識されません。デフォルトでは、このボタンは文書を閉じたり保存したりするための [送信] ボタンとして扱われます。

ビュー

初めにページにビューを埋め込まないと、Web アプリケーションで Notes ビューを表示した場合に表示属性の一部が失われます。ページに複数のビューを埋め込むと、洗練されたレイアウトを実現できます。Web アプリケーション向けに、埋め込んだビューに統一したスタイルのプロパティを適用するビューのテンプレートの指定もできます。

詳しくは、「Web アプリケーションでビューを表示する」を参照してください。

ナビゲーション

ナビゲーションのアウトラインを使用すると、Notes クライアントと Web ブラウザの両方のユーザーに対して構造を統一できます。アウトラインにより、ユーザーはビュー、ページ、または URL を開くことができます。アウトラインをページに埋め込むと、Web ブラウザのユーザーの表示プロパティをすべて維持できます。

ナビゲーションツールとして、イメージマップも考えられます。

詳しくは、「アウトライン、ナビゲータ、イメージマップ」を参照してください。

エージェント

エージェントを使用してプログラミングすると、アプリケーションの処理能力がすべて提供されます。エージェントの使用は、Notes クライアントと Web ブラウザのアプリケーション開発において違いが最も顕著な部分です。コードの多くは共有できますが、Web と Notes クライアントに対してそれぞれ異なるエージェントの書き込みが必要な場合があります。Web アプリケーション用のプログラム可能なサーバーイベントには、主に WebQueryOpen と WebQuerySave があります。パフォーマンスの問題を避けるには、これらのイベントを使用して主要なタスクを実行し、バックグラウンドエージェントを使用してより複雑な処理を実行します。@Command([ToolsRunMacro]) または @URLOpen 式を使用して、Web からエージェントを実行できます。

デフォルトでは、Web エージェントは、エージェントの作成者 (エージェントを保存した人) の認証で実行されます。Web ユーザーの認証の下でエージェントを実行するには、[エージェントのプロパティ] インフォボックスを開き、[設計] タブをクリックし、[Web アクセス] セクションの [Web ユーザーで実行] オプションを選択します。Web ユーザーがこのプロパティの設定でエージェントを実行しようとすると、Domino によりユーザー名とパスワードが要求され、呼び出し者のデータベース ACL での権限がチェックされるため、このオプションを選択するとセキュリティが強化されます。

Notes クライアントでは、多くのフォーム、フィールド、ボタンイベントを JavaScript または LotusScript (またはより確実な方法として@関数) で記述できます。アプリケーションでのスクリプトイベントの使用方法によっては、JavaScript を使用してエージェントを記述すると、同じフォームを Notes クライアントと Web クライアントで使用できる場合もあります。ただし、その機能には違いがあります。Notes クライアントでは JavaScript は現在開いているフォームのデータにのみアクセスできますが、LotusScript のフロントエンドまたはバックエンドにある Domino オブジェクトにはアクセスできません。Notes クライアントでの実行用に LotusScript を、ブラウザ用に JavaScript を記述して、非表示オプションまたは個別のフォームを使用して直接プログラムを実行すると、アプリケーションの動作には一番効果的です。

@関数や@コマンドの多くは、ブラウザでは動作しません。主に次の 3 つのカテゴリに該当する場合、@関数は動作しません。

@コマンドの多くは Notes クライアントインターフェースの制御に関連付けられており、Web アプリケーションでは機能しません。ただし、一部の@コマンドは Web アプリケーションで実際によく使用されます。例えば、@Command([FileSave]) や @Command([FileCloseWindow]) などは、一緒に使用すると [送信] ボタンと同様の機能を提供するため、頻繁に使用されます。

@関数の完全なリストについては、「Web でサポートされていない Domino の @関数」を参照してください。

Web アプリケーションのダイアログボックスを置き換える

Web 上にないヘルプのダイアログボックスやエラーメッセージを置き換えるフォームを、アプリケーション用に設計する必要があります。特に、アプリケーションを使用するための認証が必要な場合には、$$ReturnAuthenticationFailure フォームを作成してユーザーに認証が失敗したことを通知し、アプリケーションで認証を必要としない場所に移動するためのリンクを表示する必要があります。

フォームを作成し、$$ReturnAuthenticationFailure という名前を付けて保存します。このフォームをパブリックアクセスで使用できるようにするには、次の 2 つを実行します。まずパブリック文書を読み出すために、アクセス制御リストでデフォルト権限を作成する必要があります。

次に、フォームのセキュリティプロパティを設定して、[フォームのプロパティ] インフォボックスの [セキュリティ] タブで [パブリックアクセスユーザーの利用を許可する] を選択して、パブリックユーザーがフォームを使用できるようにします。

ブラウザユーザー用カスタマイズエラーメッセージの作成で使用できるフォームの予約名は、$$ReturnAuthenticationFailure、$$ReturnAuthorizationFailure、$$ReturnDocumentDeleted、$$ReturnGeneralError の 4 つです。

これらのフィールドとその使用方法の詳細については、「カスタマイズしたエラーメッセージを表示する」を参照してください。

マルチプラットフォームのプログラミング

これで、Notes クライアントと Web ブラウザに対して、Domino Designer で同じイベントをプログラミングできます。実行するプラットフォームのイベント (ボタンの Click イベントなど) のコードを最適化できます。Notes クライアントでアプリケーションを実行する場合は、Notes クライアントのプラットフォームが必要なコードを実行します。ブラウザでアプリケーションを実行する場合は、Web プラットフォームが必要なコードを実行します。これらのプラットフォームイベントは、フォーム、ページ、サブフォーム、フィールド、ボタン、アクション、ホットスポットの選択されたイベントで利用できます。

ブラウザの違いに応じて計画を立てる

ユーザーが種類またはバージョンの異なるブラウザを使用して Web アプリケーションにアクセスする場合は、アプリケーションをテストして、それぞれのブラウザに対してカスタマイズする必要があります。ブラウザの種類に応じてコードが必要な場合は、@BrowserInfo を使用して実行中のブラウザの種類やバージョンを特定できます。

@BrowserInfo の詳細については、「@BrowserInfo」を参照してください。