2023/10/25

DXL Step-by-Step:#6)エージェント(設計要素)の DXL

前回からの続きです。文書として取得したエージェント(設計要素)を DXL に変換して確認します。前回掲載したプログラムの中で、赤字の部分が今回の主題となる部分です。

Sub Initialize
         ・・・
   Call nnc.BuildCollection()

   Dim dprs As NotesDOMParser
   If nnc.Count > 0 Then
      Set ndAgent = ndb.GetDocumentByID(nnc.GetFirstNoteID)
      Set dprs = xGetDOMParser(ndAgent)

      Call xSaveDXL(dprs)    'DXL の文字列を文書に保存
   End If
End Sub

まず、エージェント(設計要素)の文書を NotesDOMParser に変換します。この xGetDOMParser 関数は、第 3 回 で作成した関数を流用しています。

次の xSaveDXL 関数は、NotesDOMParser から DXL を文字列で抽出し、文書に保存させる関数です。コードは次の通りです。

Function xSaveDXL(vdprs As NotesDOMParser) As Boolean
   Dim ndb As NotesDatabase
   Dim nd As NotesDocument
   Dim nrti As NotesRichTextItem

   Set ndb = xns.CurrentDatabase
   Set nd = ndb.CreateDocument()
   nd.Form = "DXL"

   Set nrti = nd.CreateRichTextItem("Body")
   Call nrti.AppendText(xGetDXL(vdprs))

   xSaveDXL = nd.Save(True, False)
End Function

Function xGetDXL(vdprs As NotesDOMParser) As String
   Dim nst As NotesStream

   Set nst = xns.CreateStream()
   Call vdprs.SetOutput(nst)
   Call vdprs.Serialize()

   xGetDXL = nst.ReadText()
End Function

今後も DXL を確認する際に頻繁に利用することにりそうなので、重要な関数といえますね。


エージェントの DXL

さて、前置きが長くなりましたが、実行して結果を確認します。出力された DXL を VSCode で整形して確認します(整形については、『DXL ことはじめ:#3)DXL を見やすく整形』を参照)。

設計要素の中身が洗いざらい出力されています。エージェントのプログラムの中身や実行ログまでもが含まれています。


ポイントは次の赤枠の部分です。エージェントの実行スケジュールの詳細が出力されています。


ちなみに、LotusScript に標準搭載のクラス群の中に NotesAgent クラスがあり、Agent の設定などにアクセスできます。しかし、実行の設定に関しては、Trigger というプロパティしかなく、スケジュールエージェントであるかまでしかわからず、実行間隔までは取得できません。


DXL を使えば、実行スケジュールの詳細まで取得できます。この情報とエージェントの実行ログを比較することで、スケジュールエージェントが計画通り稼働しているか確認することも可能となります。

このように、DXL を応用すれば、LotusScript に標準搭載のクラス群を補完することができます。コーディングは少し(かなり?)面倒なのですが、これまであきらめていたことが実現できそうな可能性を感じますね。


前回 DXL Step-by-Step 次回

0 件のコメント:

コメントを投稿