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
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(プログラムの制限)]セクションに追加された新しいフィールドです。
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
編集者レベル・ユーザーに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(ユーザーの有効化を許可する)]チェックボックスによって、この機能も提供できるようになりました。
手動で設定する場合、代理で実行する署名エージェントの権限が必要です。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)
[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エージェント)によって呼び出されるエージェントをメンバーが作成できるようにします。
[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で編集した後にそのエージェントで制限なしの操作を実行したい場合、このセキュリティー設定を明示的に設定する必要があります。(この点を挙げた理由は、これがよくあるトラブルだということがわかったからです。)
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回のクリックで再コンパイルすることができます。コード内にエラーがあると、ファイルは変更されません。その代わりに、エラーを含むファイルのリストが生成されます。コードを再コンパイルして再保存すると、その設計文書の署名者が変更されることに留意してください。
NotesDatabase、NotesRegistration、NotesACL、およびNotesAdministrationProcessには多くの新規メソッドおよびプロパティーが追加され、管理用タスクを自動化できるようになりました。Domino Web Administartorクライアントは、必要なことがすべて実行できるようにバックエンド・クラスで専用に記述されているため、適応範囲はより完全になりました。
リモート・デバッガーを起動するには、[File]−[Tools]-[Debug LotusScript Server Agent(LotusScript Server Agentのデバッグ)]を選択します。次に、デバッグしたいエージェントのあるサーバーとデータベースを選択します。デバッグ可能とマーキングされたエージェントが実行を開始し、[Debug Target(デバッグ・ターゲット)]ウィンドウにその名前が表示されます。ここで、デバッグしたいエージェントを選択し、[Open(開く)]をクリックします。これでデバッグ・セッションが開始されます。エージェント・マネージャーだけでなく、あらゆるプロセスによって実行されたエージェントをデバッグまたはキャンセルできることに留意してください。
新規エージェント・ビルダー・ユーザー・インターフェース
Domino Designer 6には、エージェント・ビルダーの新しいインターフェースが用意されています。コーディング用のスペースを大きくするために、エージェント構成情報をプログラム・ペインから削除し、[Agent]プロパティ・ボックスに挿入しました。ここには2つのタブがあり、1つめはスケジュールとその他の情報、2つめはセキュリティー関連の設定です。1つめのタブにあるラジオ・ボタンによって、共有エージェントと個人エージェントをすばやく切り替えることができます。このタブのもう1つの新しい特長は、[Run in background client thread(バックグラウンド・クライアント・スレッドで実行)]チェックボックスです。(前の節に記載した、クライアントのマルチスレッド化の説明を参照してください。)[Agent]プロパティ・ボックスの1つめのタブは、以下のように表示されます。
この記事ですでにご紹介した2つめのタブには、すべてのセキュリティー関連の設定があります。このタブには、新機能に必要な情報や、以前から利用可能な[Run as Web user]や[Allow public access(パブリックアクセスユーザーの利用を許可)]などのセキュリティー設定があります。さらに、エージェントをWebユーザーとして実行するよう指定するだけでなく、エージェントのリモート・デバッグが可能かどうか、編集者レベル・ユーザーがこのエージェントを有効にできるかどうかによらず、代理で実行するユーザー名も指定できます。制限なしユーザーは、ドロップ・ダウン・リストからエージェントの実行モードを設定できます。さらに、エージェントの読者フィールドも設定することができます。
最も多いのは、テンプレート上でエージェントに署名したユーザーと展開時にエージェントを実行する権限を持つユーザーが異なる、という状況です。[Choose when enabled(有効時に選択)]オプションが選択されているエージェントを「無効」として展開した場合は、ユーザーはエージェントを有効にしなければなりません。これによって、エージェントは適切なIDによって署名され、エージェントが有効になったときに実行するサーバー名を選択するためのプロンプトが表示されます。
多くの場合、エージェントが展開されるサーバー名が開発時にはわからないため、テンプレートに設定することができません。[Choose when enabled]オプションを使用すると、ユーザーはサーバー名を指定することができます。