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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2014, 08:06   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от IKA Посмотреть сообщение
То есть, суть в том, что вычисления в stdClass не критичны для моего класса и мне достаточно сообщения в инфологе, что они закончились с ошибкой и нужно продолжить выполние кода
А для чего вы тогда свою транзакцию открываете до stdClass?
Старый 17.04.2014, 16:50   #2  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Смысл мероприятия:

В цикле вставляются записи в таблицу - должны либо вставиться все, либо ни одной. Т.о транзакция. При вставке каждой записи для нее выполняются определенные пересчеты, которые, если произойдут - хорошо, если нет, то пользователь на основании инфолога потом разберется в каждой конкретной ситуации.
То есть по идее должно быть в инфологе нечто типа :
Строка 1:
Вставлена
Пересчет А выполнился
Пересчет Б закончился с такими-то ошибками (это надо отловить и продолжить выполнение кода)
Строка 2:
Вставлена
Пересчет А закончился с такими-то ошибками
Пересчет Б выполнился ....

и так для кучи строк.

Можно, конечно все переструктурировать в существующем коде. чтобы обойти проблему, но:
1) пользователям это не нравится, тк они для каждой строки хотят видеть все релевантные для нее ошибки /предупреждения. (И, вообще-то, я с ними согласна.)
2) по-моему, это принципиально неправильно, что , дожив до 2012, мы до сих пор не можем нормально отлавливать ошибки.

Последний раз редактировалось IKA; 17.04.2014 в 17:04.
Старый 17.04.2014, 17:57   #3  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Как вариант :

- все вставлять во временную таблицу (общая транзакция не нужна)
- при отсутствии ошибок - переносить из временной в нормальную таблицу, в транзакции, ессно, но уже после всех "пересчетов"

Как вам оно?
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 17.04.2014 в 17:59.
Старый 17.04.2014, 23:24   #4  
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).
Старый 18.04.2014, 08:57   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от IKA Посмотреть сообщение
В цикле вставляются записи в таблицу - должны либо вставиться все, либо ни одной. Т.о транзакция. При вставке каждой записи для нее выполняются определенные пересчеты, которые, если произойдут - хорошо, если нет, то пользователь на основании инфолога потом разберется в каждой конкретной ситуации.
Можно сначала вставить записи, закрыть транзакцию, а потом без общей транзакции (если необходимо, то сделать транзакцию для каждой отдельной строки) выполнить пересчет?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 13:38.