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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.11.2009, 06:53   #1  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
! Business Connector и обработка исключений
Привет,

аксапта 3.0 sp4, есть внешняя программа, которая обращается к аксапте через Business Connector, создаёт экземпляр аксаптовского класса и вызывает один из его методов.

проблема в том, что если возникает какое-либо исключение - при постинге или при создании записей, эти исключения возвращаются напрямую во внешнюю программу, никакие try/catch не работают, даже если я помещаю try/catch в тот самый метод, который вызывает внешняя программа, и даже если делаю 10 catch частей для каждого типа исключений (+1 пустой, для всех).

в чём может быть загвоздка? или обработка исключений в классе не работает, если он создан через Business Connector, на что очень похоже, но что совсем не логично.

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

внешнюю программу я изменить не могу: компания, которая её разработала, уже не существует, а исходников нет.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 25.11.2009, 08:10   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Не все исключения в AX можно перехватить (сам в свое время был в шоке). Business Connector тут ни при чем. Используйте вместо перехвата исключений проверки. На все и побольше.
Старый 25.11.2009, 11:12   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Глупый вопрос: Я ж надеюсь try/catch не внутри транзакции ставите?
А то иначе было бы интересно взглянуть на примеры...
__________________
Zhirenkov Vitaly
Старый 25.11.2009, 15:21   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да, похоже именно на открытую транзакцию. Потому что исключения при вызове из BC нормально перехватываются в АХ, afaik
Старый 25.11.2009, 23:57   #5  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
в том-то и дело, что транзакции все внутри try/catch. попробую сейчас изобразить листинг.

вот функция, которую вызывает внешняя программа и в которой всё происходит:

X++:
public Anytype updateTable(tableId _tablenum, TransTypes   _type, recId    _recId = 0, Container _values = connull())
{
    anytype  _object    =   new DictTable(_tablenum).makeRecord();

    int                     logPoint;
    int                     line;
    Container               c;

    ;

    buffer = _object;


    logPoint = infolog.num();

    try
    {
        switch (_type)
        {
            case (TransTypes::RecSelect)  :
                break;

            case (TransTypes::RecInsert)  :
                _object = this.RecInsert(_object, _recId, _values);
                break;

            case (TransTypes::RecUpdate)  :
                _object = this.RecUpdate(_object, _recid, _values);
                break;

            case(TransTypes::RecDelete)   :
                _object = this.RecDelete(_object, _recId, _values);
                break;
        }
    }
    catch (exception::Break)
    {
        abs(1);
    }
    catch (exception::DDEerror)
    {
        abs(1);
    }
    catch (exception::Deadlock)
    {
        abs(1);
    }
    catch (exception::Error)
    {
        abs(1);
    }
    catch (exception::Info)
    {
        abs(1);
    }
    catch (exception::Internal)
    {
        abs(1);
    }
    catch (exception::Numeric)
    {
        abs(1);
    }
    catch (exception::Sequence)
    {
        abs(1);
    }
    catch (exception::Warning)
    {
        abs(1);
    }
    catch
    {
        line = infolog.line();
        c = infolog.cut(logPoint + 1, line);

        MyErrorLog::processError(_tablenum, _type, _recId, _values, c);
    }


    return _object;
}
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 26.11.2009, 00:58   #6  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
одним словом, никаких транзакций за пределами этой функции нет, разве что есть способ задать начало и конец транзакции в коде внешней программы, который я не увижу в дебаггере.

схема того, что происходит:

внешняя программа -> Business Connector -> MyClass::construct()
внешняя программа <- Business Connector <- экземпляр класса MyClass
внешняя программа -> Business Connector -> MyClass.updateTable()

..то есть когда я смотрю в дебаггере выполнение на Business Connector сессии, то эта функция самая внешняя, то есть try/catch должен поймать что бы там ни было - тем более, что ошибки, которые возникают, это ошибки постинга, например закрытый период в general ledger.

так почему же не ловится?
__________________
our sharp bitter vitriol is not that of the vulgar.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Inside Dynamics AX 4.0: Working with the .NET Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
Inside Dynamics AX 4.0: Inside the Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
ALEG: Проект "Фишка недели" и первый пост - Microsoft Dynamics™ AX .NET Business Connector Blog bot DAX Blogs 1 22.11.2006 09:43
ProductiveGap: Microsoft's Leadership in Business Applications Usability Blog bot DAX Blogs 0 09.11.2006 08:11
Обработка исключений COM-объектов bms DAX: Программирование 24 06.04.2004 15:04

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

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

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