本文へジャンプ

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

LDD Today

Notes/Domino 6における新エージェント機能のデコード


Lotus Software
by Julie Kadashevich
レベル:中級者
対象:Notes/Domino
原文の掲載:2002年10月1日

LDD Today の原文(英語)

インデックス
セキュリティー機能
プログラムの機能拡張
その他の新しいエージェント機能
Notes/Domino 6エージェント:より多くの機能をより使いやすく

Notes 6におけるエージェントの目的は、お客様が要求することの多い機能に対応することです。その要求とは(特に)、サーバー・ベースのエージェントがリモート・サーバー上のデータベースにアクセスできる機能や、エージェントを代理で実行できるユーザー名の指定機能などです。これらの要求に共通するテーマは、セキュリティー、特にエージェントのセキュリティー・モデルの拡張に関するものです。
また、多くの新規バックエンド・メソッドなど、LotusScript、Javaおよび式言語のプログラム機能を追加しました。さらに、クライアントおよびサーバーにおける、その他多数のエージェント機能を改善しました。

この記事では、Notes/Domino 6におけるエージェント関連の新機能について概説します。まず、セキュリティーについて説明し、次にプログラム上の改善点およびその他のエージェント機能について解説します。この記事では、読者が熟練したエージェント開発者で、エージェント用語に精通していることを前提としています。

セキュリティー機能
Notes/Domino 6では、以下のエージェントのセキュリティー問題について力を注ぎました。
  • リモート・サーバーにアクセスする
  • サーバー上でエージェントを変更/保存する
  • Webクライアントを使用して定期エージェントを有効にする
  • 編集者レベル・ユーザーにLotusScript/Javaエージェントの実行を許可する
  • エージェントを代理で実行できるユーザー名を指定する

さらにこの節で後述する、その他の多くのセキュリティー機能も追加されました。

リモート・サーバーにアクセスする
Notes/Domino 6より前は、サーバー・ベースの定期エージェントまたはWebベースのエージェントが別のサーバー上のデータベースを参照した場合、エージェントは失敗しました。その理由は、エージェントがサーバーB上で動作中に、サーバーAにおけるエージェントの有効ユーザー(エージェントを代理で実行するユーザー)を認証するためのセキュリティー・プロトコルがなかったためです。たとえば、ユーザーが以下のスクリプトをサーバー上で実行しようとすると、太字で示されている行でエラーを生成して失敗します。(このサンプル・コードでは、エージェントはサーバーCentral/Park上で動作し、データベースのレプリカをサーバーGorky/Park上に作成します。)

Sub Initialize
Dim session As New NotesSession
Dim db1 As NotesDatabase
Dim db2 As NotesDatabase
Dim dbname As String
dbname = "newdb.nsf"
Set db1 = session.CurrentDatabase
Set db2 = db1.CreateReplica("Gorky/Park", dbname)
End Sub

Notes/Domino 6では、サーバーGorky/Park(データベースの作成場所)がサーバーCentral/Park(エージェントの実行場所)を信頼するように設定されている場合、上記コードは成功します。どちらのサーバーもDomino 6を実行している必要があることに留意してください。サーバーGorky/ParkにサーバーCentral/Parkを確実に信頼させるには、Domino DirectoryにあるGorkyのサーバー文書を開き、[Security(セキュリティー)]タブから[Server Access(サーバー・アクセス)]セクションを選択し、[Trusted servers(トラステッド・サーバー)]フィールドに「Central/Park」と入力します。

サーバー文書の「Trusted servers」フィールド

サーバー上でエージェントを保存する
以前のリリースでは、エージェントはサーバー上で動作中の他のエージェントを操作したり、保存したりすることはできませんでした。たとえば、別のサーバー・ベースのエージェントを有効/無効にできるエージェントの記述は不可能でした。これは、変更されるエージェントに関連付けられたユーザーIDを保存する手段がなかったためです。以下のサンプル・コードでは、太字で強調表示されたメソッドでエラーが発生します。

Sub Initialize
Dim s As New notessession
Dim db As notesdatabase
Set db = s.currentdatabase
Dim ag As NotesAgent
Set ag = db.getAgent("Send reminder")
ag.IsEnabled=False
Call ag.save()
End Sub

このコードは、Notes/Domino 6では正常に実行されます。セキュリティーを維持するために、双方のエージェントに同じ有効ユーザー(エージェントを実行しているID)が設定されている場合、またはエージェントの署名者が特権を持ち、[Sign agents to run on behalf of someone else(代理で実行する署名エージェント)]フィールドに指定されている場合、エージェントは他のエージェントを有効にできます。これは、サーバー文書の[Security]タブの[Programmability Restrictions(プログラムの制限)]セクションに追加された新しいフィールドです。

「代理で実行する署名エージェント」フィールド

これは、ユーザー自身が作成したエージェントの操作は特別な権限がなくてもできますが、他のユーザーが記述したエージェントを操作するには特別な権限が必要であることを意味します。また、エージェントはそれ自身を変更できないことにも留意してください。

Webクライアントを使用して定期エージェントを有効にする
Webブラウザーで動作するエージェントは、サーバー上で実行されています。したがってNotes/Domino 6より前は、ブラウザー・エージェントが他のエージェントのプログラムを変更しようとした場合、(前述のとおり)サーバー・ベースの定期エージェントと同じ制限が課されていました。

