本文へジャンプ

ソフトウェア > Lotus > Lotus Developer Domain > 

Iris Today Archives

ドミノでエクストラネットを作成する パート2


Lotus Software
by Andrew Pollack
レベル:上級者
対象:Designer 4.6
原文の掲載:2001年1月2日

Iris Today Archivesの原文(US)

インデックス
サイト維持にかかるコストを減らす
管理ツールキット
ドミノ・ディレクトリー管理のポイント
結論

特定のユーザーを対象にして、閲覧、参照できるようなコンテンツを作成する、というのは WWW (World Wide Web) が最初だったというわけではありません。ハイパー・テキストによる Web ページが登場する前は、Unstructured data と呼び、これを扱ったツールをグループウェアと呼んでいました。ロータス ノーツは、このテクノロジーが登場して以来、この分野で常にトップの地位を確立してきました。ツールや規格は大きな変化を遂げましたが、目的となるタスクや、要求といったものは変わっていません。

このシリーズではロータス ドミノ・プラットフォームが一貫して誇ってきた、世界クラスのエクストラネット、流行の言葉で言うなら「ポータル・サイト」を作成する機能を十分に生かす方法を紹介しており、今回はその2回目となります。パート1では、コンテンツを管理するためのツールを紹介したのに対し、今回はサイトで必要となる管理面の話に焦点を置いていますが、コンテンツ、管理の両方に共通して必要になる要素があります。エクストラネット・サイトを成功させるには、利益をあげられる範囲内で、ユーザーを満足させられるようなコンテンツを製作できるかどうか、ということにあります。

この記事は、エクストラネット・プロジェクトの立ち上げを考えているプロジェクト・マネジャーや、このようなプロジェクトに関わる開発者を対象としており、ドミノ・デザイナーやロータス スクリプトについてのスキルや知識を持っているか、そのような開発者の協力を得る、ということを前提にしています。JavaScript や DHTML、Java、そしてより上級なロータス スクリプトを用いればここで紹介する基本的なデザイン・コンセプトを向上させることも可能ですが、このようなテクノロジーを使わなくてもドミノで世界クラスのエクストラネットを作成することができます。ここで紹介する設計要素はドミノ・デザイナー R4.6x 以上で作成することができますが、R5.0x ではより設計要素、拡張性、反復性といった点で大きく向上しています。

サイト維持にかかるコストを減らす
前回の記事では、エクストラネットを維持するコストを減らすために、コンテンツを所有している人が直接コンテンツを管理、発行できるようにする、という方法を紹介しました。管理面についても同様なのですが、スケールがやや大きくなります。下の表は、サイトを管理する際のコストを比較したものです。

設備&消耗品ハードウェア人件費
イニシャル・コスト低い 高い 高い
ユーザーを拡大する際のコスト 低い 低い 普通
維持費用低い 低い 非常に高い

この表を見ると、プロジェクトが立ち上がってから終わるまでには、人件費が何度も必要になり、結局は最もコストがかかっていることが分かります。何度もかかってしまう維持費用をすべてイニシャル・コストにまわして、管理用のツールキットを作るなどすれば、サイトを維持する際にかかる全体的なコストを減らすことができます。あなたが今まで関わったプロジェクトが、立ち上がってから終わるまでのことを思い出して、その際にかかったコストを上の表に当てはめて見ると、なるほどと思うはずです。特に、ユーザー登録がよい例の1つでしょう。サイトにアクセスするすべてのユーザーを、管理者が登録していく、という方法を取るよりも、登録を自動的に行うツールを作成したほうが長期的に見ると安く上がります。この記事で紹介するツールは、この基本的な考え方を応用したものです。
 
上に戻る
 
管理ツールキット
管理ツールキットを構築する上で1番目のもっとも重要な部分が、管理サービスという面において、ユーザーがそのサイトに何を求めているか、を調査することです。これらの要求は一般的に3つの分野に分かれます。
  • 登録サービス、システムへのアクセスなど
  • パスワード・サービス、パスワードの紛失、パスワードの変更など
  • コンタクト・サービス、ヘルプ、フィードバックの提供、機能の要請など
