|
|
#1 |
|
Участник
|
Особенности работы 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))); } |
|
|
|
|
#2 |
|
Участник
|
X++: if (conlen(emptyFields) > 0)
{
...
} |
|
|
|
|
#3 |
|
Участник
|
А можно подробнее, как это "писать код на CIL"?
__________________
Ivanhoe as is.. |
|
|
|
|
#4 |
|
Участник
|
![]() ldc.i4.0 bne.un.s 004a ldc.i4 0x5182 stloc.0 br.s 004b nop ldloc.0 ret |
|
|
|
| За это сообщение автора поблагодарили: EVGL (1). | |
|
|
#5 |
|
Участник
|
|
|
|
|
|
#6 |
|
Участник
|
|
|
|
|
|
#7 |
|
Участник
|
Прям весь?
Если есть примеры не корректной работы стандартной функциональности MS - пишите запросы в поддержку, они исправят.
__________________
Ivanhoe as is.. |
|
|
|
|
#8 |
|
Участник
|
Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#.
На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?".
__________________
Ivanhoe as is.. |
|
|
|
| За это сообщение автора поблагодарили: ski (1). | |
|
|
#9 |
|
Участник
|
Утрирую, конечно, но как минимум проверять надо теперь весь.
Не писал никогда, бизнесу функционал нужен "уже вчера", а МС когда выпустят свои обновления? |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Сообщение от Ivanhoe
Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#.
На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?". |
|
|
|
|
#11 |
|
Участник
|
|
|
|
|
|
#12 |
|
Участник
|
|
|
|
|
|
#13 |
|
NavAx
|
Забавный вопрос. Конечно же используем X++ И конечно же он компилируется в CIL.
__________________
Isn't it nice when things just work? |
|
|
|
|
#14 |
|
Участник
|
А зря. Обычно система работает довольно быстро, и хотфикс получают в короткие сроки - и тогда "все тестировать" не придется.
|
|
|
|
|
#15 |
|
Участник
|
Через 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). | |
|
|
#16 |
|
Axapta Retail User
|
rPayRateTrans.RateValue = strFmt('%1', rhrmWorkConditionClass.PayRateValue);
Подобная запись ставки вызывает увеличение зарплаты в 100 раз при исполнении в CIL
|
|
|
|
|
|