Notes/Domino 6のWebクライアントから定期エージェントを有効にするために、私が「ヘルパー・エージェント」と呼ぶエージェントを作成することができます。ヘルパー・エージェントは、代理で実行するエージェントに署名する権限を持つユーザーによって署名されます。ヘルパー・エージェントの目的は、実行される予定のエージェント(「ワーカー・エージェント」)を有効にし、保存することです。ヘルパー・エージェントおよびワーカー・エージェントは、ともに[Agent(エージェント)]プロパティの[Run as web user(Webユーザーで実行)]チェックボックスをオンにして実行し、WebユーザーのIDを取得しなければなりません。また、エージェントの設計の一部を変更するため、エージェントが存在するデータベースは[Maximum Internet name and password level(最大限のインターネット名とパスワード・レベル)]に少なくとも設計者を指定する必要があります。(これは、データベース上で[File(ファイル)]−[Database(データベース)]−[Access Control(アクセス制御)]−[Advanced(詳細)]を選択することによって、またはDomino Administratorから、データベースに設定できます。)

以下は、ヘルパー・エージェントのサンプル・コードです。

Set db = s.currentdatabase
Set a = db.getAgent("Worker")
a.isEnabled = True
a.Servername = “Gorky/Park”
Call a.Save

ヘルパー・エージェントが動作を終了すると、ワーカー・エージェントがWebユーザーの権限の下で定期エージェントとして動作します。

編集者レベル・ユーザーにLotusScript/Javaエージェントの実行を許可する
Notes/Domino 6以前のリリースでは、LotusScript/Javaエージェントを有効にして実行するには少なくとも設計者としてのアクセスとLotusScript/Javaエージェントを実行する権限が必要でした。これは、エージェントの有効化は、エージェントに署名し、スケジュールどおりに実行させるという、2点から構成されているためです。エージェントに署名するには設計を変更しなければならないため、設計者としてのアクセスが必要になります。したがって、たとえばLotusScriptで記述されたOut of Officeエージェントを実行するには、ユーザーには少なくともメール・ファイルに対する設計者としてのアクセス(とLotusScriptエージェントを実行する権限)が必要です。

ユーザーがメール・データベースに編集者レベルでアクセスできるようにしながら、Out of Officeエージェントも実行できるようにしたい、との要求を多くのお客様から受けました。これに対応するために、エージェントを再署名なしで実行できるようにして、エージェントの2つの有効化処理を分離しました。さらに、エージェントを変更する権限のない(またはLotusScript/Javaエージェントを実行する権限のない)編集者レベル・ユーザーの代理でエージェントを実行する手段が必要でした。Notes/Domino 6では、[Agents]プロパティ・ボックスの[Allow user activation(ユーザーの有効化を許可する)]チェックボックスによって、この機能も提供できるようになりました。

「ユーザーの有効化を許可する」チェック・ボックス

このオプションが選択されると、編集者はエージェントをアクティブ(有効)にできます。選択されていない場合(デフォルト)は、エージェントは以前のリリースと同様に動作します。編集者レベルのアクセス権限を持つユーザーがエージェントを有効にした場合、変更できるのはエージェントのステータスのみです。編集者レベル・ユーザーには、LotusScript/Javaエージェントを実行する権限は必要ありません。(編集者レベル・ユーザーがエージェントを実行する権限を付与されていない場合は、編集者から実行できるように設定されたエージェント以外のエージェントを実行することはできません。) エージェントは、編集者レベル・ユーザーに対して手動またはプログラムによって設定することができます。
  • 手動で設定する場合、代理で実行する署名エージェントの権限が必要です。Domino Designerを開き、[Agent]プロパティ・ボックスの[Run on Behalf of(代理で実行)]フィールドに(前の画面のように)ユーザー名を入力します。[Allow user activation]チェックボックスをオンにします。これでエージェントは署名され、指定した編集者レベル・ユーザーがエージェントを有効にした場合、エージェントはそのユーザーの権限でスケジュールどおり実行されます。
  • プログラムで設定する場合、AdminP要求[Set User name and Enable Agent(ユーザー名の設定とエージェントの有効化)]を使用できます。これは、以下のサンプル・コードで示すように、新しいAdminPクラスのConfigureMailAgentメソッドで開始することができます。

    Dim AdminRequest As Variant
    Set AdminRequest = session.CreateAdministrationProcess(“GorkyPark/Moscow”)
    UserName = "Ninochka"
    AgentActivatable = True
    Agent = “DemoAgent”
    If Not(agent.IsEnabled) Then
    Call AdminRequest.ConfigureMailAgent(UserName,
    Agent, AgentActivatable, False)

    Elseif
    Call AdminRequest.ConfigureMailAgent(UserName, Agent,
    AgentActivatable, True)

この機能が追加された主な理由は、編集者レベルのアクセス権を持つメール・ユーザーにLotusScriptエージェントを利用させるためです。Notes/Domino 6のメール・テンプレートには、この機能を使ったエージェントの例がいくつか含まれています。

ユーザーにエージェントの利用を許可するようにエージェントをセットアップすると、[Run on behalf of]フィールドに入力されたすべての編集者レベル・ユーザーがエージェントを有効/無効にできるようになります。編集者がNotes/Domino 6を使用して有効化したエージェントは、Domino 5サーバーからは認識されないことに注意してください。その結果、エージェントはRelease 5では無効と扱われ、Notes/Domino 6では有効と扱われるようになります(逆の場合も同様)。

