2025/10/21

共通部品にチャレンジ:#14)LotusScript 実行ログ - ライブラリの完成と利用

前回作成したクラス化したライブラリを実際に使用してみます。

#7)LotusScript 実行ログ - 基本機能のテスト」で作成したエージェントをサンプルとして書き換えてみます。修正箇所がわかりやすいよう修正前後を並べて表示すると以下の通りとなります。修正後の 赤字 は追加、修正前の 青字 は削除となります。

修正後 修正前
Option Declare
Use "StdLog"   '実行ログ の組み込み

Sub Initialize
   Dim i As Integer
   Dim iMax As Integer
   Dim iSum As Integer
   Dim s As String
   Dim oLog As New StdLog("StdLog のテスト")

   On Error GoTo ErrProc

   '初期化
   iMax = 10

   'ログの開始
   Call oLog.LogOpen()
   Call oLog.PrintLog("1 ~ " & CStr(iMax) & " までの総和を求めます...")

'1 ~ iMax までの総和を計算
   For i = 1 To iMax
      s = CStr(i) & ") " & CStr(iSum) & " + " & CStr(i) & " = "
      iSum = iSum + i
      '計算経過の出力
      Call oLog.PrintLog(s & CStr(iSum))
   Next

   Call oLog.PrintSummary("1 ~ " & CStr(iMax) & " までの総和は " & CStr(iSum) & " です。")

   'ログの終了
   Call oLog.LogClose()

   Exit Sub

ErrProc:
   Call oLog.PrintError(Error$ & " (Err = " & CStr(Err) & ", Erl = " & CStr(Erl) & ")")
   End
End Sub
Option Declare
Use "StdLog"    '実行ログ の組み込み

Sub Initialize
   Dim i As Integer
   Dim iMax As Integer
   Dim iSum As Integer
   Dim s As String


   On Error GoTo ErrProc

   '初期化
   iMax = 10

   'ログの開始
   Call LogOpen("StdLog のテスト")
   Call PrintLog("1 ~ " & CStr(iMax) & " までの総和を求めます...")

   '1 ~ iMax までの総和を計算
   For i = 1 To iMax
      s = CStr(i) & ") " & CStr(iSum) & " + " & CStr(i) & " = "
      iSum = iSum + i
      '計算経過の出力
      Call PrintLog(s & CStr(iSum))
   Next

   Call PrintSummary("1 ~ " & CStr(iMax) & " までの総和は " & CStr(iSum) & " です。")

   'ログの終了
   Call LogClose()

   Exit Sub

ErrProc:
   Call PrintError(Error$ & " (Err = " & CStr(Err) & ", Erl = " & CStr(Erl) & ")")
   End
End Sub

プログラムの基本構造に変化はありません。クラスのオブジェクト oLog を作成し、そのメソッドをコールしている点だけが違いますね。


クラス化の必要性は、「#12)LotusScript 実行ログ - 実際の利用と課題」でまとめまた通りなのですが、このライブラリを組み込む場合の制限が減ることが最大の利点です。

少々極端な例ですが、クラス名と同じ変数が宣言されていても問題ありません。クラス名と変数名が混同されることはないようです。

Option Declare
Use "StdLog"    '実行ログ の組み込み

Sub Initialize
   Dim StdLog As String
   Dim oLog As New StdLog("StdLog のテスト")

   '初期化
   StdLog = "Test"

   'ログの開始
   Call oLog.LogOpen()
   Call oLog.PrintLog(StdLog)
         ・・・

うまくいかないパターンといえば、ライブラリと同じ名前のクラスが組み込み側にあった場合となります。ただ、ライブラリとして提供するクラス名には Std の接頭文字をつけるなどルールを決めておけばこのような問題も起こらないでしょう。


まとめ

「LotusScript 実行ログ機能」の共通部品化(ライブラリの作成)作業はこれでいったん終了です。現時点ではログ出力の必要最低限の機能となっており、経過時間の閾値の設定や出力 DB を指定などの機能強化が欲しいところです。機会があれば別途まとめたいと思います。

ところで、この記事を書いていて、デザイナーのバグ(?)を一つ発見しました。スクリプトライブラリの名称とクラスの名称が同じ場合、ポップアップヘルプが正しく表示されないようです。

たまたま、ライブラリの名称を変えてみたら、正しく表示されるようになりました。何が原因か想像できない意味不明なバグ(?)ですね。デザイナーが不安定になっているのかと思い、何度も再起動してしまいました...


前回 共通部品にチャレンジ


0 件のコメント:

コメントを投稿