• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Решено Поиск в окне выбора

  • Автор темы beloff
  • Дата начала
A

alexas

Смотря что искать, на мой взгляд такой механизм удобен не для поиска документов по базе, а для выбора справочных значений....
Поиск доков по базе тоже можно: при формировании поисковой строки производится контроль ее длины. Если строка может получится больше 32К - добавление данных к строке прекращается и выводится сообщение "Найдено слишком много данных, не все результаты поиска показаны. Введите дополнительные символы" (прямо на форму, msgbox, как показала практика, юзеров раздражает).
Поиск, у меня, начинается с 2 символов и предупреждение выскакивает крайне редко, а коллекции обрабатываются достаточно большие - больше 100К доков (в основном применяется "Нечеткий поиск")
 
A

anna

Pardon Me
P.S. поправил Баг
Убрал кнопку "OK". Список с выбором теперь закрывается при потери фокуса на леере (Табом, как все привыкли, или мышкой)
Все, это релиз :) . Больше ничего делать не буду.
А что делать, если список контрагентов очень большой (скажем, 10000), хотят искать по любому совпадению части счета названия и выводить сортируя по дате? И пиклист не пойдет, и такой, как у Вас, поиск не сработает - у textlist ограничения. а?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
181
Full text index построить для базы.
Далее прямо в представлении, в верхнем меню View -> Search in this view
в панели, которая появилась вводим запрос и ждем
Затем смотрим результаты.
 

erdi

Green Team
20.08.2008
264
17
BIT
0
касательно предложенной формы поиска...
не обязательно весь список всех возможных значений засовывать сразу в 1 поле. у меня, например за это отвечает функция, которая уже ищет некий массив значений, сортирует, фильтрует и т.д. и на выходе помещает некий список уже в поле возможных значений
для большого кол-ва документов поиск идет через FTSearch( query$, maxdocs). maxdocs я ограничил 40 или 60 позиций. Больше нет смысла, т.к. на экране не влезет и листать на клавиатуре дольше нежели ввести еще 1-2 новых символа
на 5000 поиск почти мгновенный
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
А что делать, если список контрагентов очень большой (скажем, 10000), хотят искать по любому совпадению части счета названия и выводить сортируя по дате? И пиклист не пойдет, и такой, как у Вас, поиск не сработает - у textlist ограничения. а?
Предложенное - ускорение ввода инфы из справочников.
Потом, поиск глазьями, что в листбоксе, что в виде, в списке из 1000 напр. записей - тот ещё изврат.
В вашем случае я бы делал так (примерно, как поиск в Гугле, только удобней):
Разбить задачу на 2
1 предварительный поиск (FTSearch, GetColumnValues + Like, или чо хочется, с кешированием источника (колонки значений) и\или коллекции-результата в глобале. ) с показом кол-ва найденных доков и, одновременно, показом первых найденных (к примеру, десяток) в SPOFU (не в листбоксе) или в обычной таблице (со скрытием пустышек. Акции по строкам - хотспотами)
Это на лету, в процессе ввода. Всё будет шустро (только в папку записывать сразу ВСЕ доки, а не как в примере хелпа - последовательно)

2 юзверь видит, сколько нашлось и решает, что это его удовлетворяет и давит ентер - всё найденное попадает в тот же SPOFU (опять ВСЮ коллекцию чохом).
FTSearch даст коллекцию, сортированную по релевантности (это плохо, в вашем случае), а показ её в папке автоматом отсортирует как надо, что хорошо. ColumnValues или беготня по энтрисам даст ту же сортировку, что и в виде.
Дальше обрабатывается ентер или двойной клик на доке в папке (View|Queryopendocument\Continue = False\и чо надо ...)
Что и требовалось. Никаких ограничений нет.
 
Последнее редактирование модератором:

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
Хотелось, всё же заканчивать поиск энтером. Поэтому сабж обновился.
Что нового:
ENTER в поле поиска - ввод нового значения (не из найденного)
Переход к списку найденного - стрелка вниз.
ENTER и LeftDblClick в списке найденного - записать выбор.
Показ кол-ва найденного.
Упростил логику.
Больше JS (для быстродействия)
Х - отменяет выбор и восстанавливает строку выбора, с которой перешли в листбокс.

Теперь, кто любит клаву, может работать без мыша.
Эмуляция события EnterDown & DblClick - хуком в винде. Такшта - вин онли.
Хук оформлен экзешником и приаттачен в эбаут датабазе (детачится туда же, где и сама база, при открытии формы, если его ещё нет).
Управление хуком - командная строка (хелп - при запуске экзешника без параметров).
Хук работает только в том окне, в котором его запустили (т.е. не мешает одновременно работать в других доках).
Имя может быть любым. Такшта может быть запущено несколько экземпляров - работают независимо.
Приятный ключик NoEnter - игнорировать энтер в редактируемых полях (сильно раздражает перевод строки, где не надо).
В примере, подгрузка данных (из 32768 доков) через GetColumnValues. Такшта работает только в Notes 8 и 9.
Подгрузка ПОСЛЕ показа формы (чтоб не раздражать юзверя возможной задержкой открытия)
Лимит - 32768 доков в виде (больше в массив не запихнуть). Эт всяко лучше, чем FTsearch с его лимитом в 5000.
Загрузка макс. кол-ва доков около 2с.
Первоначальный поиск (1 - 2 символа, 32768 доков) - около 0,5 с. Дальше на порядок шустрее (поиск кешируется).

Пример показа доп инфы из дока для выбранной строки.
Строка выбора может иметь префикс, заканчивающийся на {` } (без кавычек, т.е префикс, апостроф, пробел, строка для поиска). Напр.для показа даты (или ещё чего). В листбоксе показывается, а в выбор не попадает.
Поиск - по совпадению с начала любого слова в строке.
Легко модифицируется для поиска с начала строки или в любом месте любого слова.

Код до конца не причёсан (можно, кое где, заменить бэкэндные методы на уишные).
На первом старте надо чуть подождать, пока построится индекс вида. Потом шустро.
 

Вложения

  • LiveSearchNew.zip
    416,9 КБ · Просмотры: 319
  • Нравится
Реакции: DNT и savl

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
если проверять платформу, то можно сделать кроссрешение
для Win хук, для остальных как было
Ну да, несложно.
Мож кто подскажет мысль, как подойти к никсам (я там практически валенок) - тогда мак и льнь добью.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
37
Сорри :(, в JS Header, вторая строчка сверху: var f = document.forms[0];
- надо так: var f = window.document.forms[0];
 

imendan

Green Team
22.09.2010
159
4
BIT
0
Возможно получить исходники hooknew.exe? Уж очень-очень интересная вещь. Было бы полезно изучить ее.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!