我继承了一个Lotus notes应用程序,其中一件让我烦恼的事情是每个函数/ sub / property都有onerror语句和错误处理程序标签,除了打字错误之外都做同样的事情。此外,不幸的是,这个应用程序已经过了几次修改和一些错误处理程序:标签有修改,而其他没有。我想标准化并集中这种行为。
是否有办法为给定文档提供单个错误处理程序,如果在文档中的任何位置引发错误,则调用该特定错误处理程序?
谢谢,
答案 0 :(得分:2)
每个脚本执行可以有一个错误处理程序。您不能拥有一个全局文档。在文档中触发的每个事件都会导致新的脚本执行。
也就是说,每个函数有一个错误处理程序通常是有利的,但如果它们实际上完全相同,那么这个优点就会丢失。更好的做法是自定义它们,以便每个错误处理程序记录当前函数的名称。 (当然,由于复制/粘贴懒惰,这在理论上通常比在实践中更有效。)
答案 1 :(得分:0)
如果你有On Error Goto SomeLabel
语句(其中SomeLabel
是代码实际使用的标签),标签必须存在于包含该语句的同一个子/函数中,因此从技术上讲,你需要一个每个子/函数的单独处理程序。
然而,有些事情可能会简化问题......
如果一个Sub / Function调用另一个Sub / Function,而内部的一个没有错误处理程序而外部的那个(调用者)没有,那么内部Sub / Function中的错误将被处理程序捕获在来电者。
此设置为您提供较少的信息(您无法获取内部子/函数中发生错误的行号),但如果您有任何您确定无法生成的子/函数可能会有所帮助错误,或只有一行可能发生错误。
如果您有一些静态消息文本或日志记录在许多错误处理程序中是相同的,那么您可以在Form Globals(或在脚本库中具有绝对最小化代码重复)中包含Sub / Function,其中包含静态部分错误处理程序,并获取变量部分的参数(错误消息,行号和子/函数名称)。
最后,这段代码将生成当前Sub / Function的名称,并且只要代码声明包含%include "lsconst.lss"
或使用包含脚本库的脚本库,就可以更容易地在许多地方使用相同的错误处理程序相同的%include
声明:
GetThreadInfo(LSI_THREAD_PROC)
另一个函数LSI_Info
也可以为您提供当前Sub / Function的名称,但不受IBM支持,应该避免使用。