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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.02.2012, 16:37   #1  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
StringEdit == Динамическая строка поиска
Здравствуйте коллеги.
Вопрос в следующем, загорелось мне сделать в аксапте всплывающее окошко для выбора пользователя системы. Стандартное показалось жутко неудобным, решил его доработать.
Пожелания:
  1. Добавить кнопку чтобы указывать себя (по аналогии как в датах кнопка сегодня).
  2. Добавить возможность фильтровать список по части имени
  3. Сохранять текущие настройки для следующего выбора.

С первым и последним пунктом сложностей не возникло. А вот во втором все сделал с фильтрацией по modify() на StringEdit. Но не очень удобно, надо набирать текст и нажимать кнопку отфильтровать, или куда то переключиться, но окно лукап, поэтому вроде как не совсем удобно. Решил обновлять перечень записей при изменении значения в StringEdti. Попробовал завязаться на метод changeText(), но после того как он отрабатывает делаю executeQuery по источнику и фокус возвращается обратно на StringEdit c выделением всего текста. Выходит набрал букву, записи отфильтровались, текст в StringEdit выделился целиком, набираешь следующую все что было до этого стирается и имеем новый фильтр из последней буквы.
Как можно победить сие?

Ну и вопрос в догоночку, никто не знает лукап для ввода времени)?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 27.02.2012, 17:01   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от KingPeas Посмотреть сообщение
  1. ...
  2. Добавить возможность фильтровать список по части имени
  3. ...
а чем неподходит стандартный поиск в текстовом поле в звездочках?
(а*, или *а, или *а*)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 27.02.2012, 17:50   #3  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Ну собственно я так и делаю, введенный текст накладываю как фильтр *а*. Хотелось сделать имитацию быстрого поиска.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 27.02.2012, 19:06   #4  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
У меня не получилось победить эту проблему, никак выделение не хотело убираться из кода, только руками. Даже винапи не помог.
Пришлось оставить эту идею...
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 28.02.2012, 03:15   #5  
Polgid is offline
Polgid
Участник
 
11 / 28 (1) +++
Регистрация: 07.05.2010
Для того чтобы избежать выделения всего текста фильтра после changeText() нужно перекрыть метод enter на контроле:

public void enter()
{;
super();

this.setSelection(
strlen(this.text()),
strlen(this.text()));
}
За это сообщение автора поблагодарили: Link (2).
Старый 28.02.2012, 06:20   #6  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
:)
Все получилось) Спасибо за советы. Перекрыл два метода и все заработало.
X++:
public void textChange()
{
    ;
    super();
    [lastPosFrom, lastPosTo] = this.getSelection();
    userInfo_ds.executeQuery();
}
X++:
public void enter()
{
    super();
    this.setSelection(lastPosFrom, lastPosTo);

}
Разумеется не советую делать такое для таблиц без кэширования, не то кроме траты нервов от работы с такой формой ничего не получишь.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 28.02.2012, 08:08   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А механизм SearchMode = "Search On Typing" вам не подходит?
За это сообщение автора поблагодарили: KingPeas (1).
Старый 28.02.2012, 08:16   #8  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Натыкался при поиске, но так и не понял как работает данная настройка.
Поэкспериментировал, ищется запись если контрол связан с источником данных и ищет по начальному значению с переходом к данной записи без удаления из списка других записей. Добавил к себе на форму, может кому тоже так будет удобней).

Я себе ставил задачу поиск по части текста с фильтрацией количества записей, поэтому это несколько другое

Приложил результат, может кому пригодиться. В верху кнопка очистка фильтра, два фильтра по коду и по имени, список пользователей и внизу две кнопки выбрать себя и отмена. Выбор из списка по двойному клику.
Вложения
Тип файла: xpo ExtendedType_UserIdLookUp.xpo (14.5 Кб, 283 просмотров)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.

Последний раз редактировалось KingPeas; 28.02.2012 в 09:08.
Старый 28.02.2012, 14:46   #9  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А механизм SearchMode = "Search On Typing" вам не подходит?
К сожалению эта функция не работает так, как хотелось бы. Даже казалось бы в таком простом случае, как поиск по ключу, который не редактируется, этот вариант уже не будет работать.

К тому же очень удобно иметь возможность поиска по любому участку искомой строки и самому определять логику поиска.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 28.02.2012, 22:24   #10  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
По моему для поиска по фамилии в карточке вполне подходит) Я использовал оба метода)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 28.02.2012, 22:58   #11  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Добавлю полезную фичу )
Для своего поискового поля отлавливайте нажатия клавиш ArrowUp\Down. Набрав часть имени в фильтре и получив по маске несколько строк результата, у вас дополнительно появится возможность клавишами вверх\вниз спозиционироваться на нужную строку. Это очень очень удобно для привыкших работать с клавиатурой.

для этого вам понадобится ф-я element.installMessageProc():

