使用 LotusScript 进行错误处理 - 继续程序执行

Error Handling With LotusScript - Continue Program Execution

对于如何使用此 LotusScript 片段继续执行程序,我有点迷茫。它从视图中提取所有文档,但是,它命中了包含 'Overflow' 错误的某个文档,该错误会停止程序,而不是忽略它并继续下一个文档。正在打印错误信息,可见代码进入了ErrorHandler,随后结束。

Option Public
Option Declare

Sub Initialize
    'init stuff, etc

    Set view = db.getView("Main")
    Set doc = view.getFirstDocument()
    Set lastDoc = view.getLastDocument()
    k = 0

    While (Not doc is Nothing)
        dealId = doc.DealId(0)
        If(doc.HasEmbedded) Then 
            Set body = doc.GetFirstItem("Body")         
            If(Not body Is Nothing) Then 
                'code to extract all attachments on a document
            End If
        End If

nextDoc:
        Set doc = view.getNextDocument(doc)
        k = k + 1
    Wend    
    Exit Sub 

errHandler:
    Print "Get error when process document with dealId=" & dealId & " at line " & CStr(Erl) & ". Err=" & CStr(Err) & ", error=" & Error
    GoTo nextDoc
    'this should continue execution of nextDoc
End Sub

添加一行

On Error GoTo errHandler

在 While 之前并用

替换 Print 之后的行
Resume nextDoc

您的代码可能会导致无限循环。例如,如果视图 "Main" 不可用,行
Set view = db.getView("Main") 会导致错误。执行将跳转到 errHandler 并从那里跳转到 nextDoc。 Set doc = view.getNextDocument(doc) 行也会抛出错误,因为 doc 是 Nothing。执行将跳转到 errHandler 并从那里跳转到 nextDoc 并且...我们有一个不定式循环。

您可以通过这样的错误处理来避免这种情况:

nextDoc:
        Set doc = view.getNextDocument(doc)
        k = k + 1
    Wend    

finito:
    Exit Sub 

errHandler:
    If doc is Nothing then
        Print "This is a serious error before while..."
        Resume finito
    Else
        Print "Get error when process document with dealId=..."
        Resume nextDoc
    End If
End Sub