/// Routine : TECH.Error.INC /// /// Author : Paul Verhulst /// Created : 11/08/2010 /// #include vhLib.Macro #include %occInclude /// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ #define TECHErrorTrapOn new $ETRAP Set $ETRAP="Do ##class(TECH.Error.impl.ErrorHandler).TrapHandler()" #define TECHErrorTrapOff Set $ETRAP="" #define LocalErrorTrapOn new $ETRAP Set $ETRAP="Do %TECHErrorLocalTrap("_$stack_").TrapHandler()" $$$InitLocalErrorTrap #define LocalErrorTrapOnLabeled(%Label,%Opts) new $ETRAP Set $ETRAP="Do %TECHErrorLocalTrap("_$stack_").TrapHandler("%Label","%Opts")" $$$InitLocalErrorTrap #define LocalErrorTrapOff Kill %TECHErrorLocalTrap($stack) $$$TECHErrorTrapOff #define InitLocalErrorTrap Set %TECHErrorLocalTrap($stack)=%this,%TECHErrorLocalTrap($stack,1)=$ETRAP #define CheckLocalErrorTraps $$$DollarOrderCheck $$$DollarDataCheck #define DollarOrderCheck Set:($O(%TECHErrorLocalTrap($stack))'="") $ECODE="`PreviousTrapNotCleared" #define DollarDataCheck Set:($D(%TECHErrorLocalTrap($stack))) $ECODE="`PreviousTrapNotCleared" #define ThrowError(%s,%v) Set $ECODE="`"_%s_"`"_%v_"`" #define ThrowErrorStatus(%s,%v,%r) Set $ECODE="`"_%s_"`"_%v_"`"_$$ParseStatus^vhLib(%r)_"`" #define ThrowErrorUser(%s,%v,%u) Set $ECODE="`"_%s_"`"_%v_"``"_%u, #define ThrowErrorStatusAndUser(%s,%v,%r,%u) Set $ECODE="`"_%s_"`"_%v_"``"_%u #define ThrowErrorObject(%o) Do ##class(TECH.Error).Throw(%o) set $ECODE="`"_%o.GeefErrorCode()_"`"_%o.GeefErrorType() #define ClearError Set $ECODE="" #define ClearLocalError Set ErrorLevelTrapOn=$O(%TECHErrorLocalTrap(""),-1) If $ES=(ErrorLevelTrapOn+2) $$$ClearError #define StdHandling Do ##class(TECH.Error.impl.ErrorHandler).TrapHandler(.Label,.Options) #define ReThrow ; Rethrow is automatic #define chkRequiredParameter(%p) If '$length($get(%p)) $$$ThrowError($$$errParameterRequired,"%p") #define chkIsObject(%obj) If '$isobject(%obj) $$$ThrowError($$$errObjectExpected,"%obj") #define chkValidateObject(%obj) Set sc=%obj.%ValidateObject() If $$$ISERR(sc) $$$ThrowErrorStatus($$$errObjectValidationFailed,"%obj",sc) #define chkValidateDataType(%dt,%p) if '##class(%dt).IsValidDT(%p) $$$ThrowError($$$errInvalidInput,%p) #define chkMaxLength(%var,%maxlength) if $length(%var) > %maxlength $$$ThrowError($$$errInvalidInput,%var_": "_$length(%var)_">"_%maxlength) #define CreateStdErrorObject set %vhLastError = ##class(TECH.Error.ErrorObject).%New() #define AddToErrorObject(%String) do %vhLastError.Info.Insert(%String) #define errGeneralError "1000:GeneralError" #define errPropertyRequired "1001:PropertyRequired" #define errParameterRequired "1002:ParameterRequired" #define errParameterInvalid "1002:ParameterInvalid" #define errObjectExpected "1003:ObjectExpected" #define errLocked "1004:Locked" #define errInvalidInput "1005:InvalidInput" #define errInvalidOutput "1005:InvalidOutput" #define errInvalidID "1007:InvalidID" #define errCreateObject "1006:Create object" #define errInvalidEnumeration "1008:InvalidEnumerationValue" #define errUnimplemented "1009:Unimplemented" #define errObjectValidationFailed "3000:ObjectValidationFailed" #define errSaveFailed "3001:SaveFailed" #define errUserError "5000:UserError"