これらは簡単そうに見えるのですが、実はそれほど甘いものではありません。そこで、これからより詳しく説明していきたいと思います。

登録サービス
ユーザーがあなたの Web サイトにアクセスできるようにするということは、あなたが提供することのできる最も基本的で重要なサービスです。純粋に技術面から見ると、これは、ユーザー名とパスワードによって、ドミノ・ディレクトリーへユーザーを処理させること、そしてユーザーをサーバー上の正しいアクセス制御グループに追加し、適切なコンテンツをみることができるようにする、ということです。

これを果たすにはいくつかの方法がありますが、どの方法を選ぶかは、ユーザーの種類によって異なります。登録メカニズムのバリエーションは通常2つに分かれます。1つは、ユーザーがアクセスをリクエストするのを待ち、ドミノ・ディレクトリーに追加して正しいアクセス制御グループに入れるという方法。もしくは、ほとんどのユーザーを事前に登録しておくことで、ユーザーがサイトに訪れた時にはすでにアクセス権を持っている状態にしておき、あとはパスワードを与えるだけにする方法です。

必ずしもどちらのほうがより良い、ということはありません。どちらを選択するかは、ユーザーについてのいくつかの質問を答えてみてください。はじめに、あなたはすでに大多数のユーザーを事前に登録するため、必要なデータを十分持っていますか?もし持っていなければ、ユーザーからのアクセス・リクエストを待つ方法を選択した方が良いでしょう。もしすでにユーザーを事前に登録するためのデータを十分持っている場合は、もう1つの質問をする必要があります。あなたがデータを持っているユーザーの大半は、サイトを利用するでしょうか?もしそうでない場合、サイトを利用しない多くのユーザーを事前に登録しても、サーバー・パフォーマンスに悪影響を与えたり、ライセンスの付与のコストが高くなってしまいます。
 
上に戻る
 
既存のソースからデータを引き出す
エクストラネットの維持にかかるコストを削減する重要な点は、エクストラネット運用ビジネスにとどまり、データベース管理ビジネスに足を踏み入れないことです。もちろん認証とアクセス制御にユーザー・データベースは必要ですが、だからと言ってこれはデータを管理しなければならない、という意味ではありません。もしあなたが、従業員、パートナー、売り主、顧客に関わらず、エクストラネットをプロデュースしているのであれば、多くの場合、組織のどこかにすでにユーザー・データが存在しているでしょう。すでにあるいくつかのデータベース、あるいは複数のデータベースには、あなたがサイトを運営する上で必要なデータを全て含んでいることでしょう。

ドミノ サーバーは ERP と RDB システムを含む多種のソースからデータを引き出すことができます。もしあなたの企業が ERP システムを持っており、すでにデータが入っているのであれば、データを常に最新に保っておくプロセスもあるはずです。DECS (Domino Enterprise Connection Server)、ESB (Enterprise Solution Builder)、LEI (Lotus Enterprise Integrator) を利用するか、または簡単なロータス スクリプト・コードを書くことによって、データ入力センターを置かずとも、ユーザー・データを最新に保つプロセスを強化することができるのです。これにより人件費が大幅に削減され、2つの異なるシステムを調和させる必要もなくなります。(DECS、ESB、LEI については、ロータス ホームページの Lotus Enterprise Integration(US) を見てください。)
 
上に戻る
 
認証とアクセス制御
認証とアクセス制御は同じものではありません。認証はユーザーの身元保証を扱い、アクセス制御はユーザーが何をすることができるかを制御します。認証を使いこなすことができなければ、アクセス制御を上手に使いこなすことはできません。

ノーツ・クライアントは、その ID ファイルを有効化することでドミノ サーバーによって認証されます。ユーザーの身元のサーバーを確認するため、キーと証明書が比較されます。このケースでは、ユーザーが ID ファイルを使用できるようにパスワードが利用され、その後サーバーによって有効化されるのです

