Workspace.ComposeDocument和QueryOpen和PostOpen事件

时间:2011-10-05 14:31:38

标签: lotus-notes lotusscript

我正在使用以下代码在另一个表单的操作中创建文档:

Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim NewItemDoc As NotesUIDocument
    Dim ParentUNID As String

    ParentUNID = ws.CurrentDocument.Document.UNID(0)

    Set NewItemDoc = ws.ComposeDocument("","","Item")

    Call NewItemDoc.Document.ReplaceItemValue("ParentUNID", ParentUNID)
End Sub

我在Item表单的QueryOpenPostOpen事件处理程序中有代码,但它们根本没有运行。当我使用@Command([Compose])时,它被称为。

调试lotusscript时,它不会逐步执行这些事件处理程序。

我如何获得lotusscript中的等价物? 即如何触发QueryOpenPostOpen事件?

1 个答案:

答案 0 :(得分:2)

根据您的经验,这只是两件事。

使用“选项声明”,虔诚地,并且始终(总是)在您的潜艇,功能和UI事件中包含错误捕获。实时节省。使用您的代码示例,我用于UI错误处理的经典代码是

Sub Click(Source As Button)
    on error goto errHandle
    Dim ws As New NotesUIWorkspace
    Dim NewItemDoc As NotesUIDocument
    Dim ParentUNID As String

    ParentUNID = ws.CurrentDocument.Document.UNID(0)

    Set NewItemDoc = ws.ComposeDocument("","","Item")

    Call NewItemDoc.Document.ReplaceItemValue("ParentUNID", ParentUNID)
    Exit Sub 
  errhandle:
    MessageBox Lsi_info(2) + " : " + Str(Err) + " - " + Error(Err) + ", at line " + Str(Erl)
    Exit Sub 
End Sub

您可以选择使用print语句或更复杂的内容来记录错误。必不可少。 LSI_Info function(更多信息here)已经存在了一段时间,对我来说从未成为问题。

其次,当您从LotusScript启动新表单时,LotusScript调试器不会使用新表单运行。这是因为LotusScript调试器一次只在一个“UI进程线程”上运行,启动一个新的UI表单(不是对话框),运行一个新实例。我在这里使用术语“进程线程”非常松散,因为我试图区分UI表单彼此独立且不进行交互,因此调试器不会遵循新表单。

与具有模态对话框的行为不同。调试器也不会进入对话框,(请记住,您将收到该警告消息),当您关闭表单时,调试器将返回到原始表单,因为它直接链接到原始UI线程。