|
![]() |
#1 |
Участник
|
Цитата:
можно упаковать несколько документов в одно сообщение
Цитата:
НО: если хоть где-то в коде выбросится ошибка или вызов ttsabort, то соответственно ни лога, ни данных...
Посмотрите как AIF вызывает ваш метод в AifWcfProcessor, сделайте трейс. И как транзакция открывается/закрывается - AifRequestProcessor.processWcfRequest - AIF делает ttsbegin в конце AifRequestProcessor.processWcfResponse - AIF делает ttscommit в начале Имейте ввиду что AIF логика может быть разная для Basic и Enhanced портов.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
|
За это сообщение автора поблагодарили: Logger (1), sgt.Pepper (1), A_BAS (2). |
![]() |
#2 |
Участник
|
В методе который выполняется AIF запускайте thread.
|
|
![]() |
#3 |
Участник
|
Если кому интересно, нашел решение проблемы (спасибо подсказке Alex_KD).
При вызове сервиса AIF создает "глобальную" транзакцию, соттветственно если что-то случается в самом сервисе, все try-catch блоки самого сервиса просто игнорируются и идут выше в обработчики AIF, где собственно было начало транзакции. Все попытки использовать catch Error, ClrError, Internal и просто catch не увенчались успехом. Что сделано: в точке входа сервиса сделал проверку на уровень tts и сразу сделал ttscommit. X++: ttsInitialLevel = appl.ttsLevel(); if(ttsInitialLevel > 0) { ttscommit; ttsbegin; } ... После отработки метода делаю ttscommit своей транзакции, и перед возвратом создаю новую. X++: if(ttsInitialLevel >0 && appl.ttsLevel() == 0) ttsbegin; return something Последний раз редактировалось sgt.Pepper; 26.04.2016 в 20:43. |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
![]() |
#4 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
![]() |
#5 |
Участник
|
Ну я собственно с единицей нигде не сравниваю, проверяю только, что транзакция открыта (ttsInitialLevel > 0)
А в чем вы видите ошибку? |
|
![]() |
#6 |
Участник
|
ttsBegin у вас один, когда все транзакции возвращаетесь
|
|
![]() |
#7 |
Участник
|
Вы правы, надо будет что-то вроде такого написать
X++: for (i==1; I<= ttsInitialLevel;i++) ttsbegin; |
|