AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2014, 23:24   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от IKA Посмотреть сообщение
Можно, конечно все переструктурировать в существующем коде. чтобы обойти проблему, но:
1) пользователям это не нравится, тк они для каждой строки хотят видеть все релевантные для нее ошибки /предупреждения. (И, вообще-то, я с ними согласна.)
Научите пересчеты не выбрасывать исключения - вот и все. Чтобы не лезть глубоко в код, если проблематично протащить в пересчеты новый параметр, можно где-нить в GlobalCache вести флажок, управляющий этим поведением, а также повесить обработчик в ttsNotifyAbort(), чтобы этот флажок вычищал. При наличии флажка пересчеты будут просто выводить предупреждения и прекращать работу, при отсутствии - выбрасывать исключения, как раньше. В конце вставки всех строк анализируете наличие предупреждений в инфологе, как в проверках целостности сделано, и принимаете решение о том, накатывать транзакцию или нет. После успешного накатывания транзакции не забываете удалить флажок из GlobalCache, чтобы пересчеты заработали, как раньше.
Цитата:
Сообщение от IKA Посмотреть сообщение
2) по-моему, это принципиально неправильно, что , дожив до 2012, мы до сих пор не можем нормально отлавливать ошибки.
Это - by design, потому что предполагается, что если код выбрасывает исключение в транзакции, значит, в этой транзакции что-то пошло не так, и ее надо откатить. Это как остановка конвейера на японских заводах: каждый рабочий может это сделать при необходимости, но при этом каждый рабочий осознает всю полноту ответственности за такое решение. А когда можно "нормально отлавливать" любое и каждое исключение в транзакции, то получается, как с запуском Челленджера (см. про уплотнительные кольца и предупреждения Morton Thiokol).

PS.
Цитата:
Сообщение от IKA Посмотреть сообщение
В цикле вставляются записи в таблицу - должны либо вставиться все, либо ни одной. Т.о транзакция.
Вставляйте свои записи в RecordSortedList - тогда на момент вызова пересчетов можно будет обойтись без общей транзакции и отловить каждую ошибку в вашем try/catch, а в конце обработки, если ошибок не было, можно будет вставить все строки разом в одной транзакции (вариации на тему временной таблицы )

Последний раз редактировалось gl00mie; 18.04.2014 в 01:06. Причина: PS
За это сообщение автора поблагодарили: S.Kuskov (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX2009, try / catch не перехватывает исключение (не в транзакции) AR® DAX: Программирование 4 23.05.2013 15:29
BusinessConnector .Net - исключение при вызове AxaptaRecord.Write Evgenius DAX: Программирование 22 04.05.2011 19:47
Исключение при переустановке Evgenius DAX: Администрирование 7 21.12.2010 15:49
Как понять что вызывает исключение Invalid Method Call Jab Straight DAX: Программирование 0 17.12.2007 23:23
Почему может не ловиться исключение korvin DAX: Программирование 5 19.09.2006 16:49

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:33.