2006年08月12日

Querysave 依存症からの脱却?

他人の開発した Notes DB の修正を依頼されることがあります。 その場合にまず確認するのは、主に使用されているフォームの Querysave ルーチンですね。Querysave 部分が非常に長い場合、可能ならばその依頼を断ることにしています。

元の設計者にまったく罪は無くて、単に僕の趣味にあわないコードなだけなんですが、それはきっと僕にとって、あまり楽しくない仕事になるだろうから...。

常に必須なフィールドのチェックが無ければ、僕の Querysave はたいてい、以下のようにシンプルなものです。
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If Source.FieldGetText("SaveControl") = "on" Then
Msgbox "アクションボタンを押して処理してください (破棄する
場合は保存の問い合わせで「いいえ」を選択)"
Continue = False
End If
End Sub
Querysave が長い設計の場合、その理由はたぶん、利用者が「閉じる」ボタンを利用してくれないからじゃないでしょうか。 「ESCキー」や「右ダブルクリック」などで文書を保存するクセのある人は意外に多いです。 で、それに対応するため Querysave に必要な処理を含めないといけない訳で。

でも僕は、まずその保存方法自体が「必要な要件に含まれるかどうか」を必ず確認するようにしています。 もし要件に入らないのであれば、「ESCキー」で文書を保存することは禁止したほうがいい、と個人的には考えています。 利用可能なオペレーションを制限するのは、必ずしも悪いことではありません。

例えば「承認依頼」はアクションでしかできないのに、保存だけ「保存」以外の操作方法が存在するのは不自然じゃないでしょうか。 また「ESCキー」で閉じる処理には、ラベルを付けられません。 その処理はDBの設計に依存するので、利用者が本当にその処理を意図して実施したのか不明瞭になる気がしてます。 ある DB では「ESCキー」で閉じたら「ドラフト保存」になるのに、別な DB では通常の「保存」になっていて、しかも関係者に更新の連絡メールが飛んでしまった... まだ書きかけだったのに... なんて失敗が発生してもおかしくないデス。

というわけで僕は、基本的にアクション以外での文書の保存ができないよう設計しています。

ところで、前述の Querysave がうまく動作するためには、"SaveControl" というフィールドがきちんと管理されていないといけないですよね。 そこで僕は Postmodechange に以下のようなロジックを記述しています。 文書が編集状態になったとたんに、"SaveControl" フィールドを on にするわけ。
Sub Postmodechange(Source As Notesuidocument)
If Source.EditMode = True Then
Call Source.FieldSetText("SaveControl", "on")
End If
End Sub
でこの場合、例えば「保存」アクションは以下のようになります。 (History 設定しているとこはオマケ)
FIELD History := History + @NewLine + "Updated by " +
@Name([CN]; @UserName) +" on " + @Text(@Now);
FIELD SaveControl := "off";
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow])
各アクションに必要な処理は、各アクション自体のロジックに記載されるべきだ、と僕は考えています。

仕様書のワークフローから Notes DB の設計を実装する際、存在する各アクション(フロー,状態遷移)は、一対一でNotes設計要素のアクションに対応していると管理がしやすく、修正もしやすくなります。 また修正範囲が限定されるため、テストの実施も楽になります。 このへんの仕様書と設計の整合に関しては別途、まとめてみたいですね。 また利用者としても、Querysave で全部のエラーチェックが実施される仕組みは、あまり使い勝手が良くならないイメージがありますね。

もし無意識に長い Querysave を書いている方が居たら、振り返って、その理由をしっかり考えてみるのもいいのではないでしょうか。 理由があって、わかってやっているぶんには、問題はないと思いますし。
posted by yamachan at 00:28| Comment(0) | TrackBack(0) | my設計パターン
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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