Escrito por

Sales Engineer at InterSystems Iberia
Artículo Ricardo Paiva · dic 9, 2024 1m read

¿Cómo generar un error personalizado?

Rúbrica de preguntas frecuentes de InterSystems

Si queréis generar un error personalizado arbitrario en un bloque TRY, podéis pasar una excepción con un throw de la siguiente manera. En el siguiente ejemplo, se genera un error personalizado si el valor de Stcount es menor que 1.

Class User.Test
{

ClassMethod ExceptionTest()
 {
    try
    {
      // : some codesif (Stcount<1) {
          throw##class(%Exception.General).%New("User-defined error", "5001", "location", "Data at location error")
          // User-created errors are 5001 and above
      }
    }
    catch ex
    {
      write"Errors #", ex.Code, ": ", ex.Name, " : ", ex.Location, " ", ex.Data
      return
    }
 }
}

En el ejemplo anterior, si Stcount es menor que 1, aparecerá un error como el siguiente:

USER>do##class(User.Test).ExceptionTest()
Error #5001: User-defined error: Data at location error

Para más información, consultad la siguiente documentación:
Comando _THROW de ObjectScript

Si deseáis crear un código de estado arbitrario, haced lo siguiente:

USER>set st = ##class(%SYSTEM.Status).Error(5001,"This is a user-defined error")

USER>zwrite st
st="0 "_$lb($lb(5001,"This is a user-defined error",,,,,,,,$lb(,"USER",$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0"))))/* Error #5001: This is a user-defined error */
USER>do$SYSTEM.Status.DisplayError(st)

Error #5001: This is a user-defined error