05.06.2014, 15:48 | #1 |
Участник
|
AIF - как экранировать вызовы throw в аксапте
Из вне вызывается метод Аксапты при помощи AIF код выполняется, но внутри метода генерируется исключение throw error в конструкции try catch. На этом вызов метода из вне валиться и в catch выполнение кода не происходит.
Ax2009 пример X++: try { this.postPurch(_purchId); //внутри этого метода возникает throw error.... } catch { //а это уже не выполняется (( this.sendMail(); return 'Ошибка во время разноски заказа'; } Последний раз редактировалось ex3em; 05.06.2014 в 15:59. |
|
05.06.2014, 15:59 | #2 |
Участник
|
Наверно, приведенный код выполняется внутри транзакции, иначе исключение ловилось бы в catch.
|
|
|
За это сообщение автора поблагодарили: ex3em (1). |
05.06.2014, 16:19 | #3 |
Участник
|
Очень на это похоже. Мой класс в Ах не содержит транзакций, а вот выше на системном уровне (откуда происходит сам вызов моего класса) скорее всего и стоит транзакция, но куда рыть не знаю. Т.е. не знаю цепочку системных вызовов которые идут до моего класса. Мой класс - потомок extends AifDocumentService.
|
|
05.06.2014, 17:04 | #4 |
Участник
|
Цитата:
Сообщение от ex3em
Очень на это похоже. Мой класс в Ах не содержит транзакций, а вот выше на системном уровне (откуда происходит сам вызов моего класса) скорее всего и стоит транзакция, но куда рыть не знаю. Т.е. не знаю цепочку системных вызовов которые идут до моего класса. Мой класс - потомок extends AifDocumentService.
|
|
09.06.2014, 15:08 | #5 |
Участник
|
Не могу поставить точку остановки. Так как вызов AX метода происходит из php кода
|
|
06.04.2015, 12:39 | #6 |
Участник
|
Можно написать костыль - в первых строках метода написать ttsCommit, а после заключительной обработки ttsBegin. Сделать еще дополнительные проверки в коде на уровень транзакции и т.д.
|
|
06.04.2015, 14:43 | #7 |
Участник
|
Цитата:
X++: Container conValue; int i; ; conValue = Xsession::xppCallStack(); for (i = 1; i <= conLen(conValue); i+=2) { info(strFmt('%1 (строка = %2)',conPeek(conValue,i), int2str(conPeek(conValue,i+1))); }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Logger (1). |
06.04.2015, 15:12 | #8 |
Талантливый разгвоздяй
|
Посмотрите на статью на StackOverflow, нам помогла решить похожую проблему год назад:Can't catch exception inside AIF service
Цитата:
AIF has one big transaction somewhere deep in the core code and an own try catch.
So when you throw an error inside AIF sevice it is going to abort the outer transaction and go to staight to the AIF catch clause, skipping all others. That's why I couldn't catch it. Solution could be to commit AIF transaction, run your code and before return begin new transaction. Цитата:
//перед запуском операции закрывались все транзакциии
ttsLevel = appl.ttsLevel(); for (i = 1; i <= ttsLevel; i++) { ttsCommit; } //-->>... //здесь вызывалась бизнес-логика (у нас запускался сервис Аксапты) //--<< //после выполнения операции транзакции заново открывались for (i = 1; i <= ttsLevel; i++) { ttsBegin; } |
|
04.08.2016, 15:09 | #9 |
Участник
|
Интересно, а зачем AIF-у одна большая транзакция на все.
Какой в этом смысл ? Ведь штатно невозможно нормально пользоваться обработкой исключений. Кто-нибудь встречал пояснения от поставщика решения ? |
|
04.08.2016, 17:05 | #10 |
Боец
|
Цитата:
Другое дело, что AX не умеет ловить вложенные try\catch... |
|
04.08.2016, 17:13 | #11 |
Участник
|
|
|
04.08.2016, 18:44 | #12 |
Модератор
|
А в каких случаях она не нужна ?
__________________
-ТСЯ или -ТЬСЯ ? |
|
04.08.2016, 19:07 | #13 |
Участник
|
В наших
Например, большие обработки из кучи записей. Случаи когда высока вероятность исключения и.т.п. Да мало ли. А у вас есть обоснование зачем транзакцию начинать до старта обработчика, лишая нас возможности обрабатывать исключения ? Если нам понадобится, то внутри мы ее и сами откроем. А зачем нас лишили обработки исключений ? P.S. Я вообще не против транзакций, я хочу сам рулить - когда их начинать и завершать. И хочу чтобы нормально ловились исключения. А не жульническими методами как выше описано. Последний раз редактировалось Logger; 04.08.2016 в 19:15. |
|
Теги |
aif, транзакции |
|
|