这是两种不同的错误机制,不能以这种方式组合。ztrap 和 %ETN 用于缓存级别错误(尖括号错误,如<UNDEFINED>
)。%Status 对象用于应用程序级别的错误(包括通过使用缓存类库发生的错误),您可以选择自己处理它们的方式。通过 Cache 错误机制处理错误的 %Status 并没有真正的意义,因为没有发生 Cache 错误。
一般来说,大多数人所做的事情类似于:
d:$$$ISERR(状态) $$$SomeMacroRelevantToMyAppThatWillHandleThisStatus(状态)
可以使用您自己的整个 %Status 代码主机创建您自己的域,并为您的应用程序提供相应的 %msg 值。您的应用程序可能已尝试连接到 FTP 服务器并且密码错误,但这不会抛出 a<DISCONNECT>
并且没有理由调查堆栈,只是需要处理的应用程序级错误,可能通过询问用户输入新密码。
存在这两种并行错误机制可能看起来很奇怪,但它们描述的是两种不同类型的错误。将其中一个视为“平台”级错误,将另一个视为“应用程序级错误”
编辑:我忘记了一件事,尝试 DecomposeStatus^%apiOBJ(status) 或 ##class(%Status).LogicalToOdbc(status) 将状态对象转换为人类可读的字符串。此外,如果您正在执行命令行调试或只想将可读表单打印到主体设备,您可以使用 $system.OBJ.DisplayError(status)。