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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2015, 07:12   #1  
ski is offline
ski
Участник
 
35 / 12 (1) ++
Регистрация: 27.05.2009
Особенности работы X++ и CIL
Добрый день!
При реализации сервиса в Dynamics AX 2012, внутри которого идет работа со стандартными классами, я нашел некоторую особенность. Код на Х++ и CIL работает по-разному:
X++:
    container   emptyFields;
    ;
    if (! _rec.DocumentNumber)
    {
        emptyFields += "@SYS8434";
    }
    if (! _rec.DocumentDate)
    {
        emptyFields += "@SYS2587";
    }
    if (! _rec.PayerAccount)
    {
        emptyFields += "@GLS100568";
    }
    if (! _rec.PayeeAccount)
    {
        emptyFields += "@GLS100577";
    }

    if (!_rec.AmountCur)
    {
        emptyFields += "@SYS860";
    }

    if(emptyFields)
    {
        // даже если emptyFields пустое, в CIL вызывает исключение  
        throw error(strFmt("@GLS115341", con2Str(emptyFields, #comma)));
    }
Собственно вопрос - при вашей реализации сервисов, вы пишите код на CIL, или всё же используете Х++ для реализации бизнес-логики?
Старый 16.04.2015, 09:00   #2  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
X++:
if (conlen(emptyFields) > 0)
{
...
}
Старый 16.04.2015, 09:20   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от ski Посмотреть сообщение
вы пишите код на CIL, или всё же используете Х++ для реализации бизнес-логики?
А можно подробнее, как это "писать код на CIL"?
__________________
Ivanhoe as is..
Старый 16.04.2015, 09:42   #4  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва

ldc.i4.0
bne.un.s 004a
ldc.i4 0x5182
stloc.0
br.s 004b
nop
ldloc.0
ret
За это сообщение автора поблагодарили: EVGL (1).
Старый 16.04.2015, 10:01   #5  
ski is offline
ski
Участник
 
35 / 12 (1) ++
Регистрация: 27.05.2009
Цитата:
Сообщение от UNRW Посмотреть сообщение
X++:
if (conlen(emptyFields) > 0)
{
...
}
Да это всё понятно, но не переписывать же мне весь стандарт.
Старый 16.04.2015, 10:03   #6  
ski is offline
ski
Участник
 
35 / 12 (1) ++
Регистрация: 27.05.2009
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А можно подробнее, как это "писать код на CIL"?
"писать код на CIL"="писать на C#"
Старый 16.04.2015, 10:05   #7  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от ski Посмотреть сообщение
Да это всё понятно, но не переписывать же мне весь стандарт.
Прям весь? Если есть примеры не корректной работы стандартной функциональности MS - пишите запросы в поддержку, они исправят.
__________________
Ivanhoe as is..
Старый 16.04.2015, 10:15   #8  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#.

На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?".
__________________
Ivanhoe as is..
За это сообщение автора поблагодарили: ski (1).
Старый 16.04.2015, 10:18   #9  
ski is offline
ski
Участник
 
35 / 12 (1) ++
Регистрация: 27.05.2009
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Прям весь?
Утрирую, конечно, но как минимум проверять надо теперь весь.
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Если есть примеры не корректной работы стандартной функциональности MS - пишите запросы в поддержку, они исправят.
Не писал никогда, бизнесу функционал нужен "уже вчера", а МС когда выпустят свои обновления?
Старый 16.04.2015, 10:19   #10  
ski is offline
ski
Участник
 
35 / 12 (1) ++
Регистрация: 27.05.2009
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#.

На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?".
Спасибо за опыт!
Старый 16.04.2015, 10:20   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от ski Посмотреть сообщение
"писать код на CIL"="писать на C#"
"писать код на CIL" != "писать на C#"
Старый 16.04.2015, 10:32   #12  
ski is offline
ski
Участник
 
35 / 12 (1) ++
Регистрация: 27.05.2009
Цитата:
Сообщение от ice Посмотреть сообщение
"писать код на CIL" != "писать на C#"
Спасибо, я думаю, все поняли смысл.
Старый 16.04.2015, 10:35   #13  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,233 / 974 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от ski Посмотреть сообщение
Собственно вопрос - при вашей реализации сервисов, вы пишите код на CIL, или всё же используете Х++ для реализации бизнес-логики?
Забавный вопрос. Конечно же используем X++ И конечно же он компилируется в CIL.
__________________
Isn't it nice when things just work?
Старый 17.04.2015, 15:45   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ski Посмотреть сообщение
Не писал никогда, бизнесу функционал нужен "уже вчера", а МС когда выпустят свои обновления?
А зря. Обычно система работает довольно быстро, и хотфикс получают в короткие сроки - и тогда "все тестировать" не придется.
Старый 28.10.2020, 11:37   #15  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Через 4 года я понял, что значит "Писать код на CIL".
1. Пример для числа с плавающей точкой
На X++ можно написать так: myTable.(myFieldNum) = 0
А на CIL надо обязательно писать так: myTable.(myFieldNum) = 0.0. Иначе будут очень интересные эффекты.

2.Пример для даты
На X++ можно написать так: str key = con2Str([transDate])
А на CIL надо обязательно писать так: str key = con2Str([strfmt("%1", transDate)]), иначе вместо даты в переменной key окажется строка "Microsoft.Dynamics.Ax.Xpp.AxShared.Date".
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/

Последний раз редактировалось Ace of Database; 28.10.2020 в 11:44.
За это сообщение автора поблагодарили: AlGol (3), sukhanchik (4).
Старый 03.11.2020, 16:40   #16  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
rPayRateTrans.RateValue = strFmt('%1', rhrmWorkConditionClass.PayRateValue);
Подобная запись ставки вызывает увеличение зарплаты в 100 раз при исполнении в CIL
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
X++ to CIL Blog bot DAX Blogs 0 01.04.2013 14:11
X++: X++ Arrays Behave Differently in .NET CIL, in Dynamics AX 2012 Blog bot DAX Blogs 0 17.09.2012 23:11
emeadaxsupport: In Microsoft Dynamics AX 2012, compiler output setting of Message Window may cause errors when generating (incremental) CIL Blog bot DAX Blogs 0 16.03.2012 23:12
X++: X++ Function num2Str: Difference in .NET CIL Mode Blog bot DAX Blogs 0 09.03.2012 07:45
Особенности работы RLS Glue DAX: Администрирование 1 06.03.2006 09:17

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

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

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