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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.09.2017, 13:51   #1  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
48 / 37 (2) +++
Регистрация: 14.05.2005
https://community.dynamics.com/ax/b/...n-time-ax-2012
Извиняюсь, если не увидел повторы. Но этого способа вроде бы нигде в смежных темах не встретил. Если линк умрёт, просто оставлю здесь кусок кода на память... Метод enter() контрола, у которого нужно укоротить лукап, путём скрытия элементов. Работает на гридах и с полями, типа BaseEnum без необходимости подмены поля edit-методом и дальнейшими танцами вокруг перекрытия lookup() ....
X++:
public void enter()
{
 super();
 this.delete(enum2str(BankDocumentType::LetterOfGuarantee));
 this.delete(enum2str(BankDocumentType::ImportCollection)); 
}
За это сообщение автора поблагодарили: Jorj (1), olesh (1), trud (5), Weez (2), Ace of Database (3), Zabr (5), miaa (1), Dynamics365Eng (1).
Старый 02.10.2017, 12:47   #2  
A_BAS is offline
A_BAS
Участник
Аватар для A_BAS
 
77 / 48 (2) +++
Регистрация: 19.04.2012
Цитата:
https://community.dynamics.com/ax/b/...n-time-ax-2012
Извиняюсь, если не увидел повторы. Но этого способа вроде бы нигде в смежных темах не встретил. Если линк умрёт, просто оставлю здесь кусок кода на память... Метод enter() контрола, у которого нужно укоротить лукап, путём скрытия элементов. Работает на гридах и с полями, типа BaseEnum без необходимости подмены поля edit-методом и дальнейшими танцами вокруг перекрытия lookup() ....
Индус из блога очень удачно подобрал пример. Если убирать значения enum "с хвоста", то все работает как надо.
А вот если выдернуть значение из середины например LetterOfCredit (enumValue = 1), то при выборе значения начинаются чудеса. Происходит сдвиг и при выборе например LetterOfGuarantee (enumValue = 2) на деле выбирается значение 1, а при выборе ImportCollection (3) выбирается значение 2.
Имхо, вышеприведенный метод нужно использовать аккуратно, а лучше совсем не использовать
Старый 02.10.2017, 14:10   #3  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
48 / 37 (2) +++
Регистрация: 14.05.2005
Соглашусь отчасти. Если элементы с конца - всё идеально. и никакой доработки не нужно вообще. Почему бы и не использовать?

Если элемент один (или группа элементов подряд) посреди списка, наверное всё ещё имеет смысл - в gotFocus() подменить this.setEditText() и в modified() записывать в поле всё со сдвигом с нужного элемента.

Ну а если писать что-то универсальное на любое количество элементов в любом месте списка - то тут соглашусь - лучше не надо...
Старый 02.10.2017, 14:40   #4  
A_BAS is offline
A_BAS
Участник
Аватар для A_BAS
 
77 / 48 (2) +++
Регистрация: 19.04.2012
Цитата:
Сообщение от Krasher Посмотреть сообщение
Соглашусь отчасти. Если элементы с конца - всё идеально. и никакой доработки не нужно вообще. Почему бы и не использовать?
Ну потому что после добавления нового значения в enum (при активной кастомизации это вполне вероятно) есть риск "забыть" исправить лукап на форме и заиметь проблемы с корректностью введенных данных (если enum прицеплен к полю).

Ну а насчет перекрыть и подправить... Оно конечно можно, но это опять же с бубном плясать.
Старый 03.10.2017, 07:00   #5  
mdanko2000 is offline
mdanko2000
Участник
 
44 / 40 (2) +++
Регистрация: 21.04.2014
На форме можно сделать стандартными средствами, обсуждалось несколько позже начала данного топика.
Есть класс SysFormEnumComboBox:
X++:
/// The class facilitates work with a form combobox control, representing an enum,
/// when only some of the enum values are allowed.
За это сообщение автора поблагодарили: trud (6).
Старый 04.10.2017, 12:13   #6  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
48 / 37 (2) +++
Регистрация: 14.05.2005
Цитата:
Сообщение от mdanko2000 Посмотреть сообщение
На форме можно сделать стандартными средствами, обсуждалось несколько позже начала данного топика.
Есть класс SysFormEnumComboBox:
X++:
/// The class facilitates work with a form combobox control, representing an enum,
/// when only some of the enum values are allowed.
В SysFormEnumComboBox всё прекрасно, только он имеет вот такую особенность... "P.S. It is also worth mentioning, that this class does not provide support for grids. It requires a stand-alone control, not bound to a database table field". Из-за чего и танцы...
Старый 04.10.2017, 13:06   #7  
A_BAS is offline
A_BAS
Участник
Аватар для A_BAS
 
77 / 48 (2) +++
Регистрация: 19.04.2012
Коли уж зашла речь про бубны, то еще один вариант ограничить выборку значений enum - SysLookup::lookupEnum(). Второй параметр метода - контейнер с исключаемыми значениями.
Для использования этого метода требуется создавать текстовое поле/edit-метод/calculated field (вобщем FormStringControl) и соответственно прописывать сохранение значений в поле с enum.
В гриде оно кстати работает. В общем - куда ни плюнь - без шаманства никак
Теги
baseenum, lookup filter, шаманство

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Выбираем Enum, меняется Lookup, как правильней закодить? Shakr DAX: Программирование 23 21.08.2008 09:04
gatesasbait: How to define a custom lookup form for an extended datatype Blog bot DAX Blogs 0 09.07.2008 22:05
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Можно ли к полю в диалоге прикрутить фильтр? KiselevSA DAX: Программирование 3 29.05.2007 09:51
Как сделать свою Web-lookup форму? brm DAX: Программирование 8 23.03.2005 13:03

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

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

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