Artículo
Mathew Lambert · 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
  }
}
3
1 308
Debate (4)2
Inicie sesión o regístrese para continuar

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.

Este artículo está etiquetado como "Mejores prácticas" ("Best practices") yes
 
enlightenedenlightenedLos artículos con la etiqueta "Mejores prácticas" incluyen recomendaciones sobre cómo desarrollar, probar, implementar y administrar mejor las soluciones de InterSystems.