Notesアプリケーション開発Tips: 文書が作成、更新された際のエージェント実行
仕事で、Notesアプリケーションの開発をやっているのですが、最近初めて知ったTipsがあったので、備忘録も兼ねてポストします。
Notesアプリケーションの設計要素に文書が作成、更新されたイベントをトリガーに起動されるエージェントがあります。
作り方は簡単で、[エージェントのプロパティ] インフォボックスの [基本] タブで [イベント]をクリック、「文書が作成または更新された後」を選択します。
ただ問題は、ほぼデータベース中の全文書がエージェントの処理対象となるNotesDatabase.UnprocessedDocumentsに含まれてしまいます。
本当に文書が作成もしくは更新された場合だけ起動されるようにするにはどのようにすればよいか、悩みました。
Domino Designer Helpを読んでみると、ありました。
NotesSession.UpdateProcessedDocを処理対象になっている1文書毎に呼び出してやればOK。
以下は、ヘルプからの抜粋です。
しかし、エージェントが起動されるのは、文書が作成、または更新されてから約2、3分後なのはどうしてだろう?
恐らく、AgentManagerの負荷の問題でしょうか。 ------------------------------------------------------
次のエージェントスクリプトは、最後に実行された時点以降に新規作成または更新された文書を対象として実行されるエージェントの一部です。このスクリプトは、現在のデータベースの未処理の文書を取得し、各文書に処理済みのマークを付けます。たとえば、スクリプトが初めて実行されるとき、UnprocessedDocuments
はデータベース内のすべての文書を返し、UpdateProcessedDoc はすべての文書に処理済みのマークを付けます。
スクリプトが 2 度目以降に実行されるたびに、UnprocessedDocuments は UpdateProcessedDoc
が処理していない文書を返します。たとえば、エージェントが最初に実行されてから、新規文書が 3 つデータベースに追加され、既存の文書が 1
つ更新されたとき、UnprocessedDocuments は 4 つの文書のコレクションを返します。
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call session.UpdateProcessedDoc( doc )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
Notesアプリケーションの設計要素に文書が作成、更新されたイベントをトリガーに起動されるエージェントがあります。
作り方は簡単で、[エージェントのプロパティ] インフォボックスの [基本] タブで [イベント]をクリック、「文書が作成または更新された後」を選択します。
ただ問題は、ほぼデータベース中の全文書がエージェントの処理対象となるNotesDatabase.UnprocessedDocumentsに含まれてしまいます。
本当に文書が作成もしくは更新された場合だけ起動されるようにするにはどのようにすればよいか、悩みました。
Domino Designer Helpを読んでみると、ありました。
NotesSession.UpdateProcessedDocを処理対象になっている1文書毎に呼び出してやればOK。
以下は、ヘルプからの抜粋です。
しかし、エージェントが起動されるのは、文書が作成、または更新されてから約2、3分後なのはどうしてだろう?
恐らく、AgentManagerの負荷の問題でしょうか。 ------------------------------------------------------
次のエージェントスクリプトは、最後に実行された時点以降に新規作成または更新された文書を対象として実行されるエージェントの一部です。このスクリプトは、現在のデータベースの未処理の文書を取得し、各文書に処理済みのマークを付けます。たとえば、スクリプトが初めて実行されるとき、UnprocessedDocuments
はデータベース内のすべての文書を返し、UpdateProcessedDoc はすべての文書に処理済みのマークを付けます。
スクリプトが 2 度目以降に実行されるたびに、UnprocessedDocuments は UpdateProcessedDoc
が処理していない文書を返します。たとえば、エージェントが最初に実行されてから、新規文書が 3 つデータベースに追加され、既存の文書が 1
つ更新されたとき、UnprocessedDocuments は 4 つの文書のコレクションを返します。
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Call session.UpdateProcessedDoc( doc )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub