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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2006, 11:58   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
ChangeCompany Try...Catch
AXAPTA 2.5 SP3

Можно ли перехватить по Try...Catch ошибку в ChangeCompany()? Т.е. когда указана не существующая компания. Что-то у меня не получается...

PHP код:
static void MVB_TryCatchChangeCompany(Args _args)
{
    
int         i;
    
DataAreaId  dataAreId "XXX";
    ;

    try
    {
        
changeCompany(dataAreId)
        {
            
i++;
        }
    }
    catch (
exception::Break)
    {
        
info('exception::Break');
    }
    catch (
exception::DDEerror)
    {
        
info('exception::DDEerror');
    }
    catch (
exception::Deadlock)
    {
        
info('exception::Deadlock');
    }
    catch (
exception::Error)
    {
        
info('exception::Error');
    }
    catch (
exception::Info)
    {
        
info('exception::Info');
    }
    catch (
exception::Internal)
    {
        
info('exception::Internal');
    }
    catch (
exception::Sequence)
    {
        
info('exception::Sequence');
    }
    catch (
exception::Warning)
    {
        
info('exception::Warning');
    }

PS: По поводу того, что можно предварительно поискать в таблице DataArea - я в курсе. Желательно все-таки через Try...Catch чтобы не ломать логику в некоторых классах.

AXAPTA 2.5 SP3
Старый 11.12.2006, 12:05   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
в 3.0 вполне себе ловится, только в дебаггер вываливается, если открыт
X++:
    try
    {
        changecompany('test')
        {
        }
    }
    catch
    {
        info('catched');
    }

Последний раз редактировалось belugin; 11.12.2006 в 12:06. Причина: версия 3.0
Старый 11.12.2006, 12:31   #3  
Gad is offline
Gad
Участник
 
136 / 18 (1) ++
Регистрация: 21.05.2003
Адрес: Москва
А зачем нужен catch? может просто перед попыткой сменить компанию проверять ее существование?
Код:
 if (! CompanyTmpCheck::exist('ХХХ'))
     throw error('');
 else
     changeCompany('ХХХ')
     {
          ...
     }
Старый 11.12.2006, 12:42   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Gad Посмотреть сообщение
А зачем нужен catch? может просто перед попыткой сменить компанию проверять ее существование?
Код:
 if (! CompanyTmpCheck::exist('ХХХ'))
     throw error('');
 else
     changeCompany('ХХХ')
     {
          ...
     }
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
AXAPTA 2.5 SP3
PS: По поводу того, что можно предварительно поискать в таблице DataArea - я в курсе. Желательно все-таки через Try...Catch чтобы не ломать логику в некоторых классах.

AXAPTA 2.5 SP3
Граждане, читайте сообщения полностью
Старый 11.12.2006, 12:52   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
в 3.0 вполне себе ловится, только в дебаггер вываливается, если открыт
Я так понимаю, пофиксили в 3.0. А можно уточнить, какой именно "catch" (тип исключения) в 3.0 отлавливает эту ошибку? Какой exeption?

К сожалению, в 2.5 еще не было универсального catch. Обязательно нужно явно указывать тип исключения.
Старый 11.12.2006, 13:05   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
exception::Error
__________________
Axapta v.3.0 sp5 kr2
Старый 11.12.2006, 13:46   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AndyD Посмотреть сообщение
exception::Error
Спасибо. Правда, в 2.5 - это не помогает. Вобщем, вопрос закрыт.
Старый 08.01.2009, 16:25   #8  
Saber is offline
Saber
Участник
 
10 / 10 (1) +
Регистрация: 07.03.2007
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Спасибо. Правда, в 2.5 - это не помогает. Вобщем, вопрос закрыт.
Так чем закончилась проблема?
У меня такая же ситуация.............. Т.е. нужно проверять, есть ли такая компания и если есть, то перейти к ней. В версии 2.5 такую проверочную функцию не нашёл.

Через exeptions тоже не удалось решить
Старый 12.01.2009, 16:57   #9  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Пришлось делать проверку. В сообщении Gad приведено пример, который это делает.

Хотя назначение метода класса CompanyTmpCheck::exist(), судя по названию, это проверка того факта, что указанная компания не виртуальная, но можно использовать и для проверки факта существования компании. Или доработать код "под себя".

Там обычный поиск записи в таблице \System Documentation\Tables\DataArea. Эта таблица содержит список вообще всех компаний.
Старый 12.01.2009, 17:08   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Там обычный поиск записи в таблице \System Documentation\Tables\DataArea. Эта таблица содержит список вообще всех компаний.
Лучше использовать
\Classes\xDataArea\checkAccessible
(для 3.0 привел ссылку)

Так как если прав у пользователя нет, то changecompany выдаст ошибку даже в случае корректного кода компании.

Последний раз редактировалось Logger; 12.01.2009 в 17:10.
Старый 12.01.2009, 17:19   #11  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от belugin Посмотреть сообщение
в 3.0 вполне себе ловится, только в дебаггер вываливается, если открыт
Ловится но к сожалению не всегда.
Иногда вместо Exception::Error приходит Exception::Info
Отладчик влияет на вид исключения

Аналогично в Сom соединении регулярно вместо Exception:eadlock приходит Exception::Info

Есть подозрение, что на это влияет настройка логирования длинных запросов SQL и дедлоков.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
TTS и try..catch ahtoh DAX: Программирование 7 14.02.2009 15:52
changeCompany() Ace of Database DAX: Программирование 1 16.08.2005 19:42
catch Александр Костоусов DAX: Программирование 3 07.09.2004 10:16
try...catch при операциях с таблицей ushastik DAX: Программирование 1 09.03.2004 18:26
Глупый вопрос про try .. catch Vadik DAX: База знаний и проекты 6 12.03.2003 18:04

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

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

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