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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.01.2010, 10:33   #1  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я когда-то тоже жалел, что статусы не были пронумерованы с шагом, скажем, 10 и приходиться вводить подстатусы в другом поле. Но вот только вопрос: Допустим вы между Ordered и Arrived завели статусы InTransitForeign, InCustomWarehouse,InTransitDomestic. Что вы будете делать со всей логикой (а ее довольно много), которая местами пляшет не от сравнения статусов по < или >, а работает исключительно по равенству статуса константе ?
Я, в какой-то момент, решил что подстатусы заводить все-таки правильнее, и отсутствие промежуточных статусов - это не design flaw, а осмысленное решение..
Старый 29.01.2010, 10:59   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,340 / 3558 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
Я когда-то тоже жалел, что статусы не были пронумерованы с шагом, скажем, 10 и приходиться вводить подстатусы в другом поле.
...
Что вы будете делать со всей логикой (а ее довольно много), которая местами пляшет не от сравнения статусов по < или >, а работает исключительно по равенству статуса константе ?
Я, в какой-то момент, решил что подстатусы заводить все-таки правильнее, и отсутствие промежуточных статусов - это не design flaw, а осмысленное решение..
Тут надо определиться. Либо надо ВЕЗДЕ делать сравнение по < > и тогда делать "дырки" в статусах, либо ВЕЗДЕ перечислять их и отказаться от < >. Я (мое личное мнение) за то, чтобы отказаться от < >, т.к. внутреннее числовое значение енума спрятано от пользователя/программиста. А если уж кто вводит новй статус - пусть 10 раз подумает в скольких местах это аукнется. Ту же новую складскую аналитику прописываем в N-цати местах - научились. Так и тут - научимся коль припрет
__________________
Возможно сделать все. Вопрос времени
Старый 29.01.2010, 11:38   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,443 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
внутреннее числовое значение енума спрятано от пользователя/программиста
Это почему же? Программисту вполне доступна информарция о числовых значениях enum'а. А если включить свойство UseEnumValue, то и пользователь будет иметь представление, если не о самих значениях, то хотябы о порядке их следования.

Т.е. в моём представлении, если UseEnumValue = NoYes::Yes, то enum представляет собой не просто множество доступных значений, а именно упорядоченное множество. И в таком случае логично повсеместно использовать операции < >.
Старый 29.01.2010, 12:02   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,340 / 3558 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Это почему же? Программисту вполне доступна информарция о числовых значениях enum'а.
Не согласен. Пользуемся штатными средствами:
1. Обозреватель таблиц
2. Обычные формы, где используется енум
3. Отладчик.

Нигде не показывается числовое значение енума. Его можно увидеть лишь в свойствах енума аналогично его id. Т.е. конечно программист при желании может достать числовое значение. Но в коде он оперирует именно буквенными обозначениями енума, которые математически сравнивать некорректно на больше или меньше.
__________________
Возможно сделать все. Вопрос времени
Старый 29.01.2010, 12:23   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,443 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Согласен, что сравнивать значение enum'а непосредственно с числовым значением некорректно, но с другим значением этого же enum'а... почему нет? Я бы даже предложил сделать операции инкремента и декремента для таких упорядоченных enum'ов, которые бы переводили бы его в следующее или предыдущее состояние.

P.S.: Cоздавая relation'ы на таблицах с использованием enum приходится использовать их числовые значения.
Старый 29.01.2010, 14:38   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,340 / 3558 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Согласен, что сравнивать значение enum'а непосредственно с числовым значением некорректно, но с другим значением этого же enum'а... почему нет? Я бы даже предложил сделать операции инкремента и декремента для таких упорядоченных enum'ов, которые бы переводили бы его в следующее или предыдущее состояние.
Вот... а в этом случае на уровне АОТа Enum-ы следовало бы разбить на 2 вида: Упорядоченные, для которых доступны операции инкремента/декремента и в которых программист не управляет значениями в БД, но зато сам может вставить промежуточный статус. Сейчас это не получится сделать, т.к. между двумя последовательными целыми числами новое число не вставишь. Хотя параметр UseEnumValue казалось бы мог решить сию проблему.

И неупорядоченные - в которых порядок неважен - главное - наличие значения (например, кодировка файла при экспорте).

Сейчас все имеющиеся Enum-ы неупорядоченные. Упорядочить их можно - сделав класс-обертку, который бы контролировал статусы и их сравнивал. Либо править ядро.
Поэтому, на будущее я и предложил - что хорошо было бы сделать однообразно. Неважно как.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
P.S.: Cоздавая relation'ы на таблицах с использованием enum приходится использовать их числовые значения.
Увы, это так - но я бы назвал это скорее недостатком ядра, т.к. уже успел еще на 3.0 столкнуться с тем, что MS менял id значения енумов, в результате чего в собственных доработках приходилось раскапывать все эти места и править
__________________
Возможно сделать все. Вопрос времени
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как выполнять дефрагментирование RecID mazzy DAX: База знаний и проекты 174 05.10.2017 12:59
Передача функции в качестве параметра lemchey_white DAX: Программирование 20 21.01.2008 22:51
Общий вопрос по реализации кап стоя в Axapta Ann DAX: Функционал 3 09.06.2005 17:58
Вопрос по дизайну отчета ATimTim DAX: Программирование 8 26.10.2004 16:23
Вопрос по дизайну shestakov DAX: Программирование 1 18.12.2001 20:39

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

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

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