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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.02.2013, 09:42   #1  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
! Косяк в методе new() класса SysMailer
Всем доброго времени суток!
Наткнулся сегодня на очередной косяк в коде на слое SYS...
АХ 4.0 SP2, класс SysMailer метод new(). В этот метод параметром можно передать COM объект, и этот параметр заполняется по умолчанию...
X++:
void new(COM c = new COM('CDO.Message'))
{
    COM cdoConfig;
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
    ;

    permission.assert();

    _COM = c;

    ....
}
Но permission.assert() выполняется уже в самом методе. В результате, если вдруг, класс SysMailer вызывается на сервере, то метод new() не отработает, и аксапта выведет ошибку: "Сбой запроса на разрешение типа "InteropPermission"." и соответственно "Объект "COM" не может быть создан"!
В итоге ошибка исправляется инициализацией по умолчанию COM класса значением null, а уже после выполнения permission.assert(); выполняем проверку переданного параметра и если он == null инициализируем его.
X++:
//void new(COM c = new COM('CDO.Message'))
void new(COM c = null) // до permission инициализируем значением null!
{
    COM cdoConfig;
    InteropPermission permission = new InteropPermission(InteropKind::ComInterop);
    ;

    permission.assert();
    // после того как получили разрешение проверяем параметр и при необходимости инициализируем его! -->
    if (!c)
        c = new COM('CDO.Message');
    // после того как получили разрешение проверяем параметр и при необходимости инициализируем его! <--
    _COM = c;

    ...
}
В таком виде все отрабатывает на ура!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: S.Kuskov (5).
Теги
ax4.0, com-объект

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как в методе базового класса перечислить классы потомки Кирилл DAX: Программирование 7 14.02.2013 08:30
Не создается экземпляр SysMailer в RunBaseBatch pvito DAX: Программирование 3 21.10.2011 15:30
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
Баг в методе класса OLAPCreateSchema Косых Артём DAX: Программирование 2 28.04.2006 12:20
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40

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

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

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