AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
NAV
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.02.2017, 16:06   #1  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от mazzy Посмотреть сообщение
2. пожалуйста, зарегистрируйте багу. лучше от лица клиента. да, регистрация - это гемор. И очень сильный гемор. но эту - зарегистрируйте. пожалуйста.
Никогда не сталкивался с процессом регистрации и проект сейчас в стадии запуска, так что немного не до этого. Но если кто-то желает помочь с этим и займется - я не возражаю и только всячески приветствую.
Цитата:
Сообщение от mazzy Посмотреть сообщение
а можно попросить у вас еще и код, который у вас приводит к подобному "результату"?
Сам код разбросан по кускам разных классов, которые в силу NDA я не имею права выкладывать. Но в целом идея такая:
  1. Создаете в таблице YourTableName поле типа контейнер PackedData
  2. Заполняете структуру значениями в обычном исполняемом коде и через .pack() сохраняете его в таблицу. Например так:
    X++:
        YourTableName                           yourTableName;
        Struct                                  struct;
    
        struct  = new Struct();
        
        struct.add('ScenarioHistoryRecId', someRecId);
        struct.add('ResponseCode'        , someText);
        struct.add('InvoiceDateDispute'  , someDateTime);
        struct.add('OrigInvoiceDueDate'  , anotherDateTime);
        struct.add('OutstandingAmount'   , someRealValue);
        struct.add('DateReminderSent'    , oneMoreDateTime);
        struct.add('NewDueDateRemind'    , someDate);
        
        yourTableName.clear();
        yourTableName.PackedData = struct.pack();
        yourTableName.insert()
  3. Создаете наследника RunBaseBatch, в методе run() десереализируете сохраненную структуру через create() и запускаете один раз просто так, а второй раз в пакете.
    X++:
        YourTableName                           yourTableName = YourTableName::find(yourTableRecId);
        Struct                                  dataStruct    = yourTableName.PackedData
                                                              ? Struct::create(yourTableName.PackedData)
                                                              : new Struct();
        Counter                                 i;
    
        info(strFmt("Record id: %1", yourTableName.RecId));
        
        for (i = 1; i <= dataStruct.fields(); i++)
        {
            info(strFmt("%1: %2", dataStruct.fieldName(i), dataStruct.value(dataStruct.fieldName(i))));
        }
  4. Удивляетесь увиденному

Похоже, что в AX ключи следуют в порядке их добавления, а в CIL в алфавитном порядке. Мне вот абсолютно на порядок плевать, но хотелось бы, раз они меняют порядок ключей, то чтобы и порядок значений изменился соответствующим образом. У нас R2, проверьте кто-нибудь в R3, может уже исправили.
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 07.02.2017 в 16:20.
За это сообщение автора поблагодарили: mazzy (5).
Старый 07.02.2017, 18:03   #2  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
396 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Проверил в R3 CU11 - не исправили.

Чем отвечать на каверзные вопросы в регистрационной форме, я бы использовал Map, который вроде не глючит, если сделать так:

Запись

X++:
    map = new Map(Types::String, Types::Container);
    map.insert('ScenarioHistoryRecId', [123456789]);
    map.insert('ResponseCode'        , ['my text']);    
    packedMap = map.pack();
Считывание

X++:
    Map             map = Map::create(_packedMap);
    MapEnumerator   enumerator; 
    
    enumerator = map.getEnumerator();
    while (enumerator.moveNext())
    {
        info(strFmt("%1: %2", enumerator.currentKey(), conPeek(enumerator.currentValue(), 1)));
    }

Последний раз редактировалось Stitch_MS; 07.02.2017 в 18:48.
За это сообщение автора поблагодарили: pedrozzz (4).
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:31.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.