有効状態を追跡するために、Notes/Domino 6の[Agents]ビューにアイコンを追加しました。横に数字の5が付いたチェック・アイコンは、エージェントがRelease 5(5.0.7以前)サーバーに対してのみ有効であることを示します。横に数字の6が付いたチェック・アイコンは、Notes/Domino 6(および5.0.8以降)上で動作するエージェントを示します。数字なしチェック・アイコンは、Release 5およびNotes/Domino 6の両方に対して有効なエージェントを示します。まとめると、以下のようになります。
  • 数字の5付きチェック・アイコンは、エージェントが編集者レベル・ユーザーによってNotes/Domino 6で無効にされたことを意味します。このエージェントは、Domino 6(および5.0.8以降)サーバーからは無効と扱われますが、5.0.7以前のDomino 5サーバーからは有効と扱われます。
  • 数字の6付きチェック・アイコンは、エージェントが編集者レベル・ユーザーによってNotes/Domino 6で有効にされたことを意味します。このエージェントは、Domino 6(および5.0.8以降)サーバーからは有効と扱われますが、5.0.7以前のDomino 5サーバーからは無効と扱われます。
  • 数字なしチェック・アイコンは、エージェントが編集者レベル・ユーザーによって有効/無効にされたものではないため、Release 5とNotes/Domino 6の両方で同様に動作することを意味します。

Domino 5.0.8以降のエージェント・マネージャーは、エディター・レベル・ユーザーによって有効にされたエージェントを認識できることに留意してください。これらのエージェントは、エージェント・マネージャーから認識され、Domino 5.0.8以降のサーバー上で実行されます。しかし5.0.8のユーザー・インターフェースは、この新機能に対応していません。したがって、Release 5の編集者レベル・ユーザーはエージェントを利用することができません。またRelease 5.0.x 設計者も、エージェントがRelease 5またはNotes/Domino 6ユーザーによって有効にされたかどうかを示す[チェック5]または[チェック6]アイコンによってエージェントの状態をグラフィック的に区別することができません。

その他のセキュリティー機能
前述の機能に加えて、その他の多くのセキュリティー関連機能がエージェントに追加されました。

新しい制限リスト
前述の新機能(指定ユーザーの代理でエージェントを実行するなど)をサポートし、より厳密な制御と粒度を提供するために、サーバー文書の[Security]タブの[Agent Restrictions(エージェントの制限)]セクションを変更しました。たとえば、(本記事の2番目の画面に示しているように)このセクションの名前は[Programmability Restrictions]に変更されています。エージェントおよびJava/JavaScript/COMの別個のセクションを削除し、制限なしの権限フィールドをこの1つのセクションに結合しました。(Java/JavaScript/COMの制限リストは、ユーザーにサーバーへのアクセスを提供するのと同じことを意味していました。したがって、その代わりに[Security]タブの[Who can Access server(サーバーにアクセス可能なユーザー)]フィールドに指定された名前を使用して、Java/JavaScript/COMユーザーに対してアクセスの制限レベルを決定します。)

Notes/Domino 6より前は、[Agent Restrictions]セクションは3つの制限リスト(制限なし、制限あり、個人)から構成されていました。新しい[Programmability Restrictions]セクションは、以下の6つのリストから構成されています。
  • [Run unrestricted methods and operations(制限なしのメソッドと操作の実行)]には、セキュリティーを脅かす恐れのある操作を含む、すべてのエージェント操作を実行できるユーザー名が表示されます。運用サーバー上では、最も信頼できる少数のユーザーのみがこれらの権限を持つようにしてください。
  • [Sign agents to run on behalf of someone else]では、署名者以外のユーザーの代理で定期エージェントとして実行するエージェントを作成する権利を与えます。これはとても強力な機能です。なぜなら、この権限を持つユーザーは、他のユーザーのデータにアクセスできるだけでなく、(メールの送信者や文書の作成者として)他のユーザーになりすますこともできるからです。
  • [Sign agents to run on behalf of the invoker of the agent(エージェントの起動者の代理で実行する署名エージェント)]では、ユーザーは他のエージェント(たとえば、Webエージェント)によって呼び出されるエージェントをメンバーが作成できるようにします。
  • [Run restricted LotusScript/Java agents(制限されたLotusScript/Javaエージェントの実行)]では、セキュリティーを侵害する恐れのない操作の多くを実行するLotusScript/Javaエージェントの実行権限をユーザーに付与します。大多数のユーザーがこのリストに含まれるはずです。
  • [Run Private agents/Shared Simple and Formula agents(個人エージェントと共有シンプル/式エージェントの実行)]によって、ユーザーは個人エージェントや共有シンプル/式エージェントを実行できます。
  • [Sign script libraries to run on behalf of someone else(代理で実行する署名スクリプト・ライブラリー)]では、スクリプト・ライブラリーに署名する権限をユーザーに付与します。

ここで、Notes/Domino 6ではすでに使用されていないJava/JavaScript/COM関連の2つのフィールドが注釈付きで含まれていることに注目してください。これらのフィールドは、下位互換性を保つために含まれています。

更新済みエージェントのセキュリティー・ルール
幸いなことに、エージェントのセキュリティーを習得するための新しいルールはそれほど多くはありません。新しいオプションが1つだけ追加されており、サーバー上で動作するエージェントに適用されます。エージェントは、エージェントの署名者と同等の許可ユーザーが必ず実行しなくても、別のユーザーの権限でも実行できるようになりました(ただし、エージェントの署名者が、代理で実行するエージェントを作成する権限を持っている場合に限ります)。

エージェントのセキュリティーは、以下の2つから構成されています。
  • プログラムの制限(以前の呼び出し先エージェントの制限)-エージェントを実行するユーザーとその権限のレベルを制御します。これは、Domino ディレクトリーのサーバー文書で設定します。
  • データベースACL-エージェントの有効ユーザーが持つデータへのアクセス・レベルを制御します。
プログラムの制限が適用されるかどうかは、エージェントの起動方法に依存します。エージェントがクライアント上で呼び出された場合はプログラムの制限は適用されませんが、エージェントがサーバー上で呼び出された場合は適用されます。プログラムの制限は、常にエージェントの署名者に基づいて決定されます。以下の表は、エージェントのセキュリティー・ルールをまとめたものです。

