16.03.2011, 10:38 | #1 |
Участник
|
Ядро AX 2009 всегда пытается преобразовать числовые значения enum в метки в расширенном фильтре?
Начну немного издалека... Метки для значений enum'ов не всегда являются допустимыми с точки зрения использования в расширенных запросах - к примеру, в них могут содержаться круглые скобки, запятые, восклицательные знаки. Метод Global::enum2Value(), который вызывается из SysQuery::value(), "знает" об этом и в таких случаях возвращает не метку значения enum'а, а соотв. число.
Так вот, в работе формы расширенного фильтра запроса была замечена одна неприятная особенность: если в запросе есть такой "числовой" фильтр по полю типа enum, то при открытии формы фильтра его значение всегда преобразуется в метку, даже если она не является допустимым с т.з. использования в запросе, при этом еще и в инфологе вылезает "Ошибка расширенного диапазона запроса: Синтаксическая ошибка рядом с ...". Пользователей формы, где это проявляется, уже начинают порядком раздражать, объяснять им, что "левую" метку надо в фильтре перебивать обратно, скажем, на нолик, тоже как-то неудобно. Я сперва думал, может, это в приложении где делается, но найти такое место не смог, из чего сделал вывод, что самоуправством занимается ядро. Воспроизводится ли это еще у кого-нить? Может, все же это где-то в приложении делается, и можно такое преобразование подправить? Ядро AX 2009 SP1 5.0.1500.3968, приложение AX 2009 SP1 EE RU5 5.0.1500.2985 |
|
16.03.2011, 11:29 | #2 |
Участник
|
А в стандарте где такое можно проверить? Или речь идет про самописные enum?
__________________
Ivanhoe as is.. |
|
16.03.2011, 12:08 | #3 |
Участник
|
Enum Тип со значениями 0 = Approve!,,), и 1 = Reject
Накладывая фильтр на поле Тип = Approve!,,), сообщение об ошибке не выдается, но в форме расширенного фильтра в поле Критерии значение такое "Approve!,,), __ILLEGAL_VALUE__" Причем сколько бы раз не открывали форму фильтра столько раз будет добавляться "__ILLEGAL_VALUE__" )) Но фильтр отрабатывает правильно! Если значение enum без "," а только ! или ) значение критерия не переделывается. Ax 2009 KV 5.0.1000.52 AV 5.0.1001.176 И Ax 2009 KV 5.0.1500.3761 AV 5.0.1500.3761 |
|
16.03.2011, 12:54 | #4 |
Участник
|
Виной всему Query.pack()!
X++: static void JobTestQueryPack20110316(Args _args) { QueryRun qr; Query q = new Query(); QueryBuildDataSource qbds = q.addDataSource(tableNum(InventTable)); QueryBuildRange qbr = qbds.addRange(fieldNum(InventTable, ItemType)); container BLOB; ; qbr.value('0'); // -->> // преобразование присходит где-то здесь BLOB = q.pack(); qr = new QueryRun(BLOB); // <<-- q = qr.query(); qbds = q.dataSourceTable(tableNum(InventTable)); qbr = qbds.findRange(fieldNum(InventTable, ItemType)); info(qbr.value()); } |
|
|
За это сообщение автора поблагодарили: mazzy (2), gl00mie (2). |
Теги |
ax2009, enum, баг, ошибка, расширенный фильтр |
|
|