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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.12.2010, 10:51   #1  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
подмена BaseEnum
В стандарте AX2009 для семейного положения используется enum в котором понятия для разных полов объединены: женат/замужем
Закачик хочет видеть разные значения в зависимости от пола.
Решил попробовать на форме сделать подмену списка. Создал два енума для мужчин и женщин, но как на форме при отображении и выборе сделать подмену?
Старый 24.12.2010, 11:15   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
С подменой тяжело - т.к. подмена еще может сработать на init-е формы, а дальше уже не сработает.
Можно попробовать сделать edit-метод (поле String), свой Base Enum, в котором будут все значения, а также lookup-кнопку, а в методе lookup вызвать метод EnumLookup_RU::lookup, (если у вас есть русская локализация) в который передается контейнер разрешенных для отображения значений лукапа.
Соответственно - в edit-методе будет "конвертация" между Base Enum-ами.

Конечно - это будет не очень красиво (по сравнению с исходным интерфейсом) - но формально позволит выполнить поставленную задачу.

Добавлять в runtime значения в Combobox не советую - т.к. слетают индексы (т.е. фактически программист не в состоянии управлять числовым значением того или иного элемента списка). Плюс вы немного промучаетесь при отображении существующего значения в ComboBox-е - там могут иногда слетать значения (активное тестирование может выявить).

Т.е. в конечном счете - данный бантик (а это можно только бантиком и назвать), на мой взгляд, не стоит тех мучений, которые нужно положить в его реализацию.
__________________
Возможно сделать все. Вопрос времени
Старый 24.12.2010, 11:26   #3  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
В ComboBox'e с семейным положением нужно поставить свойство AutoDeclaration в true, затем перекрыть метод modified() CheckBox'a с полом, как показано в коде ниже.
Свойство enumType первого CheckBox'a заполняете именем соответствующего enum'a, а данное свойство второго CheckBox'a оставляете пустым.
X++:
public boolean modified()
{
    boolean ret;

    ret = super();

    if(ret)
    {
        switch(this.valueStr())
        {
             case enum2str(Gender::Male):
                MaritalStatus.enumType(enumnum(MaritalStatus_Men)); //enum семейного положения для мужчин
             break;
             case enum2str(Gender::Female):
                MaritalStatus.enumType(enumnum(MaritalStatus_Women));//enum семейного положения для женщин
             break;
        }
    }
    return ret;
}
Изображения
 
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 24.12.2010 в 11:32.
Старый 24.12.2010, 11:33   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от samolalex Посмотреть сообщение
В ComboBox'e с семейным положением нужно поставить свойство AutoDeclaration в true, затем перекрыть метод modified()
Сие точно работает? А то я уже не помню причин - но что-то меня отпугнуло в свое время так делать (в 4.0 правда).
Если работает - тогда без проблем - так и нужно делать.
__________________
Возможно сделать все. Вопрос времени
Старый 24.12.2010, 11:34   #5  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
В Axapta 3 SP1 специально сделал тестовую формочку, проверил - работает.
__________________
С уважением, Александр.
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 24.12.2010, 11:42   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
О! Вспомнил - почему я так не делал. Если поле с енумом выводится в гриде - то естественно - у всех записей не может быть разный Base Enum при комбобоксе. Т.е. фактически - решение о подмене Enum-а хорошо - если контрол не будет вытянут в грид
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: samolalex (1).
Старый 24.12.2010, 11:56   #7  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Согласен, т.к. "датабинд" при модификации поля с полом распространится на все записи в Grid'e.
В принципе, как мне кажется есть выход в создании справочника семейных статусов, где каждому значению семейного статуса будет соответствовать определенный пол. И уже после этого следует перекрывать метод lookup() для поля с семейным статусом из созданной таблицы-справочника, в котором отфильтровывались бы записи в зависимости от значения поля с полом.
Может быть, я немного отдалился от первоначального вопроса, но данную задачу я, скорее всего, решил бы так.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 24.12.2010 в 11:59.
Старый 24.12.2010, 12:00   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от samolalex Посмотреть сообщение
Согласен, т.к. датабинд при модификации поля с полом распространится на все записи в Grid'e.
В принципе, как мне кажется есть выход в создании справочника семейных статусов, где каждому значению семейного статуса будет соответствовать определенный пол. И уже после этого следует перекрывать метод lookup() для поля с семейным статусом из созданной таблицы-справочника, в котором фильтровались записи в зависимости от значения поля с полом.
Может быть, я немного отдалился от первоначального вопроса, но данную задачу я, скорее всего, решил бы так.
В данной конкретной - задаче - можно решить так, поскольку енумы с полом и семейным положением не влияют на функциональную логику работы системы. В общем-же случае - замена енума на справочник невозможна / нетривиальна, т.к. на конкретные значения енума может быть завязана конкретная логика, которую нельзя завязать на значения справочника.
__________________
Возможно сделать все. Вопрос времени
Старый 24.12.2010, 12:03   #9  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
В данной конкретной - задаче - можно решить так, поскольку енумы с полом и семейным положением не влияют на функциональную логику работы системы. В общем-же случае - замена енума на справочник невозможна / нетривиальна, т.к. на конкретные значения енума может быть завязана конкретная логика, которую нельзя завязать на значения справочника.
Полностью согласен.
__________________
С уважением, Александр.
Старый 24.12.2010, 12:13   #10  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от samolalex Посмотреть сообщение
В принципе, как мне кажется есть выход в создании справочника семейных статусов, где каждому значению семейного статуса будет соответствовать определенный пол.
Собственно Россияне и создали справочник семейных статусов, только пол к строкам не подвязали и естественно он не связан со стандартными таблицами.
Но в стандарте используется енум. Поэтому и хочется перейти на стандарт, но со своими особенностями.
Старый 24.12.2010, 12:15   #11  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
А где дальше используется это значение "женат/замужем" ? Может проще было расширить enum: значение "женат/замужем" поменять на "женат", добавить новое "замужем", джобиком поменять значения для женщин.
За это сообщение автора поблагодарили: sukhanchik (2), samolalex (1).
Старый 24.12.2010, 12:22   #12  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от Zabr Посмотреть сообщение
Может проще было расширить enum: значение "женат/замужем" поменять на "женат", добавить новое "замужем", джобиком поменять значения для женщин.
Тогда буден возможность выбирать не соответсвующие пункты.

