前回、『ビューで選択した文書の取得』では、LotusScript でビューで選択した文書を順次処理する2つの方法を紹介しました。NotesUIView を使用した方法とエージェントで指定した対象を UnprocessedDocuments で取得する方法です。
どちらも同様の処理が実現できるのですが、細かな点で挙動が違うので、注意が必要です。
検証プログラム
まずは検証に使用するプログラムを準備します。『ビューで選択した文書の取得』と同様のコードなのですが、NotesDocumentCollection オブジェクトを取得した後、その件数を表示するだけに簡素化します。それぞれ、次のようなコードとし、ビューのアクションボタンから実行します。
◇ NotesUIView
Sub Click(Source As Button) Dim nuiw As New NotesUIWorkspace Dim nuiv As NotesUIView Dim ndc As NotesDocumentCollection Set nuiv = nuiw.CurrentView Set ndc = nuiv.Documents Msgbox Cstr(ndc.Count) & " 文書", 64, "UIView" End Sub |
◇ エージェント
Option Declare Sub Initialize Dim ns As New NotesSession Dim ndb As NotesDatabase Dim ndc As NotesDocumentCollection Set ndb = ns.CurrentDatabase Set ndc = ndb.UnprocessedDocuments MsgBox CStr(ndc.Count) & " 文書", 64, "Agent" End Sub |
作成したエージェントは、シンプルアクションで実行する設定とします。
フォーカスの文書
ノーツのビューでは、左のチェックマークとは別に、1行だけフォーカスが当たった状態にできます。次のように、枠で囲われた行のことです。
この状態で上記2つのプログラムを実行すると結果に違いがあります。エージェントの場合だけ、選択した文書として取得できます。
ちなみに、左にチェックマークを入れた状態では、どちらの処理でもフォーカスがあったっている文書は無視されます。
選択状態の保持
続いて、左にチェックマークを付け文書を選択した状態で実行します。どちらも同様の結果となります。そして、実行後も文書は選択された状態を維持します。
ところが、下図のようにエージェントをアクションメニューから実行すると選択が解除されチェックマークが外れます。
なぜこのような挙動になるのかは不明ですが、エージェントをエージェントとして素直に利用した場合と他のプログラムから呼び出したときとの差なのだと思います。
選択の解除
上記の通り、選択状態が保持されることにより、あらぬバグを招く可能性があります。例えば、ワークフローアプリで[まとめて承認]ボタンを作ったとします。承認するとステータスが進み、次の承認者に編集権限が移ります。
この時、文書の選択が保持されていると、もう一度ボタンを押すと権限のない文書に対して再度承認処理を行うことになり、エラーにつながります。数回に分けて承認するような操作を行うときは特に注意が必要ですね。
強制的にビューの選択を解除するには NotesUIView クラスの DeselectAll メソッドを利用します。
Call nuiv.DeselectAll() |
0 件のコメント:
コメントを投稿