エージェントの
実行場所
クライアント サーバー
エージェントの
起動方法
ユーザーからの
呼び出し
スケジュール Webユーザーとして
HTTP実行
署名者として
HTTP実行
制限 不適用 不適用 署名者 署名者

エージェントの有効ユーザーとして使用されるIDは、エージェントの起動方法によって決まります。エージェントがクライアント上で呼び出された場合、ワークステーションにログ・オンしたユーザーのIDがエージェントの有効ユーザーとして使用されます。エージェントがWebから呼び出され「Webユーザー」として実行するように設定された場合は、WebユーザーIDが有効ユーザーになります。サーバー上の定期エージェント(および「エージェントの署名者として実実行」モードで実行中のWebから呼び出されたエージェント)の場合は、有効ユーザーは[On behalf of]フィールドに指定されたユーザー(指定されている場合)か、エージェントの署名者([On behalf of]が指定されていない場合)のいずれかになります。

エージェント
の実行場所
クライアント サーバー
エージェント
の起動方法
ユーザーから
の呼び出し
スケジュール Webユーザー
として
HTTP実行
署名者
として
HTTP実行
スケジュール
ACLチェック 起動者 起動者 起動者 「代理実行者」または署名者「代理実行者」または署名者

フル・アクセス管理者
Domino 6は、複数レベルの管理者をサポートします。新しい「スーパー」レベルでのアクセスは、フル・アクセス管理者と呼ばれています。サーバー文書の[Security]タブでフル・アクセス管理者として指定されると、ACLに明示的にリストされていない場合でもサーバー上のすべてのデータベースにアクセスすることができます。したがって、すべての管理機能を実行できます。さらに、[who can sign unrestricted agents(制限なしエージェントに署名できるユーザー)]フィールドに明示的にリストされていない場合でも、制限なしエージェントの権限を持ちます。

この機能を使用するには、サーバー文書の[Full Access administrators(フル・アクセス管理者)]フィールドにリストされている必要があります。

サーバー文書の「管理者」セクション

サーバー文書にリストアップされると、Domino Administratorクライアントかプログラムのいずれからでもフル・アクセス管理者を有効にできます。
  • Domino Administratorクライアントから[Administration(管理)]−[Full Access Administration(フル・アクセス管理)]を選択します。
  • サーバー上でエージェントを介して、プログラムからこの機能を利用できます。エージェントの署名者を、[Full Access administrator]フィールド、または[Run unrestricted methods and operations]フィールドのいずれかにリストアップしなければなりません。さらに、[Agent]プロパティ・ボックスの[Set runtime security level(実行時セキュリティレベルの設定)]オプションを[Allow restricted operations with full administration rights(制限された操作を全管理権限で許可する)]に設定する必要があります。(詳細については、次の節で説明します。)

エージェントがクライアント上で実行されている場合、サーバー上でのエージェント設定は効果がないことに留意してください。つまりこの場合は、フル・アクセス管理者はAdministratorクライアントから設定しなければなりません。

エージェント単位の権限の選択
制限なしのエージェントを署名する権限は、最も信頼できる少数のユーザーに付与すべきです。そのために、管理IDがしばしば使用されます。しかし、管理者によって作成されるすべてのエージェントに制限なしの権限が必要なわけではありません。Notes/Domino 6より前は、制限なしの権限を必要とするエージェントと、制限なしの権限を必要としないエージェントとに異なる署名をするために、管理者は複数のIDを作成しなければなりませんでした。ライセンス問題は別としても、これは不便でした。この問題に対処するために、[Agent]プロパティ・ボックスに[Set runtime security level]オプションを作成し、制限なしのユーザーが署名した特定のエージェントに対して最高レベルの操作を指定できるようにしました。

Notes/Domino 6では、制限なし署名者のユーザーIDにより署名されたエージェントが操作できる3つの実行時セキュリティレベルのうちから1つを、制限なし署名者が選択することができます。これらのセキュリティレベルは、エージェントごとに設定されます。

「実行時セキュリティーレベルの設定」ダイアログ

  • [Do not allow restricted operations(制限された操作を許可しない)]は、エージェントの動作を制限モードのみに制限します。エージェントは、ファイルの入力/出力や署名の実行は許可されませんが、通常のLotusScript/Java操作は許可されます。
  • [Allow restricted operation(制限された操作を許可する)]では、エージェントは制限なしモードで動作できます。ファイルの入力/出力および署名が許可されます。
  • [Allow restricted operations with full administration rights]では、エージェントはすべての操作の実行を許可され、ACLに明示的にリストされる必要なしにデータベースを開くことができます。さらにエージェントは、管理権限が必要な機能も実行できます。

これは、制限なしアクセス権限をすでに持っている署名者のみが利用できる機能です。制限されたアクセス権限を持つユーザーが[Do not allow restricted operations]以外の値を設定した場合、エージェントは動作せず、ランタイム・エラーを生成します。

ここで留意すべき点は、Designer 6で編集されていないエージェントは、下位互換性を保つためにDomino 6サーバー上では署名者の権限で実行されることです。したがって、制限なし署名者の場合、エージェントは制限なしの権限で実行されます。しかし、その後エージェントをDesigner 6で編集した場合、デフォルト設定は[Do not allow restricted operations](より安全な設定)となります。エージェントをDesigner 6で編集した後にそのエージェントで制限なしの操作を実行したい場合、このセキュリティー設定を明示的に設定する必要があります。(この点を挙げた理由は、これがよくあるトラブルだということがわかったからです。)
 
上に戻る
 
