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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.03.2010, 14:27   #1  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Ограничения 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.");
    }
http://msdn.microsoft.com/en-us/library/cc584291.aspx

Последний раз редактировалось alex55; 17.03.2010 в 14:33.
Старый 17.03.2010, 15:16   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
1. Потому, что такого конструктора у структуры DateTime действительно нет.
2. Работа исключений в Dynamics AX для меня вообще загадка.
3. А что Вам тут кажется странным?

Последний раз редактировалось _scorp_; 17.03.2010 в 15:19.
Старый 17.03.2010, 16:07   #3  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
1. Потому, что такого конструктора у структуры DateTime действительно нет.
3. А что Вам тут кажется странным?
1.Спасибо за наводку. Порылся в доках, приведенный пример конструктора называется "конструктором по умолчанию" (http://msdn.microsoft.com/ru-ru/library/ms173115.aspx), видимо по этому он не включен в указанный список конструкторов .

Перефразирую вопрос №1 - "Есть ли в DAX эквивалент вызова конструктора по умолчанию для классов из .NET-сборок"?

3. Странно, что именно таким образом в примере проверяется корректность (или факт выполнения) маршалинга в .NET. То есть в netInt мы передали значение (допустим), а далее в условии проверяется исходное значение из X++. И, собственно, что можно таким образом проверить?)
Старый 17.03.2010, 16:30   #4  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от alex55 Посмотреть сообщение
1.Порылся в доках, приведенный пример конструктора называется "конструктором по умолчанию" (http://msdn.microsoft.com/ru-ru/library/ms173115.aspx)
Не совсем так. Это конструктор по умолчанию для ссылочных типов. DateTime является значимым типом. Для них другие правила. А конкретно для DateTime написано следующее:
Цитата:
Можно создать новое значение DateTime, используя один из следующих способов:
,,,
Путем вызова неявного конструктора по умолчанию структуры DateTime. (Дополнительные сведения о неявном конструкторе по умолчанию типа значения см. в разделе Типы значений (Справочник по C#).) Приблизительный аналог, который поддерживается компиляторами, — объявить значение DateTime без явного присвоения даты и времени.
Т.е. вызов конструктора по умолчанию структуры DateTime это возможность компилятора, а так как в Dynamics AX нет компилятора .NET, а есть только возможность использовать уже скомпилированные сборки, то отсюда и возникает ошибка.

Цитата:
Сообщение от alex55 Посмотреть сообщение
3. Странно, что именно таким образом в примере проверяется корректность (или факт выполнения) маршалинга в .NET. То есть в netInt мы передали значение (допустим), а далее в условии проверяется исходное значение из X++. И, собственно, что можно таким образом проверить?)
Да, действительно. Первый раз невнимательно просмотрел пример . Тоже непонимаю смысл...

Последний раз редактировалось _scorp_; 17.03.2010 в 16:33.
За это сообщение автора поблагодарили: alex55 (1).
Старый 17.03.2010, 17:54   #5  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
4. Правильно ли я понимаю, что из DAX можно обратиться только к методам прикладных объектов, а свойства и т.п. недоступны?

То есть использовать конструкции вроде такой не получится:

textBox1.Text = System.DateTime.Now.Ticks.ToString();

Может есть альтернативный синтаксис, позволяющий достучаться до свойств?
Старый 17.03.2010, 22:45   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от alex55 Посмотреть сообщение
4. Правильно ли я понимаю, что из DAX можно обратиться только к методам прикладных объектов, а свойства и т.п. недоступны?

То есть использовать конструкции вроде такой не получится:

textBox1.Text = System.DateTime.Now.Ticks.ToString();

Может есть альтернативный синтаксис, позволяющий достучаться до свойств?
Альтернативный синтаксис есть. Свойства .NET объекта в Dynamics AX представляются парой методов get_PropertyName и set_PropertyName. Причем, можно обратить внимание на то, что этих методов нет в описании объекта в MSDN и даже в Object Brouser Visual Studio. Эти методы, как я понимаю, генерирует сама DAX в качестве обертки над .NET объектом. И начинаются эти методы с маленькой буквы, хотя в .NET принято чтобы методы начинались с заглавных букв.

Название: 1.jpg
Просмотров: 705

Размер: 18.3 Кб

Вот пример. 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  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Альтернативный синтаксис есть. Свойства .NET объекта в Dynamics AX представляются парой методов get_PropertyName и set_PropertyName. Причем, можно обратить внимание на то, что этих методов нет в описании объекта в MSDN и даже в Object Brouser Visual Studio. Эти методы, как я понимаю, генерирует сама DAX в качестве обертки над .NET объектом.
Спасибо, полезная инфа. А данная фича где-то описана?
Старый 18.03.2010, 12:37   #8  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Причем, можно обратить внимание на то, что этих методов нет в описании объекта в MSDN и даже в Object Brouser Visual Studio. Эти методы, как я понимаю, генерирует сама DAX в качестве обертки над .NET объектом. И начинаются эти методы с маленькой буквы, хотя в .NET принято чтобы методы начинались с заглавных букв.

Аксапта не генерит обертки, а честно берет названия методов из CIL кода .net объектов.
За это сообщение автора поблагодарили: _scorp_ (2).
Теги
.net, ax2009, ax4.0, clr interop

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
msdynamicsax: Enterprise Portal development in DAX 2009 Blog bot DAX Blogs 0 18.04.2008 07:06
Arijit Basu: Microsoft Dynamics AX CLR Interop Blog bot DAX Blogs 0 07.10.2007 01:03

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

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

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