29.05.2015, 10:56 | #1 |
Участник
|
Как Ограничить enum?
Добрый день, поставили задачу ограничить поля выбора в enum. В голове крутиться - создать новый enum, или выводить сообщение о невозможности выбора определенного пункта, или переопределить как то lookup . Как лучше сделать? Поделитесь опытом, пожалуйста!
|
|
29.05.2015, 11:00 | #2 |
Участник
|
если в конкретном месте необходимо ограничение, то лучше проверку сделать. если по всей системе ограничить, то можно конфигурационным ключем выключить
|
|
|
За это сообщение автора поблагодарили: АртемМелихов (1). |
29.05.2015, 11:17 | #3 |
Участник
|
М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 |
Участник
|
|
|
29.05.2015, 12:27 | #5 |
Участник
|
Свойство ConfigurationKey есть не только у самого enuma но и у отдельных элементов enuma.
|
|
29.05.2015, 12:31 | #6 |
Участник
|
|
|
29.05.2015, 12:42 | #7 |
Участник
|
|
|
29.05.2015, 12:55 | #8 |
Участник
|
|
|
29.05.2015, 13:05 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Logger (1). |
29.05.2015, 13:12 | #10 |
Участник
|
|
|
29.05.2015, 13:13 | #11 |
Участник
|
Если ограничения нужны не в одной конкретной форме, а "вообще", то
Создать таблицу с ключевым полем Enum нужного типа и на нее сделать соответствующий EDT и форму LookUp. Идея в том, что на записи таблицы, в отличие от Enum можно установить контроль доступа на уровне записи. Кроме того, можно добавить дополнительные поля, как доп.реквизиты. В общем, вместо Enum создать полноценный справочник
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: АртемМелихов (1). |
29.05.2015, 13:19 | #12 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Если ограничения нужны не в одной конкретной форме, а "вообще", то
Создать таблицу с ключевым полем Enum нужного типа и на нее сделать соответствующий EDT и форму LookUp. Идея в том, что на записи таблицы, в отличие от Enum можно установить контроль доступа на уровне записи. Кроме того, можно добавить дополнительные поля, как доп.реквизиты. В общем, вместо Enum создать полноценный справочник |
|
10.11.2015, 11:00 | #13 |
Участник
|
Есть штатные способы реализации "от обратного" для unbound-контролов в 2012 AX, где Мы указываем не перечень элементов необходимых для отображения, а те, которые необходимо скрыть.
В 2012 в SysLookup::lookupEnum была добавлена переменная-контейнер пропускающая элементы входящие в него. В форме SalesEditLines ( SalesEditLinesForm / setupSumByControl ) можно увидеть аналогичный подход. Однако, хочется такой же магии для bound-контролов. |
|
03.07.2024, 11:14 | #14 |
Участник
|
Тоже недавно ковырялся с данной проблемой.
Мои варианты решения, на основе советов из данной темы: 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, ограничить |
|
|