|  16.04.2015, 07:12 | #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))); } | 
|  | 
|  16.04.2015, 09:00 | #2 | 
| Участник | X++: if (conlen(emptyFields) > 0)
{
...
} | 
|  | 
|  16.04.2015, 09:20 | #3 | 
| Участник | 
			
			А можно подробнее, как это "писать код на CIL"?
		 
				__________________ Ivanhoe as is.. | 
|  | 
|  16.04.2015, 09:42 | #4 | 
| Участник |  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 | 
| Участник | |
|  | 
|  16.04.2015, 10:03 | #6 | 
| Участник | |
|  | 
|  16.04.2015, 10:05 | #7 | 
| Участник | 
			
			Прям весь?   Если есть примеры не корректной работы стандартной функциональности MS - пишите запросы в поддержку, они исправят. 
				__________________ Ivanhoe as is.. | 
|  | 
|  16.04.2015, 10:15 | #8 | 
| Участник | 
			
			Обычно пишем на 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 | 
| Участник | 
			
			Утрирую, конечно, но как минимум проверять надо теперь весь.   Не писал никогда, бизнесу функционал нужен "уже вчера", а МС когда выпустят свои обновления? | 
|  | 
|  16.04.2015, 10:19 | #10 | 
| Участник | Цитата: 
		
			Сообщение от Ivanhoe
			   Обычно пишем на X++, есть известные ограничения (https://msdn.microsoft.com/EN-US/library/hh397320.aspx), а также неявные преобразования типов. В целом все предсказуемо и понятно, поддерживать легче. Переходить на C#, мне кажется, стоит только в случае ожидаемого большого ускорения кода или когда бОльшая часть Аксы сама перейдет на C#. На практике, нововведения с внешними библиотеками в AX вызывают огромные лишние телодвижения (планирование мощности в сводном, расчеты в TMS), как в плане понять "как оно работает", так и в плане "а как это поменять?". | 
|  | 
|  16.04.2015, 10:20 | #11 | 
| Участник | |
|  | 
|  16.04.2015, 10:32 | #12 | 
| Участник | |
|  | 
|  16.04.2015, 10:35 | #13 | 
| NavAx | 
			
			Забавный вопрос. Конечно же используем X++ И конечно же он компилируется в CIL.
		 
				__________________ Isn't it nice when things just work? | 
|  | 
|  17.04.2015, 15:45 | #14 | 
| Участник | 
			
			А зря. Обычно система работает довольно быстро, и хотфикс получают в короткие сроки - и тогда "все тестировать" не придется.
		 | 
|  | 
|  28.10.2020, 11:37 | #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). | |
|  03.11.2020, 16:40 | #16 | 
| Axapta Retail User | 
			
			rPayRateTrans.RateValue     = strFmt('%1', rhrmWorkConditionClass.PayRateValue); Подобная запись ставки вызывает увеличение зарплаты в 100 раз при исполнении в CIL   | 
|  | 
|  | 
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
| 
 |