SSL (Secure Sockets Layer) と x.509 証明書を使うことで、ドミノ サーバーは同じようなタイプの認証を提供することができるのです。これらの証明書はユーザーの Web ブラウザーとサーバーに保管されています。これらはサーバーと共に認証する安全な方法を提供する一方で、メンテナンスが難しく、ユーザーとサーバーをお互いに保護するのにサード・パーティー製の認証を利用するのであれば、導入費が高くなることでしょう。(このサービスは VeriSign(US) や GlobalSign(US) のような複数の企業が提供しています。) Web に証明書ベースの認証を導入する詳細を説明はこの記事の範囲外ですが、Iris Today の記事の中で、この問題を取り扱うものがあります。これらの記事は、"Trust yourself: Become your own Certification Authority"(US)、"SSL: It's not just for commerce any more"(US)、そして "SSL clientauthentication: It's a matter of trust"(US) です。

多くのサイトでは、x.509 証明書と SSL が提供するセキュリティー・レベルは必要ありません。これらのサイトは、ユーザー名とパスワードのみ必要な「基本認証」で十分でしょう。基本認証のためにドミノ サーバーが必要とするものは、ドミノ・ディレクトリーに入っている各ユーザーのユーザー文書で、ユーザー名、姓、そしてインターネット・パスワード・フィールドを入力し終えている必要があります。ユーザー文書には他にも多くのフィールドがあり、メール配信や他のサービスのためにはこれらも正確に入力されていなければなりません。しかし、下のユーザー文書でお見せする通り、Web アクセスには他のフィールドは必要ありません。(この例で、インターネット・パスワードが嫌になるくらい長いストリングであることが見て取れるでしょう。パスワードは暗号化され保管されています。入力されているときには読むことができますが、文書が保存されたり更新された後は、暗号化されます。)

Person document settings
 
上に戻る
 
ユーザーを事前に登録しておくか、サイトに来たときにアップデートするか、どちらにせよ、ユーザー文書のフィールドを、正確に入力するプロセスをドミノ・ディレクトリー内で上手く処理する方法が、管理ツールキットに含まれているはずです。これはロータス スクリプト、またはすでに利用できる数々のツールを使うことによって簡単に行うことができます。中でも2つのツールは Iris Sandbox から入手できます。これらは Domino Registration Database Template(US) と Notes.net Registration Template(US) です。

さらに、下記は ロータス スクリプト関数で、addusetonab (userid As String, password As String) を正数とします。これはドミノ・ディレクトリー内のユーザー文書の検索を行います。ユーザーのユーザー文書が発見されない場合は、そのユーザーのために新しいユーザー文書を作成します。ユーザー文書で、パスワードの後に notesdocument.computewithform() 使用されている点に注目してください。これはとても重要です。なぜなら、これによって文書が保存される前にパスワードが暗号化されるようになるからです。パスワードがクリアー・テキスト・フォーマットで保存された場合には、そのユーザーはログインすることができません。

Function Addusertonab(userid As String, password As String) As Integer

' Return values
' 0 for failure,
' 1 for updated person document,
' 2 for new person document

   addusertonab = 0

   Dim Partnernab As New notesdatabase("","Partnernab.nsf")
   If partnernab Is Nothing Then Exit Function

   Dim findpeople As notesview
   Set findpeople = Partnernab.getview("($Users)")
   If findpeople Is Nothing Then Exit Function
   Dim nabpersondoc As notesdocument
   Set nabpersondoc = findpeople.getdocumentbykey(userid , True)
   If nabpersondoc Is Nothing Then ' add person!
     Set nabpersondoc= New NotesDocument(PARTNERNAB)
     nabpersondoc.Type="Person"
     nabpersondoc.Form="Person"
     nabpersondoc.FullName=userid
     nabpersondoc.LastName=userid
     nabpersondoc.HTTPPassword=password
     Call nabpersondoc.computewithform(False,False)
     If nabpersondoc.Save(True,False) Then addusertonab = 2
     Exit Function
   Else
     ' we'll update the password field with
     ' the password sent in, then exit
     nabpersondoc.HTTPPassword= password
     Call nabpersondoc.computewithform(False,False)
     If nabpersondoc.Save(True,False) Then addusertonab = 1
     Exit Function
   End If
End Function
 
上に戻る
 