プログラムの機能拡張
ここまでは、新しいセキュリティー機能について説明してきました。Notes/Domino 6では、さらに数多くのプログラム機能も拡張されています。これらの拡張機能は、いくつかのカテゴリーに分かれます。
  • LotusScript、Java、式言語などの主要言語または簡単なアクション
  • 主要言語に対してNotes/Dominoに固有の機能を拡張するメソッドとクラス
  • デバッガーなどのツール

これらのカテゴリーの特長を、以下に示します。

LotusScript
Notes/Domino 6では、LotusScript言語にByteとBooleanという2つの新しいデータ型が加わります。Byte型は、getステートメントでファイルから1バイト取得します。値の範囲は0〜256(符号なし)です。Boolean型の値の範囲は、TrueまたはFalse(-1、0)で、サイズは1バイトです。

LS2Jという新しいLSXによって、LotusScriptとJava間で相互接続が可能になります。LS2Jを使用すると、Javaオブジェクトのインスタンス化、Javaオブジェクト・メソッドの呼び出し、およびJavaオブジェクト・プロパティーの読み取り/書き出しをLotusScriptプログラムから実行できます。

LotusScriptのUSEステートメントで、Javaライブラリーをロードできるようになります。これにはLS2J LSXが必要です。

バックグラウンド・エージェントのUIメソッド処理
バックグラウンド・エージェントによるUIメソッドの処理はよくあるエラーの原因となっていましたので、これに関する考察も追加します。Notes/Domino 6より前は、バックグラウンド・エージェントでUIクラスを使用すると(たとえNotesUIWorkspaveのDimステートメントのみの場合でも)、エージェントはバックグラウンドで実行されませんでした。ご存知でしょうが、バックエンド・クラスがNotesデータベース上で操作を実行するのに対し、フロントエンド・クラスはユーザー・インターフェース(NotesUIWorkspace、NotesUIDatabase、NotesUIView、NotesUIDocument)を操作します。バックエンド・クラスは(バックグラウンドまたはフォアグラウンド、サーバーまたはワークステーションによらず)どこでも実行できますが、フロントエンド・クラスはワークステーションのフォアグラウンドでしか実行できません。いずれかのフロントエンド・クラスへの参照を含むエージェントをバックグラウンドで実行した場合、UIクラスが見つからないためエージェントは実行できませんでした。これが、エージェントがロード時に失敗する原因でした。ロード・エラーは、プログラム内で発見できないため、デバッグが困難です。このようなエラーはサーバー・コンソールやサーバー・ログには表示されますが、ユーザーによってはサーバー・ログにアクセスする権限がなかったり、ログを調べるという考えに至らなかったりします。

Notes/Domino 6は、デバッグしやすい方法でバックグラウンド・エージェントのUIクラスを処理します。Notes/Domino 6では、エージェントのロード中ではなく、UIオブジェクトの作成時点でエラーが生成されるようになりました。これは、UIクラスを参照するDimステートメントを含めることが許されることを意味します。UIオブジェクト作成中に、ランタイム・エラー(エラー217:ErrAdtCreateError)が生成されます。しかし、これはランタイム・エラーであるため、簡単なエラー処理ルーチンによってこの状態を発見できます。つまり、このエラーを処理しさえすれば、クライアント上でもサーバー上でも動作するエージェントを作成できるということです。

以下は、そのエラー・ハンドラーの例です。

Function MayIUseFEClass() As Boolean
' error defined in lserr.lss
' Public Const ErrAdtCreateError = 217
On Error 217 Goto NoYouMayNot
Dim uiws As NotesUIWorkspace ' declare front-end class

Set uiws = New notesuiworkspace

MayIUseFEClass = True
Exit Function
NOYOUMAYNOT:
MayIUSEFEClass = False
Exit Function
End Function

Recompile All LotusScript

再コンパイル
LotusScriptのスクリプト・ライブラリーを変更し、クラス/型の定義変更、関数のパラメーターの追加/削除、定数の変更、またはプロパティーのサイズ変更を行った場合、LotusScriptコードを再コンパイルする必要があります。Designer 6では、[Tools(ツール)]メニューの[Recompile all LotusScript(すべてのLotusScriptの再コンパイル)]オプションによって、データベース内の全設計文書を1回のクリックで再コンパイルすることができます。コード内にエラーがあると、ファイルは変更されません。その代わりに、エラーを含むファイルのリストが生成されます。コードを再コンパイルして再保存すると、その設計文書の署名者が変更されることに留意してください。

「再コンパイル」ダイアログ・ボックス

Java
Notes/Domino 6では、スクリプト・ライブラリーをJavaで記述することができます。Javaのライブラリーはデータベースの一部として作成され、データベースとともに複製されます。Javaライブラリー・ルーチンは、LotusScriptから呼び出すことができます。さらにJavaオブジェクトも、LotusScriptからアクセスし、操作できるようになりました。

