![]() |
#4 |
Участник
|
Для начала, строим тестовый Job для проверки собственных идей. У меня Ax2.5, поэтому логика может несколько отличаться в старших версиях.
X++: static void test_TryCatchTransaction(Args _args) { ; try { ttsbegin; ttsbegin; throw exception::Deadlock; ttscommit; ttscommit; } catch (exception::Break) { info('exception::Break'); } catch (exception::DDEerror) { info('exception::DDEerror'); } catch (exception::Deadlock) { info('exception::Deadlock'); } catch (exception::Error) { info('exception::Error'); } catch (exception::Info) { info('exception::Info'); } catch (exception::Internal) { info('exception::Internal'); } catch (exception::Sequence) { info('exception::Sequence'); } catch (exception::Warning) { info('exception::Warning'); } info(strFmt("Количество вложенных транзакций = %1", appl.ttsLevel())); } Однако возникают следующие вопросы: Находятся ли команды по началу и завершению транзакции в одном методе? Внутри одного Try..Catch? По крайней мере, вызов методов по началу и завершению транзакции? Не возникает ли ситуации, когда после выброса на верхний уровень транзакции команда по завершению транзакции оказывается вне обработчика Try..Catch? Т.е. надо отследить вот такие программные конструкции X++: static void test_TryCatchTransaction(Args _args) { ; try { ttsbegin; throw exception::Error; } catch (exception::Error) { info('exception::Error'); } // Вот здесь возникнет ошибка ttscommit; } |
|