2006年11月08日

DocumentDiffer クラス (6)

これまでご紹介した DocumentDifferクラス20061108_DocumentDiffer_v100.txt にまとめました。

おまけとして 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クラスはまだ使用回数が少なく、実装も練れているとは言えません。 もし使っていただく機会がありましたら、お気づきの点をお知らせいただければ助かります〜
posted by yamachan at 23:00| Comment(7) | TrackBack(0) | my設計パターン
この記事へのコメント
ちなみにこのDocumentDiffer クラスも
「使用する時は適当なスクリプトライブラリの Declarations セクションにでも貼りつけて」使うイメージでしょうか?
Posted by Notes一般ユーザー at 2007年11月28日 12:43
Notes一般ユーザーさん、こんにちは。 コメントありがとうございます!
はい、「スクリプトライブラリ、もしくは対象のフォームの (Declarations) セクションに貼りつけて」使ってくださいませ〜
Posted by yamachan at 2007年11月28日 12:57
スクリプトライブラリのDeclarationsセクションに貼り付けてPostsaveイベントで例のように書けば使えるんでしょうか?aDocumentDifferとDocumentDifferとクラスとの関係がいまいちわかってません
Posted by Notes一般ユーザー at 2007年11月28日 15:06
どもども、返答が遅れましてスミマセン。

文書を編集する際にバックアップを作成しておいて、それを保存時に参照して差分(変更された部分)をチェックしています。

なので最初にバックアップを保存する必要があります。最初の(1)回に、Sub Postmodechange() を使用する例がありますので、ご参照くださいませ。

DocumentDiffer クラス (1)
http://hannover.sblo.jp/article/1244754.html
Posted by yamachan at 2008年01月15日 19:51
回答ありがとうございます。
最初の(1)回のサンプルでスクリプトを入れてみたのですが、そもそもDocumentDiffer クラス自体を認識しません。クラス名が見当たらないというエラーC0101になります。バージョンが古いんでしょうか?
Posted by Notes一般ユーザー at 2008年02月05日 16:34
あ、説明が足りなくてすいません。

フォームの (Globals) の (Options) で、DocumentDiffer クラスを定義したスクリプトライブラリを Use していないのが原因ではないでしょうか。
Posted by yamachan at 2008年02月06日 18:33
ちなみに (Declaration) にクラス定義をそのまま貼っている場合には、

Dim aDocumentDiffer As DocumentDiffer

はクラス定義の後(End Class)に置いてくださいね〜
Posted by yamachan at 2008年02月06日 18:39
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/1685050

この記事へのトラックバック