метод init() формы:
X++:
public void init()
{
    super();

    this.installMessageProc(#WM_KEYDOWN, editfilterControlName.hWnd(), identifierstr(onEventKeyDown));

}
метод onEventKeyDown():
X++:
void onEventKeyDown(anyType _a     = '',
                    anyType _b     = '',
                    anyType _vkKey = '',
                    anyType _d     = '',
                    anyType _e     = '',
                    anyType _f     = '')
{
    ;

    switch (_vkKey)
    {
        case #arrowUp:
            table_ds.prev();
            break;
        case #arrowDown:
            table_ds.next();
            break;
        default:
            break;
    }
}
Пример можно посмотреть:
http://earlionakru.blogspot.com/2009_02_01_archive.html
Где же это поле?! (Form digger)
За это сообщение автора поблагодарили: KingPeas (2), S.Kuskov (5).
Старый 29.02.2012, 03:29   #12  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от KingPeas Посмотреть сообщение
Ну собственно я так и делаю, введенный текст накладываю как фильтр *а*. Хотелось сделать имитацию быстрого поиска.
Поля по которым можно искать не будут сохраняться. Хотя можно менять значение. Так что только на лукапе имеет смысл использовать.
А вот быстрый поиск по части строки это то что нужно, теперь можно снабдить пользователей нормальными фильтрами!
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 29.02.2012, 03:33   #13  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Да формдиггер отличная тулза, спасибо что поделились. Бережет глаза особенно в браузере таблицы с большим количеством полей. Жаль что не поддерживается.
Есть желание прикрутить ее функционал к поисковой строке табакса, и сделать её умной, что бы искала по активной форме и по части строки Как только появится время займусь. Буду делать плагином.
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 29.02.2012, 22:35   #14  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Добавлю полезную фичу )
Для своего поискового поля отлавливайте нажатия клавиш ArrowUp\Down. Набрав часть имени в фильтре и получив по маске несколько строк результата, у вас дополнительно появится возможность клавишами вверх\вниз спозиционироваться на нужную строку. Это очень очень удобно для привыкших работать с клавиатурой.

для этого вам понадобится ф-я element.installMessageProc():

метод init() формы:
X++:
public void init()
{
    super();

    this.installMessageProc(#WM_KEYDOWN, editfilterControlName.hWnd(), identifierstr(onEventKeyDown));

}
метод onEventKeyDown():
X++:
void onEventKeyDown(anyType _a     = '',
                    anyType _b     = '',
                    anyType _vkKey = '',
                    anyType _d     = '',
                    anyType _e     = '',
                    anyType _f     = '')
{
    ;

    switch (_vkKey)
    {
        case #arrowUp:
            table_ds.prev();
            break;
        case #arrowDown:
            table_ds.next();
            break;
        default:
            break;
    }
}
Пример можно посмотреть:
http://earlionakru.blogspot.com/2009_02_01_archive.html
Где же это поле?! (Form digger)
Прикрутил. Выбор для такого перехода сделал по Enter. Единственное в самом гриде Enter не работает, но вроде это не так уж и нужно, там можно по двойному клику перейти.
Вложения
Тип файла: xpo ExtendedType_UserIdLookUp.xpo (16.4 Кб, 322 просмотров)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
Старый 29.02.2012, 22:36   #15  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Цитата:
Сообщение от Link Посмотреть сообщение
Поля по которым можно искать не будут сохраняться. Хотя можно менять значение. Так что только на лукапе имеет смысл использовать.
А вот быстрый поиск по части строки это то что нужно, теперь можно снабдить пользователей нормальными фильтрами!
Поля сохраняются и восстанавливаются через xSysLastValue)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.

Последний раз редактировалось KingPeas; 29.02.2012 в 22:40.
Старый 02.03.2012, 05:28   #16  
KingPeas is offline
KingPeas
Участник
Аватар для KingPeas
 
163 / 35 (2) +++
Регистрация: 09.01.2007
Адрес: Россия, Новосибирск
Добавил на форму галочку для отлючения автоматического сохранения настроек.

В первом поле можно набирать для быстрого поиска код пользователя, во втором наименование. При этом внизу автоматически идет сортировка по набранному тексту *текст*. При помощи стрелок вверх и вниз перемещаться по списку оставаясь в поле поиска и выбирать текущую запись для передачи по Enter. Для сброса фильтра используется кнопка рядом с полями. Выбор из списка может быть выполнен мышкой, двойным кликом по записи в таблице. Также внизу присутствует три кнопки для выбора себя (как сегодня в выборе даты), текущей записи и отказаться от выбора. Если отмечен признак Помнить то текущие настройки сохраняются для формы при закрытии и при повторном вызове будут восстановлены.
Вложения
Тип файла: xpo ExtendedType_UserIdLookUp.xpo (17.8 Кб, 270 просмотров)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ.
За это сообщение автора поблагодарили: Dino (0).
Теги
поиск, фильтр

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Потеря фокуса при вызове формы поиска Paul_ST DAX: Программирование 21 03.08.2022 15:12
Как программно "выделить" объект AOT? Или про глюки на открытии формы поиска gl00mie DAX: Программирование 4 15.02.2012 18:20
Несинхронность размерности полей в форме поиска... glibs DAX: Функционал 0 05.04.2010 21:54
Ruslan Goncharov: Dynamic enabled() property for StringEdit and arrows Blog bot DAX Blogs 0 18.04.2008 20:05
aEremenko: Эмуляция поиска по всем таблицам Blog bot DAX Blogs 0 10.10.2007 22:52
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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