アクセス・グループ管理の自動化
一度ドミノ・ディレクトリーにユーザーを登録したら、サーバーはそのユーザーに対して認証を行い、サイトにアクセスできるようにします。サーバー上の各データベースのアクセス制御リスト (ACL) へ、各ユーザーを別々に登録する計画がない限り、この新しいユーザーを、ディレクトリー内の1つ以上のグループ文書に追加した方がよいでしょう。これは、ドミノ・ディレクトリー内のグループ文書を必要に応じて直接編集することでできますが、他により良い方法があるかも知れません。
「変化する」ということほどコンスタントに起こることは他にはありません。そしてこれは特に Web において言えることなのです。あなたがどんなアクセス制御リストのスキーマを考え出したとしても、ほとんどの場合、後の変更しなくてはならないでしょう。グループにユーザーを落とすだけでは、異なる条件に合わせてグループ分けすることができなくなってしまいます。したがって、グループ団体を変更しなければならないときに実行する、リポジトリーの役を務めるデータベースを作成することを考えた方がよいでしょう。大きなシステムでは関連データベースを利用する方が良いかもしれませんが (ドミノを関連データベースに接続する方法については、ロータス Web サイトの Lotus Enterprise Integration(US) をご覧ください)、このディスカッションのために、今回は簡単なノーツ・データベースを使用します。

各ユーザーにそれぞれ固有の文書を充てるノーツ・データベースを作成することができます。これらの文書には各ユーザーのプロファイルを入力する説明フィールド、例えば地域データ、パートナーのプログラムの参加レベル、営業活動、専門分野・技術のサブジェクト領域などが含まれています。そしていつしか将来的に、ノーツ・エージェントを利用してそのデータベースを検索し、プロファイル・データを元にアクセス制御リストを作成し直すことができます。さらに先進的なサイトでは、簡単なフォームを作成し、コンテンツ・マネジャーがアクセスして、自分専用のプロファイル・ベースのグループを作成することができます。

下のサンプル・フォームはグループを定義する論理的なレイアウトで、マニュアルなプロセスではなく、ユーザーのプロファイルを元に作成されています。このようなフォーム・ベースのグループ・マネジメント・システムを導入するためには、ある程度複雑なプログラミングと、ユーザー・プロファイル・システムへの高い理解度が必要不可欠ですが、正しく行うことができれば、管理プロセスに費やす時間を大幅に節約できるでしょう。

A Group Definition document

私はこの自動化されたアクセス制御グループ・マネジメントが、100,000 人以上のユーザーを抱えるあるサイトで実際に利用されているのを見たことがあり、管理に費やす時間に与える影響にはめざましいものがありました。全てのグループは毎日何回かアップデートされます。ユーザーのステータスが変わった場合、そのユーザーは正しいアクセス制御グループに自動的に移動されます。
 
上に戻る
 
ユーザーを管理する: パスワードとコンタクト・サービス 登録のパズルを解くことができたら、多くのユーザーを管理するために多くの時間が費やされるので、あなたのツールキットの中で、きちんと計画を立てることが重要となります。いかなる方法でユーザーをドミノ・ディレクトリーに登録しても、ある程度のパスワード・メインテナンスは必要でしょう。さらに、ユーザーは他にヘルプを必要としたり、あなたにフィードバックを提供したり、機能拡張をリクエストしたりすることでしょう。ですが、ほとんどの場合ユーザーはあなたのヘルプデスクに次のような理由で要求します。
  • ログイン名を忘れてしまった
  • パスワードを忘れてしまった
  • パスワードを変更したい
  • フィードバックの提供、または新機能のリクエスト
このようなユーザー・サポートと管理を自動化することができれば、多くの時間とリソースを節約することができるでしょう。

おそらくあなたは、ユーザーがドミノ・ディレクトリーをブラウズできるようにしたくはないでしょうし、その必要はありません。簡単なリクエスト・フォームに、ドミノ・ディレクトリー内のこの情報の変更・検索をすることができるロータス スクリプトを呼び出させることができます。 Web から呼び出されたエージェントは、そのユーザーのエージェントの権限ではなく、著者の権限で実行されるように設定することができます。実際にはこれがデフォルトになっています。ということは、そのデータベースにユーザーがアクセスできるようにしなくとも、エージェントにドミノ・ディレクトリーを開かせ、情報の更新や引き出しを行うことができるのです。
 
