Lotus notes “莲花笔记”;MAILDOC类型不匹配“;调试时出错

Lotus notes “莲花笔记”;MAILDOC类型不匹配“;调试时出错,lotus-notes,lotusscript,lotus,lotus-formula,Lotus Notes,Lotusscript,Lotus,Lotus Formula,我在lotusnotes中有一个应用程序,在调试过程中不断出现错误,但由于该错误与任何特定操作无关,因此不会停止。每当我打开应用程序数据库并单击Debug Lotusscript,然后单击某个特定视图的任何内容时,我都会得到一个关于MAILDOC类型不匹配的错误!我已经浏览了这个特定的视图,但无法准确定位类型不匹配发生的位置。我已经检查了MAILDOC的类型,它被声明为NotesDocument。有人能帮我吗?要调试与视图关联的代码,必须在打开视图之前启用调试器。 我想知道,如果您无法调试以找到

我在lotusnotes中有一个应用程序,在调试过程中不断出现错误,但由于该错误与任何特定操作无关,因此不会停止。每当我打开应用程序数据库并单击Debug Lotusscript,然后单击某个特定视图的任何内容时,我都会得到一个关于MAILDOC类型不匹配的错误!我已经浏览了这个特定的视图,但无法准确定位类型不匹配发生的位置。我已经检查了MAILDOC的类型,它被声明为NotesDocument。有人能帮我吗?

要调试与视图关联的代码,必须在打开视图之前启用调试器。 我想知道,如果您无法调试以找到行,您如何知道错误与MAILDOC有关。听起来应用程序中必须已经有代码来捕获错误并显示其他信息,但是捕获错误的函数没有显示足够的信息来定位问题——例如,它没有显示函数的名称或行号

还要注意的是,如果您依赖LotusScript调试器在错误行上自动停止,那么如果您的代码捕获错误并显示消息,则不会发生这种情况。您需要一步一步地检查代码以找到错误行

我强烈建议您将错误捕获代码放入所有LotusScript模块中。这涉及在每个模块的开头和结尾插入某些行,如下所示:

' FUNCTION IN A CLASS
    On Error Goto oops
    ' ...
    Exit Function
oops:
    Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0))

' SUB IN A CLASS
    On Error Goto oops
    ' ...
    Exit Sub
oops:
    Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0))

' CLASS PROPERTY
    On Error Goto oops
    ' ...
    Exit Property
oops:
    Error Err, Error & { //} & TypeName(Me) & {.} & GetThreadInfo(1) & {:} & Erl & (Erl-Getthreadinfo(0))

' SIMPLE SUB
    On Error Goto oops
    ' ...
    Exit Sub
oops:
    Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl

' SIMPLE FUNCTION
    On Error Goto oops
    ' ...
    Exit Function
oops:
    Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl
如果您没有使用面向对象的LotusScript,那么对于简单的函数和子函数,您只需要最后两个。“…”是放置函数现有代码的位置。例如,如果您的函数是:

Function Invert(x) As Long
   Invert = -x
End Function
然后你会写:

 Function Invert(x) As Long
     On Error Goto oops
     Invert = -x
     Exit Function
oops:
    Error Err, Error & { //}& GetThreadInfo(1) & {:} & Erl
 End Function

如果您一直这样做,那么无论何时出现错误,消息都将包含完整的错误堆栈,其中包含函数名和行号,这将使查找问题所在变得简单。

有时,当我遇到很难找到的错误时,我所做的是从所有设计元素生成“Design Sinopsys”。然后,查找单词“MAILDOC”(以及生成错误的行)非常容易

您是否检查了与表单关联的代码?如果预览窗格打开,甚至只显示一个像素,则单击视图中的文档将触发与表单中事件关联的代码。产生错误的代码也可以位于视图“Regiondoubleclick”或“Onselect”中事件大多数事件处理NotesUIDocument而不是Notesdocument,这可能是类型不匹配的原因。然而,最主要的事情是找到它发生的地方——正如@Andre Guirard所说,您必须在打开视图之前打开lotusscript调试器,以便它从一开始就以调试模式运行脚本。另一种方法是放置messagebox(弹出消息)或打印语句(将出现在屏幕底部的状态栏中),告诉您它在坠落之前已经走了多远。