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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2020, 20:05   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Да просто проверить переменную на существования

X++:
if (var_NET)
{
    var = var_NET;
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 28.04.2020, 23:01   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Эту ошибку не перехватить аксаптовким try/cath.
Но и просто присваивать объект CLR аксаптовской строке, надеясь на автоматическое приведение, просто не стоит, лучше прямо преобразовать.
Например, в том же классе AifUtil в методе getClrErrorMessage хотя и знают, что там строка, но ей приводят при помощи CLRInterop::getAnyTypeForObject(...). Такие примеры раскинуты по многим местам AOT, так что Вам для корректности лучше вместо:
X++:
var = var_NET;
прописать:
X++:
var = CLRInterop::getAnyTypeForObject(var_NET);
Так не пойдёт.

Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Да просто проверить переменную на существования

X++:
if (var_NET)
{
    var = var_NET;
}
Так тоже не пойдёт.

Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Хотя я бы еще сначала проверил на пустое значение NET переменную.

А вот так пойдёт.
X++:
if(!CLRInterop::isNull(var_NET))
{
       var = var_NET; // <-- генерируется вот тут
}
Старый 29.04.2020, 05:21   #3  
oleggy is offline
oleggy
Участник
 
282 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
А от такого написания будет эффект? Поможет избежать каких либо еще ошибок?
Если в исходном коде так пишут..
X++:
if (!CLRInterop::isNull(var_NET))
{
       var = CLRInterop::getAnyTypeForObject(var_NET); // если эта строка будет записана так
}
Старый 29.04.2020, 06:44   #4  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
В AX 2012 исключение var = var_NET; при условии что var_NET = null можно перехватить кодом ниже, можно просто пустой catch использовать, тоже перехватит.

X++:
    catch(Exception::CLRError)
    {
        error(strFmt('Environment variable %1 is not set or other CLR error', env));
        return '';
    }
или

X++:
    catch
    {
        error(strFmt('Environment variable %1 is not set or other error', env));
        return '';
    }
Если же var_NET - это именно System.String и не null, то можно просто var = var_net.
__________________
Sergey Nefedov
Старый 29.04.2020, 11:45   #5  
oleggy is offline
oleggy
Участник
 
282 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Заметил что в обоих случаях генерируется ошибка:
X++:
var = CLRInterop::getAnyTypeForObject(var_NET); // тут
var = var_NET; // тут
Так в чем смысл getAnyTypeForObject для NET объектов? Может он не помогает?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Объект не имеет метода "mandatory" arhat DAX: Программирование 4 12.01.2016 14:32
Как программно "выделить" объект AOT? Или про глюки на открытии формы поиска gl00mie DAX: Программирование 4 15.02.2012 18:20
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

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

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

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