式言語
式言語(Notesの最も古いプログラミング言語)は、内部で完全に書き直されました。これによって、既存のアプリケーションを中断することなしに、効率が向上し、新しい機能がもたらされます。(この再アーキテクチャーにおいて最も優先したことは、下位互換性です。)式エンジンがより高速になっただけでなく、64Kの制限も取り除かれました。以下は、新しい式言語の特長の一部です。

  • Subsetの代わりにサブスクリプトを使用できます。たとえば、以前は以下の式を使用していました。

    Filename:=@Subset(@Dbname;-1)

    Now instead, you can use:

    Filename:=@Dbname[2]

  • Setおよび@SetFieldの代わりに、以下のようにネストできる代入を使用できます

    @if(FOO=”bar”;FIELD x:=”FOO”;y:=”bar”)

  • 中括弧をストリングや引用の区切りに使用できます。たとえば、以下のようにします。

    REM {Code removed: days:=”Mon”:”Tue”:”Wed”:”Thu”:”Fri”;};

  • For、@While、および@DoWhileなどのループ構成がいくつか追加されました。

  • 1つの@For式でx_1からx_100までのフィールドを削除できます。

    @For(I=1;I<=100;I:=I+1; @SetField(“x_”+@Text(x);@DeleteField));

  • Evalで式を迅速にコンパイルして実行できます。

    x={FIELD y:=@Prompt([OKCancelEdit];”Input
    ”;”Input a value”;”Default”);};@Eval(x);

  • Sort関数によってソート機能が提供されます。たとえば、テキスト・リストを長さでソートするには、以下のようにします。

    @Sort(x;[CustomSort];@Length($A) > @Length($B))

  • Notes/Domino 5では、ウィンドウを変更しても式のコンテキストは更新されませんでした。Notes/Domino 6では、@UpdateFormulaContextを使用して更新することができます。

  • @ThisValueおよび@ThisNameによって、移植可能なフィールド式を記述できます。たとえば、以下のような汎用フィールドの検証式を記述することができます。

    @If(@IsNull(@ThisValue);
    @Failure(“Please enter value “+@ThisName+”.”);@Success);

  • ReplicaIDは、データベースのレプリカIDを返します。

  • StatusBarは、Notesステータス・バーにテキスト・メッセージを表示します。

  • WebDBNameは、現行データベースのファイル名をURLフォーマットで返します。

これらは、ほんの数例にすぎません。フォーミュラ言語の新機能に関する詳細については、LDD Todayの記事「Enhancements to the formula language in Domino 6」(英語)を参照してください。

式/シンプル・エージェントのより簡単なセキュリティー・ルール
このリリースの目的の1つは、全タイプのエージェントのセキュリティー・ルールを統一することでした。これによって、セキュリティー・ルールが理解しやすくなり、覚えやすくなります。これまでは、シンプル・エージェントと式エージェントにある種独特の動作を組み込んで、Release 3との下位互換性を促進してきました。Notes/Domino 6も同様にその古いルールを認識して適切に動作しますが、新機能の利点を活用されることをお勧めします。

たとえば前述のとおり、サーバー上で動作する式エージェントとシンプル・エージェントはいずれもリモート・サーバーにアクセスできます。このアクセス制限は、すべてのエージェント・タイプに対して取り除かれました。

また、Notes/Domino 6より前は、個人式エージェントは(LotusScriptエージェントとほぼ同等の)署名者の権限で実行されていましたが、共有式エージェントはレプリカIDの権限で実行されていました。Notes/Domino 6では、共有式エージェントも署名者の権限で実行されます。レプリカIDも引き続き下位互換性のために必要なため、エイリアス名と同様に取り扱われています。ですから、ACLにレプリカIDを持ち、@DBLookup式にそのレプリカIDへのアクセスを許可する既存のデータベースがある場合でも、変更する必要はありません。これらのエージェントは、これまで同様に問題なく動作します。

式エージェントとシンプル・エージェントにおけるもう1つの変更点は、エージェントによって生成されたメール、特に、メール送信者の決定方法です。以前のリリースでは、式/シンプル・エージェントの送信者フィールド([From]フィールド)の生成ルールは以下のとおりでした。

エージェント・タイプ 共有
式エージェントの[From]フィールド サーバー
シンプル・エージェントの[From]フィールド サーバー

Notes/Domino 6では、すべての[From]フィールドはエージェントの有効ユーザーに基づいて決定されます。Notes/Domino 6より前の動作を実行するには、エージェントにサーバーIDで署名しなければなりません。そうすれば、メールはサーバーから送信されるようになります。

新規クラス/メソッドの特長
Notes/Domino 6には、数多くの新規クラスとメソッドが追加されています。以下は、新しいクラスとメソッドによって提供される新機能の一部です。
  • NotesUISchedulerクラスは、Calendar(カレンダー)とScheduling(スケジュール)用に構築された新しいフロントエンド・クラスです。これによって、部屋、リソース、および参加者をプログラムから制御できます。
  • NotesUIDocument.Closeメソッド(ブール即時型)メソッドは、「多すぎるウィンドウ」問題の解決策を提供します。
  • Lockメソッド、Unlockメソッド、およびLockProvisionalメソッドは、複数のサーバー上にレプリカを持つデータベース内にある文書のロックやオフライン・モード時のロック操作など、Notesの文書ロックをサポートします。ロックは、通常の文書だけでなく、エージェント、ビュー、およびフォームなどの設計要素に対しても機能します。
  • 拡張されたNotesReplicationクラスと新規NotesReplicationEntryクラスには完全な複製制御機能が備わり、複製式をプログラムから制御できます。
  • NotesViewクラスには、多くの新規メソッドが追加されました。CreateViewメソッドを使用してビューを作成し、CreateColumnメソッド、CopyColumnメソッド、およびRemoveColumnメソッドを使用して列の追加や削除を実行できるようになりました。多くの読み取り専用プロパティーも読み取り/書き込みプロパティーに拡張されています。さらに、SelectionFormulaなど、多くの新規プロパティーが追加されています。
  • RichTextクラスには、新規メソッドとクラスによって多くの改良が加えられています。新しいEditing/Navigationフレームワークによって、要素と要素範囲のナビゲーションおよび操作ができます。同様に、テーブル操作も追加されました。
  • MIMEサポートが拡張されました。新機能としては、エントリー間の完全なナビゲーション機能があります。NotesMIMEEntityクラスは、読み取り/書き込みに拡張されています。さらに、NotesMIMEHeaderクラスが追加されました。
  • NotesのXMLサポートが拡張されました。新規クラスとしては、NotesDXLImporterクラス、NotesDXLExporterクラス、およびNotesXSLTTransformerクラスがあります。
  • NotesStreamクラスがMIMEおよびXMLのヘルパーとして追加されました。このクラスによって、大量のデータ・セットを効率よく転送することができます。テキスト・データとバイナリー・データともにサポートされています。
  • NotesDatabase、NotesRegistration、NotesACL、およびNotesAdministrationProcessには多くの新規メソッドおよびプロパティーが追加され、管理用タスクを自動化できるようになりました。Domino Web Administartorクライアントは、必要なことがすべて実行できるようにバックエンド・クラスで専用に記述されているため、適応範囲はより完全になりました。

