IBM Lotus Domino用のPHPベースのUIを構築する

PHPプログラミング言語で作成されたWebアプリケーションでLotus Dominoデータベースと対話する方法について解説します。COMオブジェクト、Lotus Notes API、およびXMLを使用してPHPページからLotus Dominoアプリケーションにアクセスする方法を理解しましょう。

Andrei Kouvchinnikov, Principal Domino Developer, Botstation Technologies

Andrei Kouvchinnikov is a certified Principal Domino Developer and Administrator. His experience includes full life cycle development of Lotus Domino applications running on multiple platforms and development of applications for QuickPlace and Sametime. He has been working with the Lotus Domino platform since R4.5 for OS2. You can reach Andrei at andrei@botstation.com.



2006年 5月 09日

この記事では、PHPプログラミング言語で作成されたWebアプリケーションでIBM Lotus Dominoデータベースと対話する方法について説明します。また、COMオブジェクト、Lotus Notesアプリケーション・プログラミング・インターフェース(API)、およびXMLを使用して、PHPページからLotus Dominoアプリケーションにアクセスする方法についても説明します。それぞれの方法のサンプル・コードが「ダウンロード」セクションに用意されています。XMLによる方法にも、IBM Lotus Dominoメール・データベースへのシンプルなWebインターフェースを持つサンプル・アプリケーションが用意されていて、ダウンロードできます(図1参照)。

図1.メール・データベースへのPHPユーザー・インターフェースの例
図1.メール・データベースへのPHPユーザー・インターフェースの例

PHPは強力な埋め込みスクリプト言語です。自由に使用でき、動的なWebアプリケーションの開発によく用いられています。PHPのコードはコンパイルされず、実行時に解釈されます。その構文の多くはC、Java、およびPerlの各プログラミング言語から取り入れられています。PHPはCommon Gateway Interface(CGI)エンジンとして、ほとんどのWebサーバーに追加できます。PHPは、Microsoft WindowsおよびLinuxオペレーティング・システムでも動作します。Webホスティング企業の50パーセント以上が、PHP対応のサーバーを保持しています。PHPテクノロジーはこのように広範囲に利用されており、知らないで済ませることはできないでしょう。

PHPの使用

PHPコードは、特殊タグを用いてWebページに含めます。すべてのPHPコードは、<?phpタグで始まり、?>タグで終了します。

<html>
 <body>
   <?php echo “Hello World!”; ?>
 </body>
</html>

WebサーバーはこのPHPコードを解釈して、次のHTML出力に変換します。

<html>
 <body>
   Hello World!
 </body>
</html>

PHP Webページは、いくつかの方法でLotus Dominoデータベースと対話できます。どの統合方法を選択するかは、PHPを実行するために使用するオペレーティング・システム、PHPとLotus Dominoサーバー間にあるセキュリティーの制限、PHPサーバーにインストールできる内容に応じて異なります。この記事では、次の方法について解説します。

  • COMオブジェクト
  • Lotus Notes API
  • Web経由のXML

オフラインでのPHPコードの実行

PHPは主にWebサーバーで実行することを目的とし、スタンドアロン・アプリケーション向けではありませんが、Microsoft Visual Basic Scripting Edition(VBScript)のようなシェル・スクリプト・ツールとしてコマンド・ラインからも実行できます。この機能は、Webサーバー上にファイルを配置する前のオフライン・テスト用として役に立ちます。


Lotus Dominoへのアクセス

Lotus Dominoデータベースには、COMオブジェクト、Notes API、およびXMLという3つの方法を介してアクセスすることができます。

Lotus Domino COMオブジェクトを使用したLotus Dominoへのアクセス

Lotus Dominoデータベースに保存されている情報にアクセスする最も簡単で速い方法は、Lotus Domino COMオブジェクトを介した方法です。LotusScriptからCOMを使用するときと同程度の難易度で、PHPからCOMを使用できます。たとえば、次のサンプル・コードは、ビュー内のすべての文書のフィールド値を出力する方法を示します。