上に戻る
 
例外は常にあり
いかに慎重に、アクセス制御グループを作成し、あなたの組織によって管理されている企業データを元にユーザー・データを頻繁に更新しても、例外は常にあります。営業担当者が、普段はアクセスする必要のない分野にアクセスしなければならないときもあります。プレス関係のスタッフに追加アクセスさせたいときもあるでしょう。これらのケースでは、ユーザーのプロファイルに合わないグループに、彼らを登録するため、あなたのチームが呼ばれることでしょう。

「スペシャル・アクセス」処理が、この問題を扱う上で最も有効になります。コンテンツ編集者が入力することができない、ユーザー ID、パスワード、そしてアクセス制御グループのリストを入力するだけのフォームを提供することで、あなたの管理チームに時間と資金をつぎ込まずに、これらの特別なケースをコンテンツ所有者が処理することができるようになります。

Special Access Request form

このフォーム上の情報は手動で変更することももちろん可能ですが、システムが他のユーザーやグループの更新を行うと同時に、自動処理することで、管理費を低く抑えることができます。
 
上に戻る
 
ドミノ・ディレクトリー管理のポイント
このように、管理ツールキットの設定は、ドミノ・ディレクトリーでの作業が必要であり、そのためにはドミノ サーバーの稼働が最も重要なことだということを常に念頭に置いてください。エクストラネットを設計する上で、次の2つの重要なポイントが、大きな助けとなると思います。

ビュー、またはインデックスは、すでにあります
プログラマーが容易に情報へアクセスできるよう、ドミノ・ディレクトリーにビューを追加したい (本当はインデックスとして動いています)、という誘惑は常にあります。この誘惑に負けないでください。設計には、あなたが探しているユーザーやグループに関するデータへ、プログラマー達が簡単にアクセスすることのできる、隠された3つのビューがあります。
ユーザーを検索する
この隠れているビュー ($Users) は、ユーザーを検索する時とても役に立ちます。これは、ユーザー名でソートされた、全てのユーザー文書のリストを提供するために、その文書からの複数の値に沿ってソートする能力を利用します。このビューがきわめて使いやすい点は、ユーザーの名前が階層別、正規形、簡略化別、そして省略型など考えられる全てのバリエーションで表示される点です。そしてユーザー文書にリストされてあるインターネット・ハンドル・ネームとエイリアスも含まれます。このビューの参照を行い、ユーザーの名前の派生を見つけることができるので、検索を実行する前に、あなたが持っているキーを、1つのフォームから別のフォームに変換する必要がないのです。

グループを検索する
隠れたビュー ($VIMGroups) には、サーバーが定義する全てのグループ文書が掲載されているリストが含まれています。ビューのはじめの列はグループの名前です。
ユーザーが所属するグループを検索する
システム全体で最も重要なビューとなるのが、($ServerAccess) ビューです。これは、グループのメンバーでソートし分類されたグループ文書 のビューなので、とても興味深いビューです。このビューからユーザー名を探し、そのユーザーが所属する全てのグループのリストを手に入れることができます。これら各グループを調べて、どのグループが他のグループのメンバーになっているか、もわかります。むしろサーバーは、ユーザーが所属するグループのリストを以上のような手順で作成しているのです。

次の機能はこれらの参照方法を利用して、ユーザーがメンバーとなっている全てのグループのリストを返しています。この機能はユーザーの名前でドミノ・ディレクトリーを参照して、正規形の名前を取得し、この名前を使ってユーザーが所属するグループを探します。次にこれらのグループをそれぞれチェックし、どのグループに所属しているかを探します。

'CountGroups:

Option Public
Option Declare

Sub Initialize ' Here's how you call the thing.......

   Dim v As Variant
   v = getallvalidgroupsforuser("Username", "Servername")

End Sub

