2025/09/25

共通部品にチャレンジ:#6)LotusScript 実行ログ - ログの終了(LogClose 関数)

#3 から開始したライブラリ作成作業の続きです。今回はログの終了処理について紹介します。これで基本機能が完成です。


◇ ログの終了(LogClose 関数)

ライブラリ利用者とのインターフェースとなる関数はシンプルです。終了処理を行うサブ関数 xLogClose をコールするだけです。

Public Function LogClose() As Boolean
   Call xLogClose()
End Function


◇ ログ終了の本体

ログが初期化され出力中であるかをはじめに確認します。その後、ログの終了メッセージを記録し、終了時間、通常ログとエラーの件数を記録して文書を保存します。

Function xLogClose() As Boolean
   If xbIsInit = False Then Exit Function

   '終了処理
   If xbIsOpen Then
      '処理終了メッセージの出力
      Call PrintLog(|ログ出力の終了|)
      xndLog.LogEndTime = Now      '処理時刻
      xndLog.LogMessageCount = xlMessage      '通常ログの件数
      xndLog.LogErrorCount = xlError      'エラーログの件数
      Call xndLog.Save(True, True)

      'フラグリセット
      xbIsOpen = False
      Set xndLog = Nothing

      xLogClose = True
   End If
End Function

ログ文書の保存後は、xbIsOpen を False に設定、文書を開放して Private 変数を整えます。これでログの終了は完了です。


◇ Terminate の定義

不測の事態に備えて、スクリプトライブラリの Terminate を記述します。ライブラリが閉じるときログが記録中だった場合、ログを強制的に終了させます。

Sub Terminate
   If xbIsOpen Then
      'Close できていない
      Call xPrintLog(True, xcsLibName & ": LogClose() が実行されずに終了しました...")
      Call xLogClose()
   End If
End Sub

これで LogClose() をコールし忘れた場合でも、ログが保存されます。また、Ctrl + Break で強制終了した場合にも対応できます。『LogClose() が実行されずに終了しました...』メッセージはエラーのフォントで表示させているので気づきやすくしています(エラー扱いではない)。


まとめ

このような共通部品では、安定性が重要となります。内部でエラーが起きないことはもちろんですが、想定外の使用に備えて、インターフェースとなる関数の最初でステータスのチェックを行っています。また、Terminate を活用して異常終了時でも、できる限りリカバリする点がポイントとなります。

これで、LotusScript 実行ログ出力の基本機能は完成です。次回は、このライブラリを利用して動作確認をします。


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


0 件のコメント:

コメントを投稿