Fragmentos de código para gestión de errores de ObjectScript
¡Hola Comunidad!
ObjectScript tiene al menos tres formas de manejar errores (códigos de estado, excepciones, SQLCODE, etc...). La mayor parte del código del sistema usa estados, pero las excepciones son más fáciles de manejar por varias razones. Al trabajar con código heredado, se invierte un tiempo en traducir las distintas técnicas. Yo uso mucho estos fragmentos de código como referencia. Espero que también os sean útiles.
///Status from SQLCODE: set st = $$$ERROR($$$SQLError, SQLCODE, $g(%msg)) //embedded SQL set st = $$$ERROR($$$SQLError, rs.%SQLCODE, $g(rs.%Message)) //dynamic SQL ///Exception from SQLCODE: throw ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE,%msg) //embedded SQL throw ##class(%Exception.SQL).CreateFromSQLCODE(rs.%SQLCODE,rs.%Message) //dynamic SQL throw:(SQLCODE'=0)&&(SQLCODE'=100) ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE,%msg) //don't throw if query succeeds or finds no data ///Exception from status: $$$ThrowOnError(st) ///Status from exception: set st = err.AsStatus() ///Creating a custom error status: set st = $$$ERROR($$$GeneralError,"Custom error message") ///Throwing a custom exception: $$$ThrowStatus($$$ERROR($$$GeneralError,"Custom error message")) ///Handling a SOAP error with a status: try { //SOAP request code } Catch err { If err.Name["ZSOAP" { Set st = %objlasterror } Else { Set st = err.AsStatus() } } return st ///Defining a custom exception class Class App.Exceptions.SomeException Extends %Exception.AbstractException { Method OnAsStatus() As %Status { return $$$ERROR($$$GeneralError,"Custom error message") } } ///Throwing and catching a custom exception try { throw ##class(App.Exceptions.SomeException).%New() } catch err { if err.%ClassName(1) = ##class(App.Exceptions.SomeException).%ClassName(1) { //some handling unique to this type of exception } }
Ir a la publicación original, escrita por @Pravin Barton
Genial, muy útil!
Información realmente útil. La gestión de errores reduce en gran medida la complejidad de un código. Esos números mágicos como el retorno de error son una pesadilla.
muy bueno