If you put the return cValue in the finally block after the catch, wouldn't you get what you want or were you trying to avoid the finally block? I think there was some issue though where the finally block was not handling returns like this so maybe this only works with 11.x and up.
DEFINE VARIABLE cValue AS CHARACTER NO-UNDO init 'no-error'.
FIND customer NO-LOCK
WHERE customer.Name = "bumface".
CATCH e AS PROGRESS.Lang.SysError:
cValue = e:getMessage(1).
I'm thinking of this:
Different type of issue but good to note.
Also note that the behaviour of flow-of-control statements in a FINALLY block changed in 11.4, to be more logical. More info at documentation.progress.com/.../OpenEdge.40.html