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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2015, 10:56   #1  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Как Ограничить enum?
Добрый день, поставили задачу ограничить поля выбора в enum. В голове крутиться - создать новый enum, или выводить сообщение о невозможности выбора определенного пункта, или переопределить как то lookup . Как лучше сделать? Поделитесь опытом, пожалуйста!
Старый 29.05.2015, 11:00   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
если в конкретном месте необходимо ограничение, то лучше проверку сделать. если по всей системе ограничить, то можно конфигурационным ключем выключить
За это сообщение автора поблагодарили: АртемМелихов (1).
Старый 29.05.2015, 11:17   #3  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Мoжно вот так
http://kashperuk.blogspot.co.nz/2008...lowing-to.html
или http://blogs.msdn.com/b/oleksandr_na...r-an-enum.aspx

Последний раз редактировалось skuull; 29.05.2015 в 11:19.
За это сообщение автора поблагодарили: Logger (3), Товарищ ♂uatr (1), АртемМелихов (1).
Старый 29.05.2015, 12:23   #4  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Сообщение от ice Посмотреть сообщение
если в конкретном месте необходимо ограничение, то лучше проверку сделать. если по всей системе ограничить, то можно конфигурационным ключем выключить
Вы не поняли, мне нужно не весь enum блокировать, а некоторые варианты одного enuma.
Старый 29.05.2015, 12:27   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,435 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Свойство ConfigurationKey есть не только у самого enuma но и у отдельных элементов enuma.
Старый 29.05.2015, 12:31   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Вы не поняли, мне нужно не весь enum блокировать, а некоторые варианты одного enuma.
я вас прекрасно понял
Старый 29.05.2015, 12:42   #7  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Сообщение от ice Посмотреть сообщение
я вас прекрасно понял
Спасибо, прошу прошения. А если обсуждать вариант "конкретное место", то о какой проверке идет речь? После выбора выдавать сообщение о невозможности выбора?
Старый 29.05.2015, 12:55   #8  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Спасибо. По-моему, это решения для ax3-9. Может быть в 12 это уже реализовано?
Старый 29.05.2015, 13:05   #9  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Спасибо. По-моему, это решения для ax3-9. Может быть в 12 это уже реализовано?
SysFormEnumComboBox работает и в 2012, только в качестве второго параметра нужно
X++:
element.controlId(formControlStr(MyForm, MyComboBox))
За это сообщение автора поблагодарили: Logger (1).
Старый 29.05.2015, 13:12   #10  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Спасибо, прошу прошения. А если обсуждать вариант "конкретное место", то о какой проверке идет речь? После выбора выдавать сообщение о невозможности выбора?
Да, проверять введенное значение и выдавать ошибку
Старый 29.05.2015, 13:13   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,686 / 1189 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если ограничения нужны не в одной конкретной форме, а "вообще", то

Создать таблицу с ключевым полем Enum нужного типа и на нее сделать соответствующий EDT и форму LookUp. Идея в том, что на записи таблицы, в отличие от Enum можно установить контроль доступа на уровне записи. Кроме того, можно добавить дополнительные поля, как доп.реквизиты.

В общем, вместо Enum создать полноценный справочник
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: АртемМелихов (1).
Старый 29.05.2015, 13:19   #12  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Если ограничения нужны не в одной конкретной форме, а "вообще", то

Создать таблицу с ключевым полем Enum нужного типа и на нее сделать соответствующий EDT и форму LookUp. Идея в том, что на записи таблицы, в отличие от Enum можно установить контроль доступа на уровне записи. Кроме того, можно добавить дополнительные поля, как доп.реквизиты.

В общем, вместо Enum создать полноценный справочник
Такая таблица уже есть SRSANALYSISENUMS правда она не для того но и заморачивать контролем доступа к значением enum похоже на перегиб
Старый 10.11.2015, 11:00   #13  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
296 / 854 (29) +++++++
Регистрация: 23.10.2012
Есть штатные способы реализации "от обратного" для unbound-контролов в 2012 AX, где Мы указываем не перечень элементов необходимых для отображения, а те, которые необходимо скрыть.
В 2012 в SysLookup::lookupEnum была добавлена переменная-контейнер пропускающая элементы входящие в него.
В форме SalesEditLines ( SalesEditLinesForm / setupSumByControl ) можно увидеть аналогичный подход.
Однако, хочется такой же магии для bound-контролов.
Старый 03.07.2024, 11:14   #14  
DS26 is offline
DS26
Участник
 
2 / 14 (1) ++
Регистрация: 08.10.2014
Тоже недавно ковырялся с данной проблемой.

Мои варианты решения, на основе советов из данной темы:

1) Изменить контрол формы на string и перекрыть lookup. Для этого можно использовать SysLookup::lookupEnum
Проблемы данного решения в том, что проблематично оставить на нем фильтрацию, так как данный контрол будет edit методом и тогда пользовательские фильтры можно будет делать только через отдельную кнопку или поле-фильтр.

2) Самый простой вариант, навесить проверки на выбор значения и выдавать ошибку, если пользователь выбрал неподходящий элемент enum.

3) Если же все таки необходимо скрыть значения enum при выборе, можно посмотреть, как реализован класс SalesPurchSummarySumByCtrl и вариант его использования в SalesEditLinesForm.setupSumByControl(). В нем создаются мапы с соответствием index элемента контрола и id enum. И при выборе элемента можно через map посмотреть, какое значение необходимо вписать в итоговую таблицу.
Какие есть проблемы в нем: при повторном установке курсора аксапта, думая, что она привязана к enum, будет пытаться обновить index не из сформированного программно списка, а из enum по названию. И, поэтому, выбор визуально будет "скакать". Но, это только визуально. Если перейти на другую строку, либо выбрать новое значение, то все подставится корректно. Победить это у меня не получилось, так как lookup на FormComboBoxControl не вызывается, а других точек входа - нет. А в стандарте нет такой проблемы, потому что их элемент - последний в списке выбора
Еще, возможно проблема, не тестировал - как отрабатывают modifiedField и validateField на форме, когда мы так подменяем значения. Поэтому, я их перекрыл и переписал, чтоб точно быть уверенным что они вызовутся.
И, данный класс сделан для конкретного enum. Можно написать аналогичный класс под себя, сделав его общим, отвязав от конкретного enum, передавая enumId. Он тогда будет похож на SysFormEnumComboBox, который в теме тоже предлагался, но, SysFormEnumComboBox - у меня не взлетел, поэтому я написал свой
За это сообщение автора поблагодарили: Logger (3), Alucardkds (1).
Теги
ax2012, enum, ограничить

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DeniZone: Assigning enum value to variable from enum name Blog bot DAX Blogs 0 17.04.2015 23:11
Как получить из элемента enum-а код типа (enum-а)? Romb DAX: База знаний и проекты 12 27.06.2013 16:17
saveenr: More AX SSRS Screencasts and Instructions on Getting an AX Enum into a Report Blog bot DAX Blogs 0 09.12.2010 02:13
Странный баг при расширении Enum DTD DAX: Программирование 1 07.05.2009 18:45
ComboBox и Enum ArturK DAX: Программирование 1 01.03.2004 16:19

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.