Function getallvalidgroupsforuser(username As String, server As String) As Variant

   Static nab As notesdatabase
   Static nabview As notesview
   Static userview As notesview
   Static foundlist List As String
   Static depth As Integer
   If depth = 6 then exit function ' don't look deeper then 6 nested groups
   depth = depth + 1

   If nab Is Nothing Then Set nab = New
   notesdatabase(server,"NAMES.NSF")
   If nab Is Nothing Then Exit Function

   If nabview Is Nothing Then Set nabview =
   nab.getview("($ServerAccess)")
   If userview Is Nothing Then Set userview = nab.getview("($Users)")
   If userview Is Nothing Then Exit Function
   If nabview Is Nothing Then Exit Function

   Dim collection As notesdocumentcollection
   Dim doc As notesdocument
   Dim v As Variant
   Dim count As Integer
   Dim usercount As Integer
   Dim user As notesname
   Dim alreadyhandlednamevariants As Integer
   Redim usernamelist(0) As String

   ' first set the first username in the list to the current one as called
   usernamelist(0) = username

   ' this section will build an array of all the shortnames and name variants
   the user has

   Set doc=userview.getdocumentbykey(username, True)
   If Not doc Is Nothing Then
   If doc.form(0) = "Person" Then
     usercount = 0
     Forall shortname In doc.fullname
       Redim Preserve usernamelist(usercount) As String
       usernamelist(usercount) = shortname
       If Not alreadyhandlednamevariants = 1 Then
       Set user = New notesname(shortname)
       If Not user.canonical = "" Then
         usercount = usercount + 2
         Redim Preserve usernamelist(usercount)
         usernamelist(usercount - 2) = user.canonical
         usernamelist(usercount -1) = user.common
         usernamelist(usercount) = user.abbreviated
         alreadyhandlednamevariants = 1 ' no need to do
         this more then once
       End If
       End If
       usercount = usercount +1
     End Forall
   End If
   End If


   Redim returnlist(0) As String

   Forall checkusername In usernamelist
   If Not checkusername = "" Then
     Set collection =
     nabview.getalldocumentsbykey(checkusername,True)
     If Not collection.count = 0 Then
       Set doc = collection.getfirstdocument
       While Not doc Is Nothing
       If Not doc.listname(0) = "" Then
         If Not Iselement(foundlist(doc.listname(0))) Then
         ' use this static list to avoid duplicate calls
           foundlist(doc.listname(0)) = "1"
           v =
           getallvalidgroupsforuser(doc.listname(0),
           server)
           If Not Isempty(v) Then
           Forall group In v
             If Not group = "" Then
               Redim Preserve
               returnlist(count) As String
               returnlist(count) = group
               count = count + 1
               Print "addtolist: " & group
             End If
           End Forall
           End If
           Redim Preserve returnlist(count)
           returnlist(count) = doc.listname(0)
           count = count + 1
         End If
         Set doc=collection.getnextdocument(doc)
       End If
       Wend
     End If
   End If
   End Forall
   getallvalidgroupsforuser = returnlist

   depth = depth -1
   If depth = 0 Then
   ' this exit will be the last recursion, so delete the static list so we can
   run again if we need!
   Erase foundlist
   End If

End Function
 
上に戻る
 
ドミノ サーバーは入れ子のグループを6レベルまでサポートしているので、6レベルまで参照するだけでよい、ということを覚えておいて下さい。これは次のラインとともに、コードに反映されています。

If depth = 6 then exit function

また、リスト・コンテナに対して保護チェックがある点にも注目してください。これは同じ名前やグループ名の再チェックを防止し、このラインから始まります。

If Not Iselement(foundlist(doc.listname(0))) Then

これは機能が、グループやその名前のエントリー名をまだチェックしていないときだけに、このコードを実行することで、ループの中のコードがはまってしまうのを防止します。いくつかのケースでは、管理者やユーザーが注意不足で、互いに参照し合う2つのグループや、また、同じサブグループを参照する1つ以上のグループを設定してしまうこともあります。

グループがパフォーマンスに与える影響
これで ($ServerAccess) ビューがどのくらい役に立ち、重要なものか理解することができたと思うので、次にこれがパフォーマンスに与える影響を考える必要があります。システムのパフォーマンスは、最も見過ごしやすい部分の1つですが、高稼動のサーバーでは大きな違いを見せる部分でもあります。

