Se não me engano, a indicação na frente de BEGIN SEQUENCE é só pra quando NÃO vai usar a rotina de erro padrão.
E o TRY/CATCH ou outro, é pra não precisar algo mais.
Uso assim, não sei se interessa pra alguma situação:
Código: Selecionar todos
lOk := .F.
BEGIN SEQUENCE WITH __BreakBlock()
...
lOk := .T.
END SEQUENCE
IF .NOT. lOk
? "deu erro na rotina"
ENDIF
Explicação:
Se tudo correr bem, chega até lOk := .T.
Se der algum erro no trajeto, não chega nessa linha, e lOk é .F.
Ou dependendo da rotina, uma variável string que vai se modificando, e no final contém "OK".
Código: Selecionar todos
cStatus := "ERRO"
BEGIN SEQUENCE WITH __BreakBlock()
cStatus := "sei lá o que"
...
cStatus := "sei lá de novo"
...
cStatus := "ok"
END SEQUENCE
IF cStatus != "ok"
MsgExclamation( "O erro foi " + cStatus )
ENDIF
Acho que quanto menos exceções melhor, mas cada caso é um caso diferente.