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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.06.2014, 17:00   #1  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
код в CIL и без
Хочу поделиться опытом связанным с 2012:

Был вот такой код
X++:
void test()
{
    Map     valList = new Map(Types::String, Types::Container);
    Real    value;
    ;
    valList.insert(value, conNull());
}
Ошибочка: объявили, что в мепе будет стринг, а пишем туда риал. Долго оставалась незамеченной, все работало как часы. Но как только собрали CIL она всплыла. Вот ведь... в циле работает так, а в аксапте иначе. Но если говорить серьезно, то разница есть и на вполне правильных конструкциях. В последнее время я попробовал работать с SysOperation вместо RunBaseBatch, а там все работает только через цил.

1. Прежде всего, это передача различных типов данных.
а) например, при работе с Net-сборками:

Без цила работает так

X++:
void test(CLRObject _obj)
{
    System.Collections.Hashtable        hash;
    ;
    hash = new System.Collections.Hashtable(_obj);
}
В циле требуется передавать объект правильного типа

X++:
void test(CLRObject _obj)
{
    System.Collections.Hashtable        hash;
    System.Collections.IDictionary      iDictionary;
    ;
    if ( #isDictionary )
    {
        iDictionary = _obj;
        hash = new System.Collections.Hashtable(iDictionary);
    }
}
б) выборка из таблицы select x; без цила возвращает объект того типа, который объявлен, а в циле возвращает объект дочерней таблицы (теперь у нас такие есть в Акс12).
в) Аналогично, надо внимательно относиться к классам дочерним и родительским, к передаче данных через контейнер, к использованию anytype и common и т.д.

2. insert_recordset без цила позволяет писать в таблицу константы (используя переменные правильного типа), в циле этот номер не проходит, приходится выполнять две операции, сначала используя insert_recordset прописать идентификаторы, а затем при помощи update_recordset прописать текстовые константы.

3. Метод внутри метода (вложенный): с ним нет проблем, кроме одной: если вложенный метод является рекурсивным, то цил даже отказывается компилиться

У меня пока все, может быть кто то еще с чем то подобным встречался ?

Последний раз редактировалось Мартынов Дмитрий; 10.06.2014 в 17:02. Причина: ня
За это сообщение автора поблагодарили: mazzy (2), Logger (3), Link (4), S.Kuskov (5), pedrozzz (1).
Теги
cil

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Неправильный объектный код. Хотя правильный... Мартынов Дмитрий DAX: Администрирование 4 06.02.2014 00:44
Узнать уникальный код сеанса для web сессии trud DAX: Программирование 10 12.04.2012 09:39
axdaily: X++ can be compiled to CIL in AX 2012 Blog bot DAX Blogs 0 23.04.2011 07:11
Получить код экземпляра устройства samolalex DAX: Программирование 0 26.11.2010 12:05
Channel9: Peter Villadsen and Gustavo Plancarte: X++ to MSIL Blog bot DAX Blogs 30 24.08.2010 17:11

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

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

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