リモート・デバッガー
Notes/Domino 6には、サーバー・ベースのエージェント用にリモート・デバッガーが用意されています。リモート・デバッガーはエージェントのデバッグだけでなく、(httpやルーターなどのプロセスによって実行されるエージェントを含む)サーバー上で動作するすべてのエージェントを診断することができます。またリモート・デバッガーは、あらゆるサーバー・プロセスによって実行されたあらゆるエージェントをキャンセルするのにも使用できます。

デバッグ・セッションは、クライアント・コンソールまたはサーバー・コンソールのどちらからでも開始できます。クライアント・コンソールから開始した場合、おなじみのクライアントであるLotusScriptデバッガーと類似のインターフェースになります。単一ステップの選択、ブレークポイントの設定、変数の確認と変更、全エージェントのリストアップ、およびあらゆる実行中エージェントの強制終了を実行できます。

リモート・デバッガーは、サーバー・アドイン・タスクとして実装されています。リモート・デバッガーを有効にするには、サーバー上で有効にしなければなりません。これは、サーバー文書の[Server Tasks/Remote Debug Manager(サーバー・タスク/リモート・デバッグ・マネージャー)]タブから実行します。また、エージェント自身もデバッグ可能とマーキングする必要があります。

「リモート・デバッグ」管理タブ

リモート・デバッガーを起動するには、[File]−[Tools]-[Debug LotusScript Server Agent(LotusScript Server Agentのデバッグ)]を選択します。次に、デバッグしたいエージェントのあるサーバーとデータベースを選択します。デバッグ可能とマーキングされたエージェントが実行を開始し、[Debug Target(デバッグ・ターゲット)]ウィンドウにその名前が表示されます。ここで、デバッグしたいエージェントを選択し、[Open(開く)]をクリックします。これでデバッグ・セッションが開始されます。エージェント・マネージャーだけでなく、あらゆるプロセスによって実行されたエージェントをデバッグまたはキャンセルできることに留意してください。
 
上に戻る
 
その他の新しいエージェント機能
拡張されたエージェント機能は、セキュリティーとプログラムに関するものだけではありません。その他の機能も追加され、改善されました。
  • エージェント・テスト
  • 読者リスト
  • コンソール・コマンド
  • マルチスレッド化されたクライアント
  • 新規エージェント・ビルダーUI
  • テンプレートでのエージェント処理
  • 向上したパフォーマンス

以下の節では、これらの追加/改善機能とその他の新機能について説明します。

エージェント・テスト
Designer 5には、エージェントのセキュリティーやスケジュールに関する一般的なエラー診断に役立つエキスパート・システムとして、エージェント・テスト機能が追加されました。エージェント・テストは、Notes/Domino 6のセキュリティー・モデルに対して機能するように更新されており、必要に応じたセキュリティー設定調整に役立つ診断メッセージを表示します。Notes 6クライアントでDomino 5サーバー上のエージェントを調べる場合、エージェント・テストは自動的にRelease 5のセキュリティー・モデルに切り替わります。エージェント・テストを開始するには、[Designer]からエージェントをクリックし、[Agent]-[Test(テスト)]を選択します。以下は、エージェント・テストの出力の例です。

「エージェント・テストの出力例

エージェントの読者リスト
Notes/Domino 6では、エージェントに読者リストが追加されました。このリストに指定したユーザー以外の全ユーザーに対して、エージェントを非表示にできます。エージェントの読者フィールドに指定されていないユーザーがエージェントを実行しようとすると、そのユーザーがエージェント名を知っていたとしても、エージェントが存在しないというエラーが返されます。読者リストを指定するには、[Agent]プロパティ・ボックスを開き、[Security]タブの下の方にある読者リスト・ボックスから名前を選択するか、名前を入力します。

読者リスト

コンソール・コマンド
いくつかの新しいサーバー・コンソール・コマンドを、エージェントに追加しました。これらのコマンドを使用して、全エージェント・マネージャー・コマンドのオンライン文書の表示、エージェントの実行とキャンセル、およびあらゆるデータベース内でのエージェント名の表示が可能になります。新規コマンドは、以下のとおりです。

Load amgr -?
このコマンドは、エージェント・マネージャーのヘルプ索引を返します。

Tell amgr run "データベース名" 'エージェント名'
このコマンドは、エージェントを別のスレッドで実行します。コンピューターのパフォーマンス上の制限がない限り、同時に実行可能なエージェント数に制限はありません。エージェントは、スケジュールによって起動されるのと全く同様に、サーバー・ベースのエージェントの全ルールに従って実行されます。つまり、優先度の高い[On behalf of]フィールドに名前が入力されていない限り、署名者の権限で実行されます。このコマンドは、管理用タスクの実行やサーバー・ベースのエージェントをテストする方法として便利です。

Tell amgr cancel "データベース名" 'エージェント名'
このコマンドは、エージェント・マネージャーが現在実行中の定期エージェントを中止します。HTTPやルーターなどの他のプロセスによって実行されるエージェントは、キャンセルされません。ただし、リモート・デバッガーを使用する場合は、あらゆるプロセスが実行するエージェントをキャンセルすることができます。また、サード・パーティー・アプリケーションが停止し、制御がNotesに戻らない場合は、エージェントをキャンセルできません。

