Je me suis souvent cogné la tête à cause de ça. De la façon dont $ etrap (erreur traitant la variable spéciale) a été conçu, vous devez faire attention à vraiment piéger toutes les erreurs. J'ai partiellement réussi à le faire. Mais il me manque toujours quelque chose, car lorsqu'il est exécuté en mode utilisateur (mode application), il y a erreurs de bibliothèque de cache interne qui sont toujours en cours d'arrêt de l'application.
Ce que je ne faisais que:
ProcessX(var)
set sc=$$ProcessXProtected(var)
w !,"after routine call"
quit sc
ProcessXProtected(var)
new $etrap
;This stops Cache from processing the error before this context. Code
; will resume at the line [w !,"after routine call"] above
set $etrap="set $ECODE = """" quit:$quit 0 quit"
set sc=1
set sc=$$ProcessHelper(var)
quit sc
ProcessHelper(var)
new $etrap
; this code tells Cache to keep unwindind error handling context up
; to the previous error handling.
set $etrap="quit:$quit 0 quit"
do AnyStuff^Anyplace(var)
quit 1
AnyStuffFoo(var)
; Call anything, which might in turn call many sub routines
; The important point is that we don't know how many contexts
; will be created from now on. So we must trap all errors, in any
; case.
;Call internal Cache library
quit
Après tout cela, je vois que quand je l'appelle le programme à partir d'une invite cela fonctionne! Mais quand j'appelle de Cache Terminal Script (mode d'application, on m'a dit) il échoue et annule le programme (le mécanisme de piégeage d'erreur ne fonctionne pas comme prévu).
Des lumières?
Merci à l'avance,
Luís Fernando