2026/06/09

エージェントと実行対象② - UpdateProcessedDoc

前回は、エージェントの実行対象と UnprocessedDocuments プロパティについて整理しましたが、前回触れられなかった「作成または変更されたすべての文書」をいう設定を紹介します。


まずは単純に前回と同じプログラムで、最後に取得した文書の件数を表示するように修正します。

   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim ndc As NotesDocumentCollection

   Set ndb = ns.CurrentDatabase
   Set ndc = ndb.UnprocessedDocuments   '未処理の文書の一覧

   MsgBox ndc.Count
   '文書件数を表示

エージェントのプロパティでは対象に「作成または変更されたすべての文書」を指定します。

実行するとデータベース内にすべての文書数が返されます。

「なるほど、初回の実行だから『すべての文書』が返ってくるのか...」

と思いながら、もう一度エージェントを実行します。すると、またしても『すべての文書』が対象となってしまいます。

「前回実行時に処理した文書は除外されるのでは?」

そう思うかもしれません。そこで登場するのが UpdateProcessedDoc メソッドです。


UpdateProcessedDoc メソッド

これは NotesSession クラスのメソッドで、デザイナーヘルプによると『エージェントで処理された文書に処理済みのマークを付けます。』とあります。構文は、

  Call notesSession.UpdateProcessedDoc( notesDocument )

となっており、処理済みにしたい文書を引数にセットします。


たとえば、コレクションから最初の文書を取得して処理する場合、次のようなコードとなります。

   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim ndc As NotesDocumentCollection

   Set ndb = ns.CurrentDatabase
   Set ndc = ndb.UnprocessedDocuments  

   '1件目の処理
   Dim nd As NotesDocument
   Set nd = ndc.GetFirstDocument()   '1件目の文書を取得

   '(処理をここに記述)

   Call ns.UpdateProcessedDoc(nd)   '処理済みフラグをセット


対象の文書をすべて処理する場合には、GetNextDocument を使用して順に処理します。

   'すべての文書を処理
   Dim nd As NotesDocument
   Set nd = ndc.GetFirstDocument()

   While Not(nd Is Nothing)
      '(処理をここに記述)

      Call ns.UpdateProcessedDoc(nd)   '処理済みフラグをセット
      Set nd = ndc.GetNextDocument(nd)   '次の文書を取得
   Wend


まとめ

今回は、「作成または変更されたすべての文書」の設定と UpdateProcessedDoc というメソッドの使い方を紹介しました。この機能を利用すると、新たに作成や更新された文書だけを取得する処理が簡単に記述できるようになります。

対象文書を取得する UnprocessedDocuments プロパティが NotesDatabase クラス、処理済みフラグをセットするメソッドが NotesSession クラスとオブジェクトが違うので、少々わかりにくい点に注意しましょう。

なお、この機能はエージェントの処理済みフラグ、要は Notes/Domino の組み込みの機能を利用します。この処理済み情報は文書そのものに保存されるわけではありません。そのため、エージェントの修正や設計変更時には思わぬ挙動につながることがあります。次回はそのあたりの注意点について紹介したいと思います。


0 件のコメント:

コメントを投稿