|
![]() |
#1 |
Участник
|
Мощно конечно, но если возникают такие вещи в коде, напрашивается вопрос: Вы вообще рефакторинг делаете? Разбив сложный метод с транзакциями на несколько простых, можно все-таки транзакции вычленить примерно в такую форму:
X++: void complexMethod() { ttsbegin; simpleMethods(); ttscommit; }
__________________
// no comments |
|
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Участник
|
Попробовал на АХ3 и АХ4, пишет ошибку:
invalid command name "Exportfile" while executing "Exportfile for AOT version 1.0 or later"
__________________
// no comments |
|
![]() |
#4 |
Участник
|
А у меня работает на этом файле. А как Вы запускаете (какая командная строка, с локального или сетевого диска), какая у Вас операционная система?
|
|
![]() |
#5 |
Участник
|
Цитата:
Просто, если он уже читает первую строчку "Exportfile for AOT version 1.0 or later" и пишет, что это invalid command, то вам надо смотреть в сторону обработки строк.
__________________
// no comments |
|
![]() |
#6 |
Участник
|
Цитата:
![]() И ещё, можете попробовать версию из вложенного файла? Последний раз редактировалось Ярослав Щекин; 16.07.2013 в 11:38. |
|
![]() |
#7 |
Участник
|
Мне кажется, лучше копать в этом направлении:
1. Поставить в настройках АОСа галку "Разрешить точки останова для отладки кода Х++, выполняемого на этом сервере. 2. После этого в классе Application начнут автоматически вызываться методы ttsNotifyBegin при начале транзакции и ttsNotifyCommit при завершении транзакции. 3. Модифицируйте эти методы так, чтобы записывать логи. В лог записывайте стек вызовов и значение уровня вложенности транзакции. 4. Анализируйте лог, проверяя стек вызовов и уровень вложенности транзаций, чтобы понять, где непарные ttsbegin\ttscommit Я данный код написал на коленке прямо в редакторе сообщений. X++: void ttsNotifyBegin() { container stackTrace; int i; str s=""; UserConnection userConnection; MyLogTable MyLogTable; .......................... if (!inLog) //добавленная в класс Application переменная, чтобы не попасть в рекурсию при вызове userConnection.ttsbegin() { inLog = true; stackTrace = xSession::xppCallStack(); for(i = 7; i<=conLen(stackTrace); i+=2) s+=strFmt("%1:%2\r\n", conPeek(stackTrace, i), conPeek(stackTrace, i+1)); userConnection = new UserConnection(); userConnection.ttsbegin(); MyLogTable.setConnection(userConnection); MyLogTable.TTSLevel = appl.ttsLevel(); MyLogTable.CallStack = s; MyLogTable.insert(); userConnection.ttscommit(); inLog = false; } } Последний раз редактировалось Ace of Database; 16.07.2013 в 12:09. |
|
Теги |
ttscomit, best practice |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|