2006年09月26日

DocumentDiffer クラス (4)

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

まずはベタですが、チェック対象のフィールドを追加したり外したりする add/removeItem() 関数。 例えば更新履歴のフィールドなど、removeItem("updateHistory") などと外しておくのがお勧めデス。
Sub addItem(doc As NotesDocument, itemName$)
Dim tmpItem As NotesItem

Set tmpItem = doc.getFirstItem(itemName$)
If Not(tmpItem Is Nothing) Then
Call tmpItem.CopyItemToDocument(Me.oldDoc, itemName$)
End If
End Sub

Sub removeItem(itemName$)
Call Me.oldDoc.removeItem(itemName$)
End Sub

続きましては、更新されたフィールドの以前の値を得るための getOldValue() 関数です。 あると意外と便利なのと、内部の仕組みをあるていど隠蔽するために実装してみたり。
続きを読む
posted by yamachan at 23:51| Comment(0) | TrackBack(0) | my設計パターン

2006年09月21日

DocumentDiffer クラス (3)

超操縦メカMG にハマって更新が止まっている今日この頃。 僕らの世代を狙い撃ちのゲームだとおもうんですが、意外に売れてないみたいですね...。

さて今回も DocumentDiffer クラス (2) に引き続き、コードをご紹介します。

今回は、実際に差分を作成する process関数 です。 process関数の引数は、更新後のNotes文書 (NotesDocument) です。

実際に処理をおこなっているのは、Forall の部分です。 New で必要なフィールドのみ oldDoc にコピーしているので、今度はそれを1つずつ、更新後の文書の同名フィールドと比べているわけです。
続きを読む
posted by yamachan at 09:44| Comment(287) | TrackBack(0) | my設計パターン

2006年09月20日

DocumentDiffer クラス (2)

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

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

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

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

さて、実際のコードをみてみましょう。
続きを読む
posted by yamachan at 00:57| Comment(301) | TrackBack(0) | my設計パターン

2006年09月09日

DocumentDiffer クラス (1)

先日、職場のヒトが ソックス の話をしていたので、ニーソックス絶対領域 に関する熱い話題 を期待して近づいていったら、J-SOX 法に関する話題でした... orz

なんちて。

最近、J-SOX だの 内部統制 だのの流れで、システムの要件に厳密な権限管理や、詳細ログの保存等が盛り込まれることが多いようです。

知り合いも既存の Notes DB に、文書の変更ログ機能 を追加するよう言われていました。 変更のあったフィールドを、基本的にはすべてログする必要があるとのことです。 フィールドの数が多いので眩暈がすると嘆いていました。

いい機会ですので、(頭の隅の)倉庫に眠っていた DocumentDiffer クラスをご紹介します。
続きを読む
posted by yamachan at 21:40| Comment(0) | TrackBack(0) | my設計パターン

2006年09月08日

LotusScript に対する不満?(2) Variant

さて Variant型 に関する不満(?)です。 いや嫌いじゃないんですけどね。

使うたびに頭の中で 三石琴乃さん (マリュー・ラミアス大尉)の、「ヴァリアント、てー!」という声が響くんですよね〜 というのは嘘で。

どうも馴染めないのは、あまりに柔軟すぎるから、だとおもいます。 Variant を利用すると途端に、静的な事前チェックがほとんどできなくなる気がします。

Variant 型にもクラスのインスタンスを代入できます。 代入されたのがどのクラスかは IsA 演算子 で確認できますが、なんと! クラスそのものではなく、クラス名(文字列)と比較しているような気が。 あらビックリ。
続きを読む
posted by yamachan at 00:24| Comment(0) | TrackBack(0) | 雑談

2006年09月06日

LotusScript に対する不満?(1) オーバーロード

最初に書きましたが、僕はもともとは Java な人でした。 LotusScript を使い始めたとき、まず調べたのはクラスの定義方法。 で、その制限の多さには少し驚きました。

極論するとこれ、オブジェクト指向というよりも、、、単に継承&カプセル化が利用できるようになった、便利なデータ型なのではないかと。 (言葉悪くて、スイマセン...)

まず最初に困ったのは、メソッド(クラス Function) に オーバーロード が無いことです。 簡単に言えば、引数の異なる同じ名前のメソッドを定義できる、というものです。
続きを読む
posted by yamachan at 23:36| Comment(4) | TrackBack(0) | 雑談