おまけとして toStringWithLabel()関数 を追加しています。 toString()関数 ではフィールド名(アイテム名)をそのまま使うため、出力結果は開発者にしかわからないものでした。 こちらはフィールド名に対応した表示名を指定するラベルを渡すことにより、よりわかりやすい出力になっています。
更新ログをユーザーも参照することがある場合、こちらの使用をお勧めします。 またこちらは、ラベル登録したもの以外は出力しない仕様になっていますので、いちいち removeItem() しなくてすむので、その意味でも使いやすいです。
使い方の例はこちら。
Sub Postsave(Source As Notesuidocument)
Call aDocumentDiffer.process(Source.Document)
Dim targetList$ List
targetList$("Title") = "タイトル"
targetList$("Description") = "概要"
Msgbox aDocumentDiffer.toStringWithLabel(targetList$)
End Sub
実際のコードは以下のようになっています。
Function toStringWithLabel(labelList$ List) As String
toStringWithLabel = ""
If Me.diffDoc Is Nothing Then
Exit Function
End If
Forall item In Me.diffDoc.Items
If Iselement(labelList(item.Name)) = True Then
toStringWithLabel = toStringWithLabel
& labelList(item.Name) & ": "
& Me.getOldValue(item.Name)
& " -> "
& item.Text & Chr(10)
End If
End Forall
End Function
このサイトで紹介されているコードの利用は自由です。 DocumentDifferクラスはまだ使用回数が少なく、実装も練れているとは言えません。 もし使っていただく機会がありましたら、お気づきの点をお知らせいただければ助かります〜
「使用する時は適当なスクリプトライブラリの Declarations セクションにでも貼りつけて」使うイメージでしょうか?
はい、「スクリプトライブラリ、もしくは対象のフォームの (Declarations) セクションに貼りつけて」使ってくださいませ〜
文書を編集する際にバックアップを作成しておいて、それを保存時に参照して差分(変更された部分)をチェックしています。
なので最初にバックアップを保存する必要があります。最初の(1)回に、Sub Postmodechange() を使用する例がありますので、ご参照くださいませ。
DocumentDiffer クラス (1)
http://hannover.sblo.jp/article/1244754.html
最初の(1)回のサンプルでスクリプトを入れてみたのですが、そもそもDocumentDiffer クラス自体を認識しません。クラス名が見当たらないというエラーC0101になります。バージョンが古いんでしょうか?
フォームの (Globals) の (Options) で、DocumentDiffer クラスを定義したスクリプトライブラリを Use していないのが原因ではないでしょうか。
Dim aDocumentDiffer As DocumentDiffer
はクラス定義の後(End Class)に置いてくださいね〜