|
![]() |
#1 |
Участник
|
Для начала, строим тестовый 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; } |
|
![]() |
#2 |
Участник
|
В методе createNeeds()
Не используются ttsbegin ttscommit. Вот блин ну где же может быть ошибка ![]() |
|
![]() |
#3 |
Ищущий знания...
|
Цитата:
с этими непарными транзакциями вечно морока, пока найдешь откуда ползет поседеешь ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|