<?php
//Initiate Lotus Notes session
$session = new COM( "Lotus.NotesSession" );
$session->Initialize();

//Show the name of the current Notes user
print "Current user: " . $session->CommonUserName . "\n\n";

//Get database handle
$db = $session->getDatabase( "", "mailtest.nsf" );

//Get view handle using previously received database handle.
//Note that the reserved character in the view name must be \-escaped 
$view = $db->getView( "(\$Drafts)" );

//Get first document in view using previously received view handle
$doc = $view->getFirstDocument();

//Loop until all documents in view are processed
while (is_object($doc)) {

//Get handle to a field called "Subject"
$field=$doc->GetFirstItem("Subject"); 

//Get text value of the field
$fieldvalue=$field->text;

//Show the value of the field
print "Subject: " . $fieldvalue . "\n";

//Get next document in the view
$doc = $view->getNextDocument($doc);
}
//Release the session object
$session = null;
?>

コマンド・ラインからCOMオブジェクトを実行したときの出力を図2に示します。

図2.コマンド・プロンプトでのCOMオブジェクト・コードの実行結果
図2.コマンド・プロンプトでのCOMオブジェクト・コードの実行結果

COMオブジェクトを使うこと自体は簡単ですが、COMの使用を制限するような欠点がいくつかあります。最も大きな欠点は、PHPサーバーにLotus Notes Clientソフトウェアをインストールしなければならないことです。PHPアプリケーション用にWebホスティング会社を利用している場合は、ご自分のPHP Webサイトのためだけに、ホスティング会社にLotus Notes Clientをインストールしてもらうことは非常に難しいでしょう。専用のPHPサーバーを持っている、またはPHPとLotus Domino Serverが同じコンピューター上にインストールされている場合は、何の問題もなくCOMをセットアップし、Lotus Domino Serverにアクセスできます。

COMの使用を制限するもう1つの問題は、COMオブジェクトがWindowsプラットフォームでのみサポートされていることです。ほとんどのPHPサーバーがLinuxプラットフォームで実行されていることを考えると、たとえサーバーに対して管理権限を持っていても、COMソリューションをホストできるサーバーの数はかなり少なくなるでしょう。

APIを介したLotus Dominoへのアクセス

COMアクセスの代替となるのが、Lotus Notes/Domino C APIを使用する方法です。このソリューションは、理論的にWindows以外のオペレーティング・システムでも使用できます。ただし、この方法は、C/C++プログラミングの経験が豊富な開発者だけが使用することをお勧めします(COMインターフェースまたはXMLを使用しない理由がある場合)。サンプルのAPIソリューションで提供される機能は限られていて、ほとんどのタスクを実行するために、基本的にはCプログラミング言語を使用して独自のコードを書く必要があります。

サンプル・ライブラリーには、PHP拡張を作成するために役に立つ例が含まれています。サンプル・ライブラリーはソース・コードでのみ提供されていて、コードをコンパイルするために、Visual CコンパイラーとLotus Domino C APIツールキットが必要です。ここでは、読者のためにソース・コードをDLLファイルにコンパイルしたものが、「ダウンロード」セクションに用意されています。Lotus Notes拡張を有効にするには、次の行をphp.ini構成ファイルに追加します。

extension=php5_notes.dll

次のサンプル・コードは、必要なDLLを作成した後に、この手法をどのように使用するのかを示しています。

<?php

$dbpath="mailtest.nsf";
$searchword="demo";

//Perform full text search in the specified database.
//The result is an array of Note IDs
$search=notes_search ( $dbpath, $searchword );

If($search[0]==NULL){
die("\nNo results were found for search word '$searchword'\n");
}

//Show number of found documents
print "\nFound " .count($search) . " results for search word '$searchword'\n";

?>

コマンド・ラインからAPIコードを実行したときの出力を図3に示します。

図3.APIコードの出力
図3.APIコードの出力

XMLを使用したLotus Dominoへのアクセス

