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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.12.2005, 14:01   #1  
Hans is offline
Hans
Участник
Аватар для Hans
 
108 / 22 (1) +++
Регистрация: 20.10.2005
:)
Цитата:
Сообщение от DreamCreator
Возникло две мысли

1. Причина того что мы видим одну ошибку -- после генерации исключительной ситуации оператором throw за ним ничего выполняется. Можно заменить все участвующие в обработке накладной операторы throw на что-нибудь менее жесткое. Чревато непредсказуемыми последствиями и трудоемко.

2. Чтобы логика алгоритма продолжалось после throw, однажды я использовал вложенные try..catch -- помогло.
первый метод работает, если заменить throw на что-нить вроде checkFailed(), можно ли поступать таким образом. Пострадает ли от этого функционал?
Старый 16.12.2005, 14:09   #2  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Сообщение от Hans
первый метод работает, если заменить throw на что-нить вроде checkFailed(), можно ли поступать таким образом. Пострадает ли от этого функционал?
Да, пострадает. Потому как checkFailed это аналог info (поправьте если не так), отличие только в иконке, таким образом несмотря на ошибку алгоритм не прервется как задумывалось ранее, а продолжится. И нет никакой гарантии что продолжится верно (ошибка ведь была -- допустим что-то не инициализировалось). Поэтому и трудоемко будет все переделывать.
Старый 16.12.2005, 14:16   #3  
Hans is offline
Hans
Участник
Аватар для Hans
 
108 / 22 (1) +++
Регистрация: 20.10.2005
Цитата:
Сообщение от DreamCreator
Да, пострадает. Потому как checkFailed это аналог info (поправьте если не так), отличие только в иконке, таким образом несмотря на ошибку алгоритм не прервется как задумывалось ранее, а продолжится. И нет никакой гарантии что продолжится верно (ошибка ведь была -- допустим что-то не инициализировалось). Поэтому и трудоемко будет все переделывать.
Вот это меня и интересует, мы не можем заменить throw, так как не знаем какая ошибка будет последней, я дошел до 6 ошибок в разных методах таблиц и классов, и когда необходимо будет делать прерывание чтобы накладная не оприходовалась. Дальше я вряд ли смогу что-нибудь придумать (уровень не позволяет), наверное лучше оставить стандартный функционал. Спасибо!
Старый 20.12.2005, 13:01   #4  
Migel_84 is offline
Migel_84
Участник
 
45 / 12 (1) ++
Регистрация: 07.10.2005
Адрес: Череповец
Цитата:
Сообщение от Hans
Вот это меня и интересует, мы не можем заменить throw, так как не знаем какая ошибка будет последней, я дошел до 6 ошибок в разных методах таблиц и классов, и когда необходимо будет делать прерывание чтобы накладная не оприходовалась. Дальше я вряд ли смогу что-нибудь придумать (уровень не позволяет), наверное лучше оставить стандартный функционал. Спасибо!
А как насчёт использовать логическую переменную? Убрать throw и, если хоть одна ошибка будет присвоить переменной true, а при оприходовании проверять, если переменная равна true, то не оприходовать
Старый 22.12.2005, 14:30   #5  
Hans is offline
Hans
Участник
Аватар для Hans
 
108 / 22 (1) +++
Регистрация: 20.10.2005
Цитата:
Сообщение от Migel_84
А как насчёт использовать логическую переменную? Убрать throw и, если хоть одна ошибка будет присвоить переменной true, а при оприходовании проверять, если переменная равна true, то не оприходовать
Идея хорошая, я в данный моменты просто добавил свой цикл, перед основным while (salesParmLine) в Classes\SalesFormLetter_Invoice\updateNow и там все методы продублировал, где заменил все throw на info. Если бы я точно знал в каком месте можно поставить проверку на глобальную переменную, чтобы накладная точно не приходывалась, я бы так и сделал, но я не знаю в каком месте накладная по Заказу приходуется (я имею в виду себестоимость, проводки и т.д).
Старый 20.12.2005, 12:58   #6  
Migel_84 is offline
Migel_84
Участник
 
45 / 12 (1) ++
Регистрация: 07.10.2005
Адрес: Череповец
Цитата:
Сообщение от DreamCreator
Потому как checkFailed это аналог info (поправьте если не так)
Не так. info просто выводит сообщение, а checkfailed можно возвращать вместо супер, например
if (условие)
ret = checkfailed(какая-то ошибка);
else
ret = super();
return ret;

поправьте если не так
Старый 20.12.2005, 13:02   #7  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Сообщение от Migel_84
Не так. info просто выводит сообщение, а checkfailed можно возвращать вместо супер
Да, согласен. Спасибо!

Как раз сегоня воспользовался:
PHP код:
    if(!this.parmInvoiceId(this.parmSalesIdNonPrefix()))
        
ret checkFailed(strfmt("@SYS26332",
                new 
DictType(extendedTypeNum(SalesId)).label())); 
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Слетают SecurityKey. Что можно сделать? chanchala DAX: Программирование 9 16.02.2009 17:14
ALEG: Можно ли из "клиентского" решения сделать "тиражное" Blog bot DAX Blogs 0 16.11.2006 23:40
Можно ли в Аксапте делать "горячие клавиши"? Garic DAX: Программирование 12 25.01.2006 19:51
Можно ли такое сделать в Axapta ML DAX: Программирование 11 12.05.2005 11:46
Еще по поводу QueryBuildRange() RVS DAX: Программирование 4 10.07.2003 12:57

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

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

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