14.09.2010, 17:36 | #1 |
NavAx
|
Будьте аккуратны с мышкой, enum и UseEnumValue в Ax 4.0
По свежим граблям:
Если в enum с UseEnumValue = No случайно (или намеренно) переместить один (или несколько) элементов в другое место (изменить порядок), то они будут заново перенумерованы, соотв. этому новому порядку, НО ЭТОГО НЕ БУДЕТ ВИДНО вплоть до перезапуска клиента. Так что случайное движение мышкой в репозитарии консультантом с доступом к разработке может вызвать изрядное количество головняка. А если еще и на рабочей базе, то... Версия клиента из KB978429 - 4.0.2503.970. |
|
|
За это сообщение автора поблагодарили: Logger (2). |
15.09.2010, 07:14 | #2 |
Мрачный тип
|
А по-моему оно и так очевидно. При использовании UseEnumValue = Yes, независимо от номера позиции элемента в Enum (и соответственно индекса выбранного элемента в контролах типа combobox и прочих enum-friendly контролах), возвращаемое и сохраняемое в БД целочисленное значение Enum будет таким, какое прописано для данного элемента в АОТ (т.е. через некую карту соответствия "позиция<=>значение"). При использовании UseEnumValue = No подобное соотвествие не используется и возвращается строго позиция элемента в Enum(индекс выбранного элемента в контроле), т.е. изменение позиции вызовет изменение возвращаемых целочисленных значений Enum'а, сохраняемых в БД, и искажение символьных значений по данному Enum в ранее сохраненных данных. Это просто надо помнить и понимать.
P.S. Помнится была тема "Пускать ли программиста в рабочее приложение" - сейчас отличный прецедент для создания темы "Пускать ли консультанта в рабочее приложение" P.P.S. Это вряд ли можно считать багом
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 15.09.2010 в 07:23. |
|
15.09.2010, 11:39 | #3 |
Участник
|
Единственное, конечно, можно было бы хотя бы предупреждение добавить какое-то для разработчика.
Мол, изменение порядка значений в данном перечислении приведет к искажению данных в таблицах, использующих данное перечисление. Или вообще автоматическую "синхронизацию", которая пробежится по всем таблицам, где это перечисление используется, и обновит значения соответствующим образом. |
|
15.09.2010, 14:43 | #4 |
NavAx
|
Я бы не сказал. Разработчик вполне имеет право после нажатия кнопки "Сохранить" и пропадания красной черты возле элемента AOT, видеть его актуальное состояние. А так - щелкая по свойствам элементов enum, я вижу их старые значения, тогда как реально - они уже другие. Иначе чем ошибкой, я такое поведение назвать не могу.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
Теги |
feature, useenumvalue |
|
|