Цитата:
Сообщение от
EVGL
Потому. Стоит принять как данность.
Небольшой уточняющий комментарий, чтобы удостовериться
правильно ли я понимаю данную ситуацию (если где не прав - прошу поправить/дополнить):
1. В DAX 4.0 перехват ошибки в try/catch подразумевает неявный вызов ttsabort (кроме перехвата исключения Exception::UpdateConflict).
2. В DAX 4.0 "откат" любой вложенной транзакции всегда означает откат всей цепочки транзакций.
3. Учитывая вышесказанное имеем текущую реализацию: при возникновении исключения оно эскалируется "не перехваченным" вплоть до обработчика исключений самой внешней транзакции. При этом все транзакции, включая вложенные, откатываются.
X++:
static void Test_TTS_1(Args _args)
{
;
try
{
ttsbegin; //tts level 1
//Action block level 1
//..
try
{
ttsbegin; //tts level 2
try
{
throw error("my exception");
}
catch //implicit ttsabort
{
error("level 3 catched");
}
ttscommit;
info("level 3 completed");
}
catch //implicit ttsabort
{
error("level 2 catched");
}
//Action block level 2
//..
ttscommit;
info("level 2 completed");
}
catch //implicit ttsabort
{
error("level 1 catched");
}
info("level 1 completed");
}
Error Сообщение (01:26:29) my exception
Error Сообщение (01:26:29) level 1 catched
Info Сообщение (01:26:29) level 1 completed