Показать сообщение отдельно
Старый 26.04.2016, 20:32   #8  
sgt.Pepper is offline
sgt.Pepper
Участник
Аватар для sgt.Pepper
 
43 / 15 (1) ++
Регистрация: 05.10.2007
Адрес: Германия
Если кому интересно, нашел решение проблемы (спасибо подсказке Alex_KD).

При вызове сервиса AIF создает "глобальную" транзакцию, соттветственно если что-то случается в самом сервисе, все try-catch блоки самого сервиса просто игнорируются и идут выше в обработчики AIF, где собственно было начало транзакции. Все попытки использовать catch Error, ClrError, Internal и просто catch не увенчались успехом.

Что сделано:
в точке входа сервиса сделал проверку на уровень tts и сразу сделал ttscommit.

X++:
ttsInitialLevel = appl.ttsLevel();
if(ttsInitialLevel > 0)
{
    ttscommit;
    ttsbegin;
}
...
Дальше открыл свою транзакцию и запускаю логику. Если код где-то валится, то управление уже не передается выше в AIF, а срабатывают свои обработчики.

После отработки метода делаю ttscommit своей транзакции, и перед возвратом создаю новую.
X++:
if(ttsInitialLevel >0 && appl.ttsLevel() == 0)
ttsbegin;
return something
Так можно обмануть систему.

Последний раз редактировалось sgt.Pepper; 26.04.2016 в 20:43.
За это сообщение автора поблагодарили: gl00mie (2).