XMLを使用してLotus Dominoデータベースと対話する方法は、最も互換性の高い方法です。この方法は、PHP Webサーバーで特別な調整やインストールを必要とせず、すべてのオペレーティング・システムで機能します。ほとんどケースで最良の手法と考えられます。

この記事で説明するXMLソリューションでは、ほとんどの設定で機能する可能性が高い手法を使用します。例として、Lotus Dominoの標準メール・データベースへのPHPインターフェースを作成します。Lotus Domino環境では、メール文書からのフィールドを表示するLotusScriptエージェントだけを変更します。同じエージェントを使用してXMLを解析し、メールを作成して送信します。

メール・データベースの[受信ボックス]フォルダーを表示するには、次の手順に従います。

  1. ユーザーに、Lotus Notesユーザー名とパスワードの入力を求めます。
  2. 入力されたユーザー名とパスワードを使用して、Lotus Dominoデータベースにログイン要求を送信します(図4参照)。
    図4.PHPサンプル・アプリケーションでのログイン画面
    図4.PHPサンプル・アプリケーションでのログイン画面
  3. ログイン応答で、セッションCookieを取得します。(このCookieは、以降のLotus Dominoデータベースへの要求で必要になります。)
  4. ReadViewEntries URLコマンドを使用して、Lotus Domino Serverに対して[受信ボックス]フォルダーのXMLソースを要求します。このコマンドは、ビューの内容をHTMLではなくXMLフォームで返します。要求ヘッダーにセッションCookieを付加することにより、ユーザーの識別をLotus Dominoに通知します。
  5. XML形式のビューの内容を受信したら、PHPのXMLパーサーを使用して、文書とフィールドを検出します。
  6. XMLパーサーが文書全体を処理した後、HTMLコードを構築し、ブラウザーに出力します。メール・メッセージをクリック可能なリンクにするには、各文書ノードのUNID属性を使用します。

Lotus Dominoデータベースにアクセスするには、Lotus Domino ServerからWebページを取得する機能と、XMLを解析する機能の両方が必要です。また、デモ・アプリケーションでは、次の条件も必要となります。

  • Lotus Domino Serverがバージョン6以降であること。それよりも前のバージョンでは、LotusScriptのXML解析機能を使用できません。(LotusScriptエージェントの詳細については後述します。)
  • PHP WebサーバーがWeb要求の送出を許可すること。
  • Lotus Domino Serverが、インターネットまたはイントラネット経由でPHP Webサーバーからアクセスできること。

メモ:インターネットからLotus Domino Serverにアクセスできない場合は、PHPサーバーからのトラフィックを許可するようファイアウォールの設定を調整する必要があります。


WebベースのLotus Dominoファイルを読み取るPHP関数

PHPには、Webベースのコンテンツを取得するいくつかの関数があります。これらの関数は始めからPHPに含まれていますが、システム管理者がこれらを有効にしているとは限りません。Webからファイルを取得する関数は次のとおりです。

  • file_get_contents() -この関数は使いやすく、GETとPOSTの両方の要求タイプをサポートします。file_get_contents()を使用すると、一度にWebファイル全体を1つのストリングとして取得できます。
  • fopen() -この関数はWebファイルをまとめて読み込みます。
  • file() -この関数はWebファイル全体を読み取り、ファイルの内容を1行ごとに分割します。これは、file_get_contents()とfopen()の一種の交差として機能します。
  • fsockopen() -これは、ホスティングWebサーバーで有効になっている可能性が最も高い関数です。この関数と他の関数の大きな違いとして、fsockopen()では、異なるパラメーターを設定する代わりに、Web要求全体を独自に作成する必要があります。
  • CURL -Client URL Library (CURL)は最も進んだ機能を持っています。CURLを使用すると、さまざまなタイプのプロトコルを使用する多くのタイプのサーバーに接続し、コミュニケートすることができます。現在、CURLは、HTTP、HTTPS、FTP、Gopher、Telnet、DICT、File、およびLDAPをサポートします。また、プロキシー、Cookie、認証もサポートします。Webホスティング会社によってはCURLが無効にされていることがあります。

