![]() |
#1 |
Участник
|
axforum blogs: Типы X++ date/utcDateTime НЕ преобразуются автоматически в System.DateTime в .NET CIL
Источник: http://axforum.info/forums/blog.php?b=8169
============== Замечательная статья MSDN How to: Marshal Between X++ and CLR Primitive Types [AX 2012] утверждает следующее: Цитата: In Microsoft Dynamics AX, the X++ language does implicit conversion or marshaling between several X++ primitive types and their counterpart types managed by the common language runtime (CLR). This means that the X++ assignment operator, the single equal sign (=), can be used between certain pairings of an X++ type with a .NET Framework CLR type. Среди поддерживаемых значится преобразование date ↔ System.DateTime; на самом деле, в интерпретаторе X++, по крайней мере, в AX 2012 R2 и выше замечательно преобразуются и значения типов utcDateTime ↔ System.DateTime! Но рассмотрим такой пример кода:X++: System.Web.HttpCookie cookie = new System.Web.HttpCookie('test');date dateVar = today() + 1;cookie.set_Expires(dateVar); Всё хорошо, пока дело не доходит до выполнения в CIL - а тут нас поджидает System.NotSupportedException с сообщением вида Цитата: DateTimeConverter cannot convert from Microsoft.Dynamics.Ax.Xpp.AxShared.Date либо Цитата: DateTimeConverter cannot convert from Microsoft.Dynamics.Ax.Xpp.AxShared.utcdatetime если rvalue - типа utcDateTime. В чем же дело? А в том, что магия неявного преобразования типов работает только в интерпретаторе байт-кода X++, а в CIL все происходит иначе, поэтому если есть хотя бы нановероятность того, что подобный ваш код будет выполняться в CIL, всегда выполняйте явное преобразование типов вида:X++: cookie.set_Expires(CLRInterop::getObjectForAnyType(dateVar)); Источник: http://axforum.info/forums/blog.php?b=8169
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
|
|