本文へジャンプ

ソフトウェア > Lotus > Lotus Developer Domain > 製品別技術情報 > Lotus Notes/Domino関連製品 > 

LDD Today

Explorer PlaceTypeを探る(Exploring)


Lotus Software
by David DeJean with Tony Estrada Partner, DeJean & Clemens
レベル:中級者
原文の掲載:2003年4月12日

LDD Todayの原文(US)

インデックス
Explorer PlaceType
メニューPlaceBotの内側
そしてJavaScriptがHTMLを生成
まとめ

Lotus Team Workplaceの「ルーム」の中で迷いましたか? Lotus Team Workplace Explorer PlaceTypeを勉強して、どのようにWorkplace内でよりうまくナビゲーションができるようにするかを見てみましょう。今回は新しいPlaceTypeを紹介したいと思います。これは、Workplaceについて、Windows Explorerに似たものを提供するものです。

IBM Lotus Team Workplace (旧名QuickPlace)の機能は、かつては限定されたコラボレーション・ツールに留まっていましたが、今は拡張されて非常に豊富な機能を備え、カスタマイズすることも可能なコラボレーション環境およびナレッジ共有の環境となりました。この記事では、Lotus Team Workplaceについて、特にExplorer PlaceTypeに焦点を絞ってカスタマイズの方法について紹介します(Sandboxよりダウンロード可能です)。また、IBM Lotus Redbook: Customizing QuickPlaceについても触れます。(URLについては、この記事の最後にある「リソース」を参照してください。

QuickPlaceは、小規模のワーク・グループやチーム用の、Webベースのコラボレーション・ツールとして開発されました。ユーザーが標準化された共有空間を容易に作成することができ、そこにプロジェクトの遂行に必要なツール、例えばルーム、フォルダー、文書などを置くことができます。ツールを使うことで、グループのメンバーはスレッド形式のディスカッションを行い、文書を共有したり、スライド・ショーを作成したり、アーカイブを行うことができます。各グループのスペースでは、チームが必要とするサイズやマテリアルの機密度に応じて柔軟なセキュリティー設定を行い運用することができます。

QuickPlaceの元々の設計においては、小規模なグループや短期間のプロジェクトで使用されることに主眼を置いていました。最小限のインフラストラクチャーと最小限のITサポートでPlaceが簡単に作成でき、また使用後には簡単に削除できることを想定していました。しかし、初回出荷から5年が経過し、Lotus Team Workplaceでは大規模な組織での知識を収集し、それにアクセスするといった、長期的使用を前提としたソリューションとしてPlaceを位置づけるようにしました。すでに、社内の開発者やサード・パーティーのコンサルタントがLotus Team Workplaceを、様々な業種におけるビジネス課題を解決するソリューションのプラットフォームとして使っています。

Lotus Team Workplaceは遅れを取らないように拡張がなされており、Workplaceはさらに格段にカスタマイズすることができるようになりました。これらの変更の多くはユーザーにも利用できるものです。新規のWorkplaceを作成したユーザーは、Lotus Team Workplace内でのカスタマイズを司るCustomizationを利用して、異なるテーマやWorkplaceの「スキン」を同梱されたものの中から選択して変えることもできます。さらに、色やフォントを変えることで選んだテーマの見栄えを変えることもできます。既存のWorkplaceのフォームをカスタマイズすることも可能です。また、グループのニーズに特有な方法で情報を集めるものを追加で作成できます。また、シンプルなワークフローも作成できます。

開発者はさらにカスタマイズすることも可能です。開発者はPlaceBotを作成することもできます。これはDominoのエージェントのWorkplace版のようなもので、文書のハンドリング方法やWorkplaceでユーザーへの見せ方を変えることができます。また、完全に新規のテーマを作成して、それらのコンポーネントと組み合わせて、ある特定の問題解決用のWorkplaceを作成することもできます。新規テーマとPlaceBotを作成したら、PlaceTypeとして保存して再利用することができます。このPlaceTypeとはWorkplaceにおけるDominoでのテンプレートに相当するものです。

また、Workplaceイベント・インターフェースを使用してWorkplaceを他のアプリケーションやデータ・リポジトリーに接続することもできます。(QuickPlace Java API、あるいはQuickPlace Developer's KitとLotus C API Toolkitを使用してC/C++コードを作成します。)


Explorer PlaceType
Lotus Team Workplaceで作成されるWorkplaceは、ルーム、フォルダー、文書から構成されています。ユーザー・インターフェースとしては、Workplaceの内容一覧(Table of Contents)が提供され、ブルーとホワイトのナビゲーション・バーで表示されます(画面左側)。

図1. Lotus Team Workplaceの標準のユーザー・インターフェース


Workplaceのオーナーは、Workplaceにアクセスできるメンバー・リスト、具体的にはコンテンツを読める人、新規文書を作成できる人を作成します。Workplaceのメンバーは全てどのコンテンツにもアクセスできます。そのためWorkplaceのオーナーは、Workplace内に複数のルームを用意して、細かなセキュリティーを確保するようにします。各ルームではそれぞれ個別のメンバーシップを持つことができ、これはWorkplaceのメンバーシップのサブセットになります。チームのリーダーは、チーム・メンバー外のユーザーからは見ることができないディスカッションを行うことができます。

各ルームはそれぞれTOC(コンテンツ一覧)を持っており、WorkplaceのTOCとは少しだけ異なったものです。

図2. コンテンツ一覧(TOC: Table of Contents)


Workplaceは成長し、次第に複雑になって行くにつれて、標準的なユーザー・インターフェースでは限界がでてきます。例えば、奥深いルームに入っていくと、コンテキストを失いがちです。そのルームのTOCしか見えていませんから、ルームの中にルームを入れることはできても、標準のTOCではその入れ子を表現できませんし、Workplace内におけるロケーションを把握する情報は何一つ提示されません。

Explorer PlaceTypeは、Workplaceの構造を広い視野で、複雑な構造をユーザーに見えるようにしてくれます。そして、直接、縦横無尽に移動することができるようになります。標準のTOCの代わりに、このExplorer PlaceTypeを使ったWorkplaceでは、WindowsのExplorerに似たパネルが表示されます。点線で表された線は階層構造を示しており、小さなアイコンは階層構造内におけるオブジェクト・タイプを示しています。

図3. Explorer PlaceTypeナビゲーター


Explorer PlaceTypeは、Xavier DefossezがフランスのIBM Lotus Consultingと共同で作成したものです。そして、Lotus Team Workplaceの開発で5年の経験を積んだベテランであるTony Estradaがそれを練り上げ、Lotusphere 2004のLotus Team Workplaceのカスタマイズのプレゼンテーション(Helen Daiと共に実施)でのベースとして使用されました。

ナビゲーションの機能拡張はExplorer PlaceTypeの機能のほんのひとつです。その他にも、TOCからアイテムをいくつかを省いたカスタム・テーマも含まれています。代わりにWorkplaceの上にアクション・ボタン、具体的には拡張検索(Advanced Search)、What's New、ヘルプ、オフライン(Work Offline)を配置しています。Windows Explorerスタイルのアドレス・バーもまた追加されていて、現在のロケーションを表すアドレスが表示されるようになっています。

図4. Explorer PlaceTypeのユーザー・インターフェース


このページはご覧の通り、もとの機能はそのままにしておき、テーマやスキンで異なるルック&フィールとなっています。みばえと機能の関連はテーマ文書で関係づけられます。テーマはHTML(DHTML)ファイルとスタイルシートと画像データのセットです。ここでは標準のHTMLを使用することで、下に示す複数の目標を実現しています。

  • 複数のタイプ用にページ・レイアウトを作成する。複数のタイプには、読み込み用ページ、編集用ページ、ヘッドライン・フォルダーなどがあります。
  • Lotus Team Workplace Graphics Serverを実行して、要素を表示する際のスタイルを指定する。
  • 検索バーやページ・タイトルやアクション・ボタンなど多くの数多くのLotus Team Workplaceのユーザー・インターフェース・コンポーネントをページ上に配置する。これは、<QuickPlaceSkinComponent>という特別なタグをHTMLに埋め込むことで実現しています。
  • ページと関連した他のアクションを実行するPlaceBotの呼び出し。この他のアクションはユーザーからは見えないものもあります。例えば新規文書の作成のロギングやその作成者名の記録などです。また、見えるものとしては、Explorer TOCパネルの作成のアクションといったものがあります。
一度でもHTMLを書いた経験があるのでしたら、最初に何から始めなければならないかはお分かりかと思います。HTMLを使ってページを構成する要素を作成して配置することです。しかし、最後の3つ、Graphics Server、Componentsタグ、PlaceBotsに関しては、標準HTMLではありません。では、詳しく見ていきましょう。

テーマ用のコード
Explorer PlaceType用のコードを全て見るには、Sandboxからzip形式のファイルをダウンロードして、それを使ってWorkplaceを作る必要があります。Workplaceを開いて、カスタマイズしたテーマのpage.htmをハードディスクに保存します。

Graphics Serverの利用
Page.htmは標準的な<IMG>タグを使って、Lotus Team Workplace Graphics Serverを呼び出します。しかし、使い方は全く標準的ではありません。上で示したサンプルでは"Lotusphere 2004"が先頭に書かれたページをみましたが、そのスタイルを作るExplorerのテーマ文書のコードをここに示します。

<td background="Page_Files\fond_barre.gif" height="32" >
<center>
<img src="../../../QuickPlace/xplorer01/$resources.nsf?GetImage&
TextString=%20LotuSphere%202004&OutTransColor=e5e599&
FontName=Encino&FontPointSize=16&FontColor=ff6600&
FontBold=1&FontAntiAliasColor=e5e599&EffectType=Shadow&
BlurFactor=3&ShadowColor=808080&ShadowXOffset=2&
ShadowYOffset=2&BkColor=e5e599&Animation=FADEIN&
AnFrames=16&AnDelay=15&AnLoop=0&FontGroup=h_FontModern"
border="0">
</center>
</td>

一般的に、HTMLイメージ・タグでは静的ファイルの場所を指定しています。しかし、このタグはLotus Team Workplace Graphics Serverにファイルをリクエストして、グラフィックを作成するのに必要なパラメーターを全て渡します。このケースでは、Lotusphere 2004という語句をEncinoタイプフェース、色はオレンジ、グレーのドロップ・シャドー付きで呼び出しています。

Graphics Serverはオンザフライで動作して、Lotus Team Workplaceのテーマ、テキストの変更、テキスト・カラーの変更、カラー、効果などを変えてカスタマイズすることができます。Graphics Serverのおかげで、Workplaceのルック&フィールを簡単に、大きく変更することが可能になっています。

コンポーネントの呼び出し
コンポーネント・タグもまたHTMLのような形をしています。しかしそれ以上のものなのです。このpage.htmのコードは、Lotus Team Workplaceが標準で備える拡張検索(Advanced Search)コンポーネントを同一ページ上配置したものです。

<QuickPlaceSkinComponent
name=AdvancedSearch
prefixHTML={}
Format={<td onMouseOver=(this.background=fond_action.src)
onMouseOut=(this.background=pix_transparent.src)><
img src="Page_Files\rechercher.gif" height="17" width="27" border="0"
align='top' valign='top'><item>&nbsp;&nbsp;</td>

}

EmptyFormat={}
replaceString={}>

いくつかのタグ・アトリビュート(属性)が空のままになっていることに気が付かれたかもしれません。Formatアトリビュートにはロールオーバー・ボタンを作成するJavaScriptが含まれています。
Graphics Serverがオンザフライで動作するのと同じように、Lotus Team Workplaceサーバーはオンザフライでこのコード(ブラウザーは理解できず無視する)をJavaScriptに書き換え、ブラウザーが理解できる形で検索機能を呼び出すURLを指定します。

PlaceBotsの実行
最後に、PlaceBotを実行して階層構造のTOCを作成する、page.htmのコードを紹介します。

<iframe
src="../../../main.nsf/menu?openagent"
visibility="show"
FRAMEBORDER="0"
SCROLLING="auto"
width="180"
height="380"
ALLOWTRANSPARENCY="true">
</iframe>

これが最もシンプルな3つの例になります。しかし、最終製品には最大級のインパクトがあります。すぐ分かると思いますが、この9行のコードは、Lotus Team Workplaceサーバー上で処理される大量の作業のためのラッパーになっています。

Iframeタグを使うと、ページ上でTOC文書を含んだフローティング・フレームを作成することができます。文書自体はSRCアトリビュートで示されています。このケースでは静的なファイルではなく、PlaceBotでダイナミックに生成され、Workplaceのmain.nsfデータベースのメニューを作成します。
 
上に戻る
 
メニューPlaceBotの内側
メニューと名付けられたPlaceBotはPlaceにある文書を全てスキャンして、ブラウザーに渡すJavaScriptを作成します。このJavaScriptはブラウザーに渡されるとdocument.writeメソッドを使ってTOCを表示します。とてもシンプルに見えることでしょう。このメニュー用コードは4つのサブルーチンと関数に分かれています。Domino Designerを使ってmain.nsfを開くとその内容を見ることができます。(メニューの「共有コード」-「エージェント」の下を探してみてください。) しかし、それが行っていることは複雑です。

最初に、LotusScriptでJavaScriptを生成する
PlaceBotは、TOCを生成するJavaScriptを生成します。これを別の言い方で表現すると、メニューPlaceBotが自動車工場での製造ロボットだと仮定すると、車を作ることはできないが、車を作るロボットを作る、と言えます。

PlaceBotは3つの変数の宣言から始まります。
  • Path、データベースへのパス、文字列。
  • TextToPrint、iframeのJavaScriptコンテンツに最終的になるところの文字列。
  • menuLevel、階層構造内における現文書のレベルを示すもの。整数。
そして、サブルーチンは、Printscript、getPath、MenuRoom、PrintEndの順番で実行され、最後にPrintステートメントによりTextTpPrintの文字列がブラウザーに送られます。

Printscript
Printscriptサブルーチンは、スタイルシートとTOCを作成するのに必要なJavaScript関数を全てからなる非常に長い文字列をTextToPrintに書き込むところから始まります。

getPath
この短いサブルーチンは、データベースへのパスを適切な形式で返すものです。たった7行のコードですが、このサブルーチンをつくることで、パフォーマンスを向上させる小さな推進力となっています。パスは、各文書について計算されるのではなく、一回だけ計算されます。

MenuRoom(main.nsf)
重い作業が行われている場所がここです。MenuRoomはWorkplaceの全文書をチェックして、以下に示すアイテムを取り出します。
  • 階層におけるレベル
  • タイプ
  • タイトル(一つのみ場合)
  • タイプを示すアイコン名称(GetImageType関数で返ってきた値)
  • 現在開いている文書と関連性のある文書へのURLリンク
ここでは、setEntryというJavaScript関数をコールした際に、この情報がTextToPrint文字列へ書き込まれます。LotusScriptのコードは以下のようになります。

TextToPrint=TextToPrint + |setEntry(| + Str(menuLevel) + |,| + entry + title + menuIcon + link + |);| + Chr(13)


その結果、アウトプットされる行はこのようになります。

setEntry(0,2,"Calendar","folder_agenda", "../main.nsf/h_toc/2A922D48C75DD00B052567080016723A/?opendocument" );

ブラウザーからこれらのコールを実行すると、配列セットにデータがロードされます。

PrintEnd
全ての文書の追加が終わると、JavaScriptコードのPrintEndサブルーチン・タブが実行され、メニュー・アイテムの配列データと</script>タグを処理します。
エージェントのInitializeオブジェクトの最終行の、Print TextToPrintは、JavaScriptをiframeに出すためのもので、後はブラウザーのJavaScriptインタープリターが引き継ぎます。
 
上に戻る
 
そしてJavaScriptがHTMLを生成
JavaScriptインタープリターは、PlaceBotが作成したパッケージを解凍し、ツールと生データを取り出します。

まず、TOC用のローカルのスタイルシートから始まります。これは、ヘッドラインのタイプ・サイズとマウスオーバーのフォントとカラーをセットするものです。そして、配列を作成してmain.nsfから、setEntry関数を使ってデータを埋めていきます。

function setEntry( Alevel,Atype,Atexte,Aimage,Alien)
{
level[nb] = Alevel;
type[nb] = Atype;
pere[nb] = Apere;
status[nb]= 0;
textString[nb] = Atexte;
image[nb] = Aimage;
line[nb] = Alien;
nb+=1;
}

(元々フランス語で作られたコードでしたら、変数の名前で見分けがつきます。(これは英語版)JavaScriptはすべて、PrintScriptというメニューPlaceBotのサブルーチンで見ることができることを覚えておいてください。

processMenuItemというJavaScript関数は、MenuRoomというPlaceBotのサブルーチンの関数と同じく、別の長いテキスト文字列を生成します。但し、これはTextToPrintよりさらにチェーンでコールされます。また、JavaScriptではなくHTMLです。このHTMLはこのコマンドと共にブラウザーに送信されます。

menu.innerHTML=chain;

(Netscapeブラウザーの場合にはさらにもう少し複雑です。これはNetscapeがinnterHTMLプロパティーをサポートしていないためです。しかし、ご覧の通りJavaScriptを見ると分かるのですが、それでも数行のコードで済んでいます。)

改良へのアイデア
Explorer TOCでは現在のルームからコンテンツを表示するように拡張するに留まりましたが、メニューPlaceBotはユーザーが新規ルームに入るたびにルーム全体の文書を全て読み取っています。大規模なWorkplaceでたくさんのルームと更に入れ子でルームがある場合においてはパフォーマンス上考えておかなければならないでしょう。例えば、スキャンするルームのメニューをある程度制限し、かつ現在のルームのコンテンツだけにしたほうがいいでしょう。非常に望ましい機能拡張のひとつとして、ルームの管理者が、ユーザーの注意を喚起する方法として、フォルダーから文書をルームのTOCへ追加できるようにすることです。
 
上に戻る
 
まとめ
Explorer PlaceTypeの階層構造でのTOCは、IBM Lotus Team Workplaceにとって非常に貴重な追加機能です。複雑なWorkplaceであってもナビゲーションが楽になり、使いやすくなります。さらに、Lotus Team WorkplaceをカスタマイズするDominoの開発者にとっても、独自のテーマとPlaceBotの作成を行う出発点として重要なケース・スタディーと言えるでしょう。

リソース 次回は、エージェントを使ってキーワード・リストを作成する方法を紹介します。最終的には、リレーショナル・データベースにアクセスしてキーワード・リストを作成する方法について検討します。



筆者について(原文のまま)
David DeJean has been working with and writing about Lotus Notes and Domino for as long as they've existed. He was co-author of the very first book about Notes, "Lotus Notes at Work," and has been an editor and writer for a variety of computer publications. He is a Lotus CLP and a partner in DeJean & Clemens, a firm that does Notes and Internet application development and technical and marketing communications.
 
上に戻る