|
07.02.2017, 15:22 | #1 |
Молодой, подающий надежды
|
AX 2012 R2
Десериализация структуры Struct::create(_container) в CIL, которая была упакована методом pack() в обычном исполняемом коде. Разъезжаются пары Ключ-Значение Слева на скриншоте десериализация в обычном коде (ошибок нет), справа - выполненная в CIL. Как говорится, результат на лицо. Т.е. порядок значений в структуре остался прежним, а порядок ключей изменился.
__________________
Кононов Пётр |
|
|
За это сообщение автора поблагодарили: mazzy (5), macklakov (2), Logger (3). |
07.02.2017, 15:24 | #2 |
Участник
|
Цитата:
Сообщение от pedrozzz
AX 2012 R2
Десериализация структуры Struct::create(_container) в CIL, которая была упакована методом pack() в обычном исполняемом коде. Разъезжаются пары Ключ-Значение Слева на скриншоте десериализация в обычном коде (ошибок нет), справа - выполненная в CIL. Как говорится, результат на лицо. Т.е. порядок значений в структуре остался прежним, а порядок ключей изменился. Вложение 11188 1. спасибо 2. пожалуйста, зарегистрируйте багу. лучше от лица клиента. да, регистрация - это гемор. И очень сильный гемор. но эту - зарегистрируйте. пожалуйста. и еще одно: а можно попросить у вас еще и код, который у вас приводит к подобному "результату"? |
|
07.02.2017, 16:06 | #3 |
Молодой, подающий надежды
|
Цитата:
Цитата:
Похоже, что в AX ключи следуют в порядке их добавления, а в CIL в алфавитном порядке. Мне вот абсолютно на порядок плевать, но хотелось бы, раз они меняют порядок ключей, то чтобы и порядок значений изменился соответствующим образом. У нас R2, проверьте кто-нибудь в R3, может уже исправили.
__________________
Кононов Пётр Последний раз редактировалось pedrozzz; 07.02.2017 в 16:20. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
07.02.2017, 18:03 | #4 |
Участник
|
Проверил в 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). |