Artículo
· 28 feb, 2020 Lectura de 2 min

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
  }
}
Comentarios (4)2
Inicie sesión o regístrese para continuar