Получилось сделать как предложил samolalex, НО пришлось контрол отвязать от поля таблицы. И прийдется вручную присваивать значение полю.
Старый 24.12.2010, 12:56   #13  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Строго говоря, нужно (в зависимости от пола) не два разных enuma, а два разных перевода значений енума. Т.е. нужно всегда выбирать NotMarried, но в грид выводить либо "Холост", либо "Не замужем".
Т.е. я бы сделал так:
1) Сделал на форме фильтрацию по данному енуму в заголовке. Там можно использовать стандартный перевод
2) Убрал бы само поле из отображения на форме (со всех закладок), а вместо него - выводил бы дисплей с соответствующим переводом
3) Ещё понадобится отдельная кнопка для ручной смены статуса. Там в диалоге уже можно использовать подменные енумы.

P.S. Можно ещё покопаться в классе FormComboBoxControl. Может быть, там найдётся инструмент подмены меток.
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 24.12.2010 в 12:59.
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 24.12.2010, 13:11   #14  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от pitersky Посмотреть сообщение
Строго говоря, нужно (в зависимости от пола) не два разных enuma, а два разных перевода значений енума.
В этом случае опять все упрется в сложность отображения енума в гриде. Ну либо это уже будет не енум, а текстовое значение. Формальный минус - лишимся сортировки в форме. Правда не сильно критично - при наличии фильтрации и возможности сортировать по исходному полю
__________________
Возможно сделать все. Вопрос времени
Старый 24.12.2010, 13:13   #15  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от kia Посмотреть сообщение
Получилось сделать как предложил samolalex, НО пришлось контрол отвязать от поля таблицы. И прийдется вручную присваивать значение полю.
Во! а это я тоже проходил. Но сразу не вспомнил. Тоже момент кстати. Т.е. едит-метод => без сортировки / фильтрации получился
__________________
Возможно сделать все. Вопрос времени
Старый 24.12.2010, 14:04   #16  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Zabr Посмотреть сообщение
А где дальше используется это значение "женат/замужем" ? Может проще было расширить enum: значение "женат/замужем" поменять на "женат", добавить новое "замужем", джобиком поменять значения для женщин.
В принципе, если к расширенному енуму создать EDT и на него навесить relation по значению пола, то можно получить отдельные списки по каждому полу. Другое дело, что такое расширение енума ИМХО неоправдано - состояние "в браке" от пола не зависит
__________________
С уважением,
Вячеслав
Старый 27.12.2010, 08:01   #17  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Переименовать метки у Enum на "состоит в браке/не состоит в браке"
В русском языке, слава богу, глаголы, являющиеся в фразе сказуемым к местоимению третьего лица, по родам не склоняются и почвы для дурных "хочушек" нет как таковой, равно как и не должно быть в таком случае никакого мозгоклюйства с заказчиками, имеющими сдвиг по фазе на почве гендерных различий.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подмена аналитик при разноске отборочной накладной evv DAX: Программирование 9 01.12.2010 13:52
RU5: Теперь при компиляции OfficialsTrans_RU ругается на BaseEnum OffReportType_RU::TransferInvoiceM15 propeller DAX: Программирование 14 23.09.2010 14:41
EDT или BaseEnum? Hezl DAX: Программирование 5 15.12.2004 10:40
метки в элементах BaseEnum-а Антон Солдатов DAX: Программирование 2 03.11.2003 13:50
Как динамически обратиться к свойствам елементов BaseEnum? if_maks DAX: Программирование 2 26.08.2003 16:15

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

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

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