2009年12月2日水曜日

ビューを開いたとき最後に閉じた文書にフォーカスする


データベースを開いた時に、前回最後に開いた文書をビュー上で選択した(フォーカスした)状態にしたい場合、データベースのプロパティにて「最後に表示していたものを表示する」を有効にすれば「ほとんどの場合」問題ないのですが、最後に閉じた文書をフォーカスしたい、といわれることもあります。

細かいことは気にするな! といいたいところですがそこをグッとこらえて...

ビュー上で文書を選択するには NotesUIView クラスの SelectDocument メソッドを利用します。

最後に開いていた文書を示す値をプロフィール文書へ保存することにします。ここで「文書を示す値」としてユニバーサルID(UNID)を利用したいと思います。
プロフィール文書も複製されますから、このようにしておくことでレプリカを開いたときにも機能しますね。

最後に開いていた文書のUNIDをプロフィール文書へ保存するための式をフォームのイベント Queryclose へ記述します。

@If(@IsNewDoc; @Success; @SetProfileField("PrivateProfile"; "LastOpenDoc"; @Text(@DocumentUniqueID); @UserName))

フォームのイベント Queryclose へ記述した式や Lotus Script はフォームを閉じる前に処理されます。

プロフィール文書のフィールド LastOpenDoc へUNIDを保存します。ただし文書が保存されていない(@IsNewDoc の戻り値が True の)場合はUNIDがないため保存しません。

ビューを開いた後に最後に開いていた文書にフォーカスを当てる処理(Lotus Script)をビューのイベント Postopen へ記述します。

Sub Postopen(Source As Notesuiview)
 Dim db As NotesDatabase
 Dim prof As NotesDocument, target As NotesDocument

 Set db = Source.View.Parent
 Set prof = db.GetProfileDocument("PrivateProfile", db.Parent.UserName)
 If prof.HasItem("LastOpenDoc") Then
  Set target = db.GetDocumentByUNID(prof.GetItemValue("LastOpenDoc")(0))
  If Not (target Is Nothing) Then
   Call Source.SelectDocument(target)
  End If
 End If
End Sub

0 件のコメント:

コメントを投稿