メモ:この記事のサンプル・アプリケーションでは、file_get_contents()関数を単独で使用します。

Lotus DominoのセッションCookieを取得することはプロセスの重要な部分であり、Lotus Dominoに関連する他のアプリケーションでも同じコードを使用できます。たとえば、IBM Lotus SametimeへログインするためのCookieをSTLinkを使用して取得できます。

セッションCookieを取得するには、POST要求をLotus Domino Serverに送信します。この要求には、ユーザー名とパスワードを含めます。サーバーからの応答にはCookieが含まれていて、Lotus Domino Serverへの以降の要求では、このCookieを使用します。セッションCookieを含めることによって、Lotus Domino Serverは、スクリプトは実際には先ほどログインしたユーザーであり、現在データベースにアクセスしている、と判断します。

GETメソッドではなくPOSTメソッドを使用するのは、GETメソッドのURLはLotus Dominoのログに記録され、ログにアクセスする任意のユーザーに、ユーザー名とパスワードがプレーン・テキストで表示されてしまうからです。POSTメソッドを使用すると、ユーザー名とパスワードはURLに含められないため、通常のログでは見られません。

Lotus DominoのセッションCookieは、Set-Cookie応答ヘッダー内にあります。セッション Cookieの名前は、DomAuthSessIdまたはLtpaTokenのいずれかです。Lotus Domino Serverでシングル・サインオン(SSO)が設定されている場合は、LtpaTokenという名前を使用します。実際には、Cookieの名前を気にする必要はなく、Cookieストリング全体を保存するだけでかまいません。

次のサンプル・コードは、Cookieの取得方法を示します。

    $req="username=john+doe&password=john123";
$opts = array(
  "http"=>array(
    "method"=>"POST",
    "content" => $req,
    "header"=>"Accept-language: en\r\n" . 
    "User-Agent: Mozilla/4.0 (compatible; 
           MSIE 6.0; Windows NT 5.1)\r\n"
    )
);
$context = stream_context_create($opts);
if (!($fp = fopen("http://server.com/maildb.nsf?login", 
                  "r", false, $context))) {
 die("Could not open login URL");
}
$meta = stream_get_meta_data($fp);
for ($j = 0; isset($meta["wrapper_data"][$j]); $j++)
{
 if (strstr(strtolower($meta["wrapper_data"][$j]), 'set-cookie'))
{
$cookie = substr($meta["wrapper_data"][$j],12); 
break;
}
}
fclose($fp);
$_SESSION["DominoCookie"]=$cookie;

コード行「$req="username=john+doe&password=john123"」で、Lotus Domino Serverへのログインに使用する有効なユーザー名とパスワードを提供します。次に、POSTメソッド・タイプと他のヘッダーなどの追加オプションをセットアップします。この後で、送信するHTTP要求に追加オプションを適用します。

fopen("http://server.com/mydb.nsf?login", "r", false, $context)

Lotus Domino Serverから受信した応答で、stream_get_meta_data($fp)関数を使用してすべてのヘッダーを取得し、ヘッダーをループ処理してSet-Cookieストリングを含むヘッダーを見つけます。その後、Cookieをセッション変数に格納し、保存します。

$_SESSION["DominoCookie"]=$cookie

$_SESSIONは、Webブラウザーが閉じられるまで、Cookie値を保持します。

これで、Lotus Dominoメール・データベースから[受信ボックス]ビュー/フォルダーを取得する次回の要求に、このCookieを適用できます。

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
    “User-Agent: Mozilla/4.0 (compatible;
          MSIE 6.0; Windows NT 5.1)\r\n" .
    "Cookie: " . $_SESSION["DominoCookie"] . "\r\n"
)
);
$context = stream_context_create($opts);
$xml = file_get_contents(
"http://server.com/maildb.nsf/(\$Inbox)?ReadViewEntries", 
          false, $context);