ビューがどのように構築されているかをよく考えてみてください。各グループには1人のユーザー・エントリーに対して1つのエントリーが含まれています。もし 20,000 人のユーザーがいるとすれば、各ユーザーは平均5つのグループに所属しておりますが (エクストラネットでは大いにありえることです)、あなたはたった今 100,000 エントリーのインデックスを作成したとしましょう。たとえ数個のグループしかないとしても、このインデックスは、5倍の文書が入っているデータベースの複雑なビューを更新すると同じくらいの時間がかかってしまいます。100,000 人のユーザーがいるサイトに与える影響を考えてみてください。ことをさらに悪化させると、システム・セキュリティーのために、サーバーは ($ServerAccess) ビューを常に最新の状態に保っておかなければならません。このビューが破損してしまうと、サーバーが再構築されるまで、誰もアクセスすることができなくなってしまうのです。

これら全てのグループがシステムに与える影響を最小限にするには、可能な限り 小さな単位のユーザーのデータが入った中心となるグループの作成を考え、入れ子のグループを使ってより大きい、ユーザーのクラスを作成してください。例えば、アメリカ、メキシコ、そしてカナダに等分に広がった 30,000 人のユーザーをあなたが持っていたとします。ここでの誘惑、特にあなたが自動化されたグループ管理ツールを持っている場合は、それぞれ 10,000 人のユーザーが入った3つの個々のグループと、北アメリカ全域の 30,000 人のユーザーを含む1つの大きなグループを作成したいとします。入れ子のグループを使い、10,000 人のユーザーのグループを作成します。そして北アメリカ・グループを3つのエントリー(他の3つのグループの名前)を作成することで、このインデックスにかかる負荷を 50% まで下げることができます。パフォーマンスの向上は苦労に見合ったものでしょう。

メモ:グループ管理ツールが稼働した後に、パフォーマンスの低下やサーバー・ロックアウトをユーザーが経験するようになったら、それはおそらく ($ServerAccess) ビューが更新されているからでしょう。デフォルトでは、サーバーはこのビューをとても重要視し、インデクサーによって更新されているときは、ビューの参照を許しません。オプションの NOTES.INI パラメーターである SERVER_NAME_LOOKUP_NOUPDATE=1 は、ビューが更新されている間も、ビューが破損していたり、updall -R コマンドによって更新されていない限り、ユーザーがサーバーにアクセスできるようにします。しかしこれは、更新処理の間、ユーザーが「古い」グループに残ってしまう、という意味でもあります。

メモ:ドミノ サーバーのいくつかのバージョンでは、($ServerAccess) ビューがひどく断片化されてしまうと、破損してしまう場合があります。グループが頻繁に更新されるサーバーでは、load updall -R names.nsf コマンドを定期的に実行してください。これは R5.0.6 の保留中の問題修正リストにリストされています。
 
上に戻る
 
結論
この記事の焦点は、エクストラネットの管理側に当てられている一方で、これと編集ツールに焦点を当てたパート1は、共通の重要なテーマを扱っています。エクストラネットは、単なるページのコレクションではありません。本当の意味での情報を、それをタイムリーで効率的に必要とする人々に提供する上で、エクストラネットはコンテンツ所有者に大きな権限を与えるためのツールなのです。ロータス ドミノはこれらのツールキットへ、この産業では無敵のプラットフォームを提供するのです。少しの計画で、ドミノ・ベースのエクストラネットは、コスト安なコミュニケーション・ツールとなるでしょう。


著者について
アンドリュー・ポーラックはロータス ノーツとドミノの生産ラインで、リリース2の時から働いています。1999 年1月、彼がデザインし、作成したエクストラネット Web サイトで、ロータスの Beacon Award の 「ベスト Web ソリューション」 ("Best Web Solution") 部門の ファイナリストになりました。このサイトはまだ使われており、複数の言語で何千人ものユーザーをサポートしています。アンドリューの企業である Northem Collaborative Technologies は、エンタープライズ・インテグレーションと、完全に統合されたエクストラネットを専門に扱っています。
アンドリューとは http://www.thenorth.com(US)、もしくは彼の電子メール、andrewp@thenorth.com でコンタクトを取ることができます。

 
上に戻る