なんちて。
最近、J-SOX だの 内部統制 だのの流れで、システムの要件に厳密な権限管理や、詳細ログの保存等が盛り込まれることが多いようです。
知り合いも既存の Notes DB に、文書の変更ログ機能 を追加するよう言われていました。 変更のあったフィールドを、基本的にはすべてログする必要があるとのことです。 フィールドの数が多いので眩暈がすると嘆いていました。
いい機会ですので、(頭の隅の)倉庫に眠っていた DocumentDiffer クラスをご紹介します。
まずは恒例の使い方から。
まずはフォームの (Globals) の (Declaration) で大域変数を宣言しておきます。
Dim aDocumentDiffer As DocumentDiffer
後は以下のように利用します。
Sub Postmodechange(Source As Notesuidocument)
' 文書の変更前の状態をバックアップ
If Source.EditMode = True Then
Set aDocumentDiffer = New DocumentDiffer(Source.Document)
End If
End Sub
Sub Postsave(Source As Notesuidocument)
' 変更前との差分を作成
Call aDocumentDiffer.process(Source.Document)
' 今回の例では単にポップアップ表示するだけ
Msgbox aDocumentDiffer.toString
End Sub
文書を更新すると、更新したフィールドの名前と、変更前後の値がポップアップ表示されるようになるはずです。
次回はコンストラクタあたりから、実際のコードをご紹介しましょう。