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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.11.2011, 14:53   #8  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Если начать транзакцию до запуска кодеюнита в примере от zma, то в случае вызова ERROR выскочит ошибка выполнения (во время транзакции нельзя использовать CU.RUN с возвращаемым значением отличным от Ok). Т.е. надо попробовать переписать код так, что бы транзакция стартовала в случае удачного выполнения кодеюнита (IF CU50xx.RUN THEN). Это было бы не проблемой, если бы проверка была всего одна. Но если у меня десятки проверок, причём вложенных... И всё это уже написано и работает, тут я уже боюсь браться за подобную реализацию, лучше уж через файлы...
Пока писал, придумал что можно сделать. Фактически это вариация на тему того, что предложил InTacto. Пока разбираем входящие данные, пишем всё во временные таблицы (кроме Лога). При этом после каждой записи в Лог (или перед потенциальными вызовами ERROR) делаем COMMIT. Ну и в самом конце, сливаем данные из временных таблиц в обычные. В итоге у нас и ERROR нормально отработает и Лог запишется и данные никуда не попадут, если встретится хотя бы один ERROR.
Или ещё красивее. Делаем функцию LogError, которую вызываем вместо ERROR, в ней пишем в Лог всё что нужно, потом COMMIT, а потом ERROR. Теперь у нас COMMIT вызовется только перед ERROR, а не перед каждым потенциальным ERROR или после каждой записи в Лог.
 


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

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

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