2006年09月20日

DocumentDiffer クラス (2)

DocumentDiffer クラス (1) に引き続き、コードをご紹介します。

今回はコンストラクタ部分です。 コンストラクタは、対象のNotes文書を引数にします。

DocumentDiffer はインスタンス生成の際、後の差分作成(process 関数)の実行に備え、必要なフィールドを全て保持しようとします。 具体的には、内部にテンポラリ文書を作成し、必要なフィールド(NotesItem)をコピーしておきます。

保持しておくフィールドは、とりあえず 日付・名前・数値・テキストに限定しています。 また '$' 文字で始まるフィールドは、システムで利用するフィールドが多いので、保持する対象からはずしています。

さて、実際のコードをみてみましょう。
Public Class DocumentDiffer
Private oldDoc As NotesDocument
Private diffDoc As NotesDocument

' ---- Constractor/Destractor methods ----

Sub New(doc As NotesDocument)
Dim session As New NotesSession
Set Me.oldDoc = session.CurrentDatabase.CreateDocument

Forall item In doc.Items
If item.Type = DATETIMES Or item.Type = NAMES Or
item.Type = NUMBERS Or item.Type = TEXT Then
If Left$(item.Name, 1) <> "$" Then
Call item.CopyItemToDocument(Me.oldDoc, item.Name)
End If
End If
End Forall
End Sub

Sub Delete
Delete Me.oldDoc
If Not(Me.diffDoc Is Nothing) Then
Delete Me.diffDoc
End If
End Sub
End Class

New の部分をみますと、条件に合うフィールドをコピーするだけの、わりあい単純な仕組みであることがわかるとおもいます。

Delete はいつもながら、生成したインスタンスを削除するだけの最低限のものです。

さて次回は、実際に差分を作成する process() 関数の定義をみていきましょう〜
posted by yamachan at 00:57| Comment(0) | TrackBack(0) | my設計パターン
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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