Tell amgr show [-v] "データベース名"
このコマンドの簡略形式(「v」なし)では、データベース内のエージェント名と総数のリストが、共有エージェントとその総数、個人エージェントとその総数の順に表示されます。このコマンドの詳細形式(「v」あり)では、すべてのエージェント名とスクリプト・ライブラリーがそれぞれの追加情報とともに表示されます。

マルチスレッド化されたクライアント
Notes 6クライアントでは、マルチタスクを実行できます。メニューから起動した複数のエージェントを、同時にバックグラウンド・スレッドで実行することができます。コンピューターのパフォーマンス上の制限がない限り、同時に実行可能なエージェント数に制限はありません。バックグラウンド・スレッド・エージェントにおける唯一の制限は、バックグラウンド・エージェントと同様に、これらのエージェントはUI機能を持つことができないことです。

新規エージェント・ビルダー・ユーザー・インターフェース
Domino Designer 6には、エージェント・ビルダーの新しいインターフェースが用意されています。コーディング用のスペースを大きくするために、エージェント構成情報をプログラム・ペインから削除し、[Agent]プロパティ・ボックスに挿入しました。ここには2つのタブがあり、1つめはスケジュールとその他の情報、2つめはセキュリティー関連の設定です。1つめのタブにあるラジオ・ボタンによって、共有エージェントと個人エージェントをすばやく切り替えることができます。このタブのもう1つの新しい特長は、[Run in background client thread(バックグラウンド・クライアント・スレッドで実行)]チェックボックスです。(前の節に記載した、クライアントのマルチスレッド化の説明を参照してください。)[Agent]プロパティ・ボックスの1つめのタブは、以下のように表示されます。

「Agent Properties」最初のタブ

この記事ですでにご紹介した2つめのタブには、すべてのセキュリティー関連の設定があります。このタブには、新機能に必要な情報や、以前から利用可能な[Run as Web user]や[Allow public access(パブリックアクセスユーザーの利用を許可)]などのセキュリティー設定があります。さらに、エージェントをWebユーザーとして実行するよう指定するだけでなく、エージェントのリモート・デバッグが可能かどうか、編集者レベル・ユーザーがこのエージェントを有効にできるかどうかによらず、代理で実行するユーザー名も指定できます。制限なしユーザーは、ドロップ・ダウン・リストからエージェントの実行モードを設定できます。さらに、エージェントの読者フィールドも設定することができます。

テンプレートでのエージェント処理
お客様からのフィードバックにお応えして、エージェントはNTF拡張子を持つテンプレートでは動作しなくなりました。(ただし、NSF拡張子を持つテンプレートでは引き続き動作します。)有効にされたエージェントをテンプレート上に置くことができるようになったため、有効なエージェントを展開する上での潜在的な問題をいくつか取り上げて解説します。何か不都合が発生する場合、その原因の多くはセキュリティーに関することです。この場合も例外ではありません。有効化したエージェントを展開すべきかどうか調べる場合、以下の2点を確認してください。
  • 最も多いのは、テンプレート上でエージェントに署名したユーザーと展開時にエージェントを実行する権限を持つユーザーが異なる、という状況です。[Choose when enabled(有効時に選択)]オプションが選択されているエージェントを「無効」として展開した場合は、ユーザーはエージェントを有効にしなければなりません。これによって、エージェントは適切なIDによって署名され、エージェントが有効になったときに実行するサーバー名を選択するためのプロンプトが表示されます。
  • 多くの場合、エージェントが展開されるサーバー名が開発時にはわからないため、テンプレートに設定することができません。[Choose when enabled]オプションを使用すると、ユーザーはサーバー名を指定することができます。

向上したパフォーマンス
ここで、パフォーマンスにおける2つの機能強化について、説明しておくべきでしょう。1つめは、エージェント・マネージャーの開始時の機能が強化されたため、より高速な起動が可能になったことです。有効なエージェントを持たないデータベースは特別な方法でマーキングされ、エージェントの有無を調べる必要がなくなります。この情報はキャッシュされ、各種処理で共有されるため、サーバーの起動時間がより高速になります。
また、2つめのパフォーマンス機能強化により、変更なしに2回以上ロードされているエージェントのロード時間を短縮できるようになりました。「コストのかかる」暗号処理の結果の一部もキャッシュできるようになりました。この拡張が大いに役立つ一例は、変更なしで同じエージェントを何度も実行する場合があるWebエージェントです。
 
上に戻る
 
Notes/Domino 6エージェント:より多くの機能をより使いやすく
この記事からおわかりのとおり、Notes/Domino 6には、特にセキュリティーとプログラムに関する多くの新しいエージェント機能が追加されました。この記事が皆さんのお役に立つことを願っています。LDD Todayの今後の記事では、Notes/Domino 6エージェントのセキュリティーに関してさらに踏み込んだ考察を行います。また、以前のエージェント関連の記事を、最新リリースに対応した内容に更新する予定です。これらの記事では、以下をはじめとするテーマを取り上げます。


筆者について
Julie Kadashevichは、FTP SoftwareでJavaおよびC++モバイル・エージェント・テクノロジーに従事した後、1997年3月にIrisに入社しました。この記事は、LDD TodayにおけるKadashevich氏の6回目の寄稿です。氏の主な研究対象は、エージェント・マネージャーとJavaです。以前は、Wang Labsで応用人工知能分野の研究に取り組み、その分野で5件の特許を取得しました。彼女は、ボストン大学で情報工学の学士号および修士号を取得しています。
 
上に戻る