2023/12/23

ビューの選択文書の処理で注意すること

前回、『ビューで選択した文書の取得』では、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 件のコメント:

コメントを投稿