今回は、POSTメソッドの代わりにGETメソッドを使用してWebページをダウンロードします。このメソッドは、HTTPオプション配列の「'method'=>"GET"」行で指定されます。ヘッダーだけを読むのではなく、file_get_contents(URL, false, context)関数を使用して、応答全体を読み取ります。この操作の結果として、[受信ボックス]ビューのすべての列が含まれる長いXMLストリングが得られます。セッションCookieは次の構文でヘッダーに付加します。

"Cookie: " . $_SESSION["DominoCookie"] . "\r\n"

XMLデータの受信後、PHP XMLパーサーでそのXMLデータを処理できます。そして、[受信ボックス]ビュー用の独自のユーザー・インターフェースを作成します。


XMLを処理するPHP関数

PHPには、LotusScriptやJavaプログラミング言語と同様に、XMLコードを処理する方法として、Simple API for XML (SAX)とDocument Object Model (DOM)の2つの方法があります。SAXはイベント・ベースのプログラミング・モデルで、ほとんどのPHP Webサーバーにデフォルトで導入され、有効になっています。DOM拡張は、Webサーバーの管理者が有効にする必要があります。プログラミングはDOMの方がかなり容易ですが、ほとんどのPHP設定と最も高い互換性を得るために、今回の例ではSAXパーサーを使用します。

Lotus Dominoビューの処理に似た手法は、小さな変更を加えるだけで、RSSフィードやWebサービスなど、他のXMLソースの処理にも使用できます。次のサンプル・コードは、1つの文書を含む[受信ボックス]ビューのXMLソースを示します。

<?xml version="1.0" encoding="UTF-8"?>
<viewentries toplevelentries="6">
<viewentry position="1" 
unid="38B16601EC8B42BAC12571440068335C" noteid="8FE" siblings="6">
    <entrydata columnnumber="0" name="$109">
            <text></text>
    </entrydata>
    <entrydata columnnumber="1" name="$86">
            <numberlist><number>0</number><number>0</number>
            </numberlist>
    </entrydata>
    <entrydata columnnumber="2" name="$93">
            <text>Donald Duck</text>
    </entrydata>
    <entrydata columnnumber="3" name="$102">
            <number>178</number>
    </entrydata>
    <entrydata columnnumber="4" name="$70">
            <datetime dst="true">20060402T205929,52+02</datetime>
    </entrydata>
    <entrydata columnnumber="5" name="$99">
            <datetime dst="true">20060402T205929,52+02</datetime>
    </entrydata>
    <entrydata columnnumber="6" name="$106">
            <number>823</number>
    </entrydata>
    <entrydata columnnumber="7" name="$97">
            <number>0</number>
    </entrydata>
    <entrydata columnnumber="8" name="$73">
            <text>seen Mickey?</text>
    </entrydata>
</viewentry>
</viewentries>

コードからわかるように、XMLソースでは、文書は<viewentry>タグで表され、列(フィールド)は<entrydata>タグで表されます。文書のUniversal IDは、<viewentry>ノードの属性として利用できます。

ここで必要なことは、必要なすべてのデータを得るために、これらのタグ間で値をプログラマチックに検出する方法を決めることです。これは、簡単に行うことができます。まず、xml_parser_create関数を使用してXMLパーサー・オブジェクトを生成します。

$xml_parser = xml_parser_create();

次に、XML要素の開始と終了を扱うコールバック関数を設定します。これらの関数は、xml_set_element_handler関数およびxml_set_character_data_handler関数を使用することにより、XMLプロセッサーで識別されます。各関数は、パーサー・ハンドルとコールバック関数の名前を受け取ります。

xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "textData");

ご使用になるPHPコードに、startElement、endElement、およびtextDataの各関数を追加する必要があります。

function startElement($parser, $name, $attributes) {
switch($name) {
  case "VIEWENTRY":
    $main = "VIEWENTRY";
    if($attributes["UNID"]!=""){
      $current_doc=$attributes["UNID"];
      $unids[$doc_counter]=$current_doc;
    }
    break;
  case "ENTRYDATA":
    $main = "ENTRYDATA";
    if($attributes["COLUMNNUMBER"]!=""){
      $current_column=$attributes["COLUMNNUMBER"];
    }
    break;
  case "DATETIME":
    $main = "DATETIME";
    break;
  default:
    break;
 } }

