DialogboxはLotusScriptでClose出来ないのか? -1-
みなさんも、DBでDialogboxを表示して入力を求めることは多いと思います。
@Formulaで処理していればとても簡単に出来る訳ですが、DialogboxのCloseを制御することもあります。
更に、文書から呼び出した場合はDialogboxで入力した値を独自に呼び出し元の文書に書き込んだりしますし、Viewから呼び出した場合は文書に入力値を戻すことなく別の処理をすることもあるでしょう。
通常、Dialogboxの文書は保存しないのでSaveOptions="0"を設定するのは当たり前の話ですが、Close制御の為に別のFieldを用意して、QueryClose EventやOnUnload EventでFieldの値をCheckしてContinue=Falseで制御します。
この場合、Notesが標準で提供する「OK」、「キャンセル」Buttonではなく、独自のButtonでDialogboxに「設定」、「キャンセル」といったButtonを設定します。
良く用いる方法は、Buttonには以下の式を記述することです。
【キャンセル】
Field CloseCheck := "0"
@Command([FileCloseWindow])
【OK】
Field CloseCheck := "1"
@Command([FileCloseWindow])
CloseCheckというFieldに値を設定して、QueryClose EventやOnUnload Eventに記述したLotusScriptでCloseCheck Fieldが設定されていないとDialogboxを閉じないようにするのです。
Sub Onunload(Source As Notesuidocument, Continue As Variant)
Dim CloseCheck As String
CloseCheck = Source.Document.CloseCheck(0)
Select Case CloseCheck
Case "0" ' キャンセル選択
-- 処理記述 --
Continue = True
Case "1" ' OK選択
-- 処理記述 --
Continue = True
Case Else
Continue = False
End Select
End Sub
まあ、標準で使うと、EscキーやWindowの「X」で閉じられてしまうため、これを防止したい時に利用する訳です。
この使い方をしている限りは何も問題なく動作すると思います。
皆さんの中には、Dialogboxの中に書いたButtonでもっと複雑な処理をさせたいと思い、LotusScriptで記述しようと思われる方もいらっしゃるかも知れません。
LotusScriptで記述する場合、Dialog画面を閉じようとして、以下のようにCall uidoc.Close と最後に書いてしまうことがあるかも知れません。
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
Call uidoc.FieldSetText("CloseCheck" , "1")
Call uidoc.Close
End Sub
これを書いてしまうと、以下のErrorが発生します。
つまり、Call uidoc.Close を書いたことで、uidocは既に存在せず、QueryClose EventやOnUnload Eventでのuidoc参照でErrorしてしまうという訳です。
しかし、@Formulaで書くと何の問題もなく、DialogboxがCloseされる訳です。
この違いは何なのか??と疑問になります。
ということで、少しだけ実験したいと思います。
今回は、Dialogboxを閉じる為にuidoc.Closeを実行した場合の問題を見てみました。
次回は、もう少し詳しく調査してみたいと思います。