17.03.2010, 14:27 | #1 |
MCTS
|
Ограничения CLR Interop в DAX (4.0, 2009)
Смотрю сейчас тему интеграции DAX (4.0, 2009) с .NET, есть несколько вопросов:
1. Почему нельзя сделать так: X++: static void CLRInteropTest1(Args _args) { System.DateTime clrDateTime; ; clrDateTime = new System.DateTime(); //Возникает исключение: "The class System.DateTime does not contain this function". } X++: System.DateTime clrDateTime; //C# clrDateTime = new System.DateTime(); 2. Сталкивался с тем, что при вызове .NET сборки (вероятно после возникновения исключения при ее выполнении) в DAX управление вообще не возвращалось даже в виде исключения, которое можно было бы обработать.. Что это могло быть и как с этим можно бороться? 3. Бонус. Этот пример только мне кажется странным? X++: System.Int32 netInt = 2; int xppInt = 9; ; // Marshal X++ to .NET. xppInt = 444; netInt = xppInt; // Marshals. if (444 == xppInt) { info("B1. Good, X++ was marshaled to .NET."); } else { info("B2. Bad, X++ was not marshaled to .NET."); } Последний раз редактировалось alex55; 17.03.2010 в 14:33. |
|
17.03.2010, 15:16 | #2 |
Участник
|
1. Потому, что такого конструктора у структуры DateTime действительно нет.
2. Работа исключений в Dynamics AX для меня вообще загадка. 3. А что Вам тут кажется странным? Последний раз редактировалось _scorp_; 17.03.2010 в 15:19. |
|
17.03.2010, 16:07 | #3 |
MCTS
|
Цитата:
Сообщение от _scorp_
1. Потому, что такого конструктора у структуры DateTime действительно нет.
3. А что Вам тут кажется странным? Перефразирую вопрос №1 - "Есть ли в DAX эквивалент вызова конструктора по умолчанию для классов из .NET-сборок"? 3. Странно, что именно таким образом в примере проверяется корректность (или факт выполнения) маршалинга в .NET. То есть в netInt мы передали значение (допустим), а далее в условии проверяется исходное значение из X++. И, собственно, что можно таким образом проверить?) |
|
17.03.2010, 16:30 | #4 |
Участник
|
Цитата:
Сообщение от alex55
1.Порылся в доках, приведенный пример конструктора называется "конструктором по умолчанию" (http://msdn.microsoft.com/ru-ru/library/ms173115.aspx)
Цитата:
Можно создать новое значение DateTime, используя один из следующих способов:
,,, Путем вызова неявного конструктора по умолчанию структуры DateTime. (Дополнительные сведения о неявном конструкторе по умолчанию типа значения см. в разделе Типы значений (Справочник по C#).) Приблизительный аналог, который поддерживается компиляторами, — объявить значение DateTime без явного присвоения даты и времени. Да, действительно. Первый раз невнимательно просмотрел пример . Тоже непонимаю смысл... Последний раз редактировалось _scorp_; 17.03.2010 в 16:33. |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
17.03.2010, 17:54 | #5 |
MCTS
|
4. Правильно ли я понимаю, что из DAX можно обратиться только к методам прикладных объектов, а свойства и т.п. недоступны?
То есть использовать конструкции вроде такой не получится: textBox1.Text = System.DateTime.Now.Ticks.ToString(); Может есть альтернативный синтаксис, позволяющий достучаться до свойств? |
|
17.03.2010, 22:45 | #6 |
Участник
|
Цитата:
Сообщение от alex55
4. Правильно ли я понимаю, что из DAX можно обратиться только к методам прикладных объектов, а свойства и т.п. недоступны?
То есть использовать конструкции вроде такой не получится: textBox1.Text = System.DateTime.Now.Ticks.ToString(); Может есть альтернативный синтаксис, позволяющий достучаться до свойств? Вот пример. AX 4.0. Условие: Убедитесь в том, что сборка с которой Вы собираетесь работать загружена в References Dynamics AX. X++: static void useNetProperties(Args _args) { System.Data.DataSet netDataSet; str xppStr; ; netDataSet = new System.Data.DataSet(); netDataSet.set_DataSetName("this DataSet name"); xppStr = netDataSet.get_DataSetName(); info(xppStr); } Последний раз редактировалось _scorp_; 17.03.2010 в 22:53. |
|
18.03.2010, 12:26 | #7 |
MCTS
|
Цитата:
Сообщение от _scorp_
Альтернативный синтаксис есть. Свойства .NET объекта в Dynamics AX представляются парой методов get_PropertyName и set_PropertyName. Причем, можно обратить внимание на то, что этих методов нет в описании объекта в MSDN и даже в Object Brouser Visual Studio. Эти методы, как я понимаю, генерирует сама DAX в качестве обертки над .NET объектом.
|
|
18.03.2010, 12:37 | #8 |
Участник
|
Цитата:
Сообщение от _scorp_
Причем, можно обратить внимание на то, что этих методов нет в описании объекта в MSDN и даже в Object Brouser Visual Studio. Эти методы, как я понимаю, генерирует сама DAX в качестве обертки над .NET объектом. И начинаются эти методы с маленькой буквы, хотя в .NET принято чтобы методы начинались с заглавных букв.
Аксапта не генерит обертки, а честно берет названия методов из CIL кода .net объектов. |
|
|
За это сообщение автора поблагодарили: _scorp_ (2). |
Теги |
.net, ax2009, ax4.0, clr interop |
|
|