function endElement($parser, $name) {
if ($name == "VIEWENTRY") {
  $doc_counter++;  //increase document counter by 1
}
$current_column="";
}


function textData($parser, $data) {
switch($main) {
  case "ENTRYDATA":
    if (isset($doc_coll[$current_doc][$main])) {
      $doc_coll[$current_doc][$main][$current_column] .= "$data";
    } else {
      $doc_coll[$current_doc][$main][$current_column] = "$data";
    }
    break;
  case "DATETIME":
    if (isset($doc_coll[$current_doc][$main])) {
      $doc_coll[$current_doc][$main] .= "$data";
    } else {
      $doc_coll[$current_doc][$main] = "$data";
    }
  break;
  case "VIEWENTRY":
   break;
} }

それでは、これがどのように機能するのか見ていきましょう。XMLパーサーがXMLソースを読み込み、新しい要素が開始したことを発見すると、startElement関数を起動します。これは、コールバック関数として指定された関数です。この場合、このような開始要素名は<ENTRYDATA>です。これで、処理されている現在の要素が新しい列であると判明したため、$current_column変数にその列の番号を設定できます。この場合、列はフィールドを表します。

case "ENTRYDATA":
    $main = "ENTRYDATA";
    if($attributes["COLUMNNUMBER"]!=""){
      $current_column=$attributes["COLUMNNUMBER"];
    }
    break;

この後、パーサーは<ENTRYDATA>ノードでテキストを検出し、コールバック関数として指定されたtextData関数にこのテキストを送信します。この関数の目的は、<ENTRYDATA>ノード内に含まれる値で配列を作成することです。

switch($main) {
  case "ENTRYDATA":
    if (isset($doc_coll[$current_doc][$main])) {
      $doc_coll[$current_doc][$main][$current_column] .= "$data";
    } else {
      $doc_coll[$current_doc][$main][$current_column] = "$data";
    }
    break;

XMLソースのサンプルを使用すると、コード行「$doc_coll[$current_doc][$main][$current_column] = "$data"」は次のようになります。

$doc_coll[“38B16601EC8B42BAC12571440068335C ”][“ENTRYDATA”][“8”] = "seen Mickey?"

これは、「38B16601EC8B42BAC12571440068335C」というUniversal IDを持つ文書の[受信ボックス]ビューの8番目の列は"seen Mickey?"で、メール・メッセージの件名にあたることを意味します。

XMLパーサーは、開始した要素はどこかで終了しなければならないことを理解しています。このため、パーサーは要素の終了を検出すると、endElement関数を起動することによってそれを通知します(2番目のコールバック関数として指定したものと同じ関数名です)。これ以上その列番号は必要ないため、この関数で列番号をリセットします。また、文書カウンターの増加が必要かどうかをチェックします。

Universal IDが保存される配列には、$doc_counter変数をカウンターとして使用します。Universal IDは、主にメール文書へのリンクを追加するために保存する必要があります。VIEWENTRY要素の終了を認識した場合は、次に新しいUniversal IDが来ることを意味するので、$doc_coll配列と$unids配列の同期を維持するために、現在の配列番号を1つ増加させてください。

if ($name == "VIEWENTRY") {
  $doc_counter++; 
}
$current_column="";

サンプル・アプリケーションをダウンロードし、サーバーで実行する場合、お使いになっているLotus Dominoメール・データベースのメール・ビューで列の配置が異なることがあります。このような場合は、PHPコード(docfunctions.php)で列番号を調整してください。


サンプルPHPアプリケーションとLotusScriptエージェント

このセクションでは、ProcessDocWebActionというLotus Dominoエージェントについて説明します。これは、この記事でダウンロードできるサンプル・アプリケーションの一部として含まれています。このエージェントはLotusScriptによってプログラミングされていて、DOMを使用して、受信したXML要求を解析します。このエージェントは新しいXMLスクリプト・クラスを使用しているため、アプリケーションはリリース6およびリリース7のLotus Domino Serverで使用できますが、リリース5のLotus Domino Serverでは使用できません。

このエージェントが処理する要求は、サンプルPHPアプリケーションによって開始されます。要求のタイプは次のとおりです。

  • メール・メッセージの作成と送信
  • 既存のメール文書の保存
  • 新規メール文書をドラフトとして保存
  • ユーザー・ファイルの場所に関する情報の要求
  • ユーザーがまだログインしていることを確認するダミーのPing要求

エージェントをデプロイするには、次の手順に従います。

  1. xmlagent.lssファイルからすべてのテキストをコピーします。
  2. 選択したデータベースで新規エージェントを作成します。
  3. エージェントのプロパティーを[Webユーザーで実行]に設定し、ターゲットを[なし]に設定します。
  4. コピーしたコードを新規エージェント内に貼り付けます。
  5. エージェントにProcessDocWebActionという名前を付け、保存します。
  6. PHPファイル(dominomail.php)で、エージェントが保存されているデータベースのURLロケーションを指定します。

PHPサンプル・アプリケーションの作成で最も優先したのは、すべての標準メール・データベースで設計の変更なしにエージェントを動作させることでした。このため、このアプリケーションはメール・データベースの設計の変更を必要としません。XMLを処理するエージェントはユーザーのメール・データベース外に置くことができ、同じエージェントを使用してすべてのユーザーを処理できます。

ユーザーが初めて認証するとき、PHPアプリケーションは、セッションCookieを取得した後、ユーザーのメール・ファイルの場所をこのエージェントに問い合わせます。エージェントは、[Webユーザーで実行]プロパティーが有効な状態で実行されているため、誰がエージェントを起動したのかを認識できます。この初期要求の後、ユーザーがWebブラウザーを閉じるか、セッションが期限切れになるまで、ユーザーのメール・データベースへのパスが、再利用に備えて保存されます。

ユーザーは、常にLotus Dominoの真の認証を使用して認証されます。たとえ、ユーザーがWebサーバー上でPHPのソース・コードを変更できたとしても、ユーザーはアクセス権を持たないリソースにはWebブラウザー・クライアントからアクセスできません。


まとめ

インターネットからLotus Domino Serverにアクセスできない場合でも、Lotus Dominoの開発者、またはシステム管理者は、ユーザーがLotus Dominoデータベースに保存されているデータにアクセスし、電子メール・メッセージを読み書きする方法を提供することができます。この記事で説明した、サンプル・アプリケーションに適用したXML手法を使用することにより、独自のPHPアプリケーションにLotus Domino認証を実装し、Lotus Dominoディレクトリーに対してログインを検証することが簡単にできます。

WebベースのこのXMLソリューションでは、ユーザーのアクセス権は変更されないため、ユーザーはそれぞれの操作で各自のクレデンシャルを使用します。これにより、権限を持たないデータにユーザーがアクセスできないことが保証されます。セキュリティーをさらに高めるために、失敗したログインの試みをログに記録することができます。


ダウンロード

内容ファイル名サイズ
Source code of PHP applicationphp_app_sample.zip10KB
LotusScript agent used for processing XMLxmlagent.zip2KB
Compiled version of Notes API extensionphp_notes_dll.zip21KB

参考文献

学ぶために

製品や技術を入手するために

  • PHPを使ったインターフェースのデモ(Lotus Dominoメール・データベース)は以下のページからご参照いただけます。
    Building PHP-based UIs for IBM Lotus Domino(U.S.)
  • developerWorks のLotus Notes の試用版がダウンロードできます。 Download(US)
  • developerWorks のLotus Domino の試用版がダウンロードできます。Download(US)
  • the source code of the Notes API extension for PHP from the PHP Extension Community Library (PECL) のサイトからNotes API Extensionのソース・コードを以下のページからダウンロードできます。
    Download(US)

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=341051
ArticleTitle=IBM Lotus Domino用のPHPベースのUIを構築する
publish-date=05092006