• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Решено Поиск и отображение документа в представлении

  • Автор темы proteam
  • Дата начала
P

proteam

Всем привет.
Что имеем. Недавно досталась по наследству база одна, в ней есть представление А, отсортированное по полю, в котором содержится штрих код (поле текстовое, 12 цифр, к примеру: 100000000001). Так вот, пользователям отображается фреймсет, в котором два фрейма, один отображается представление А, во втором фрейме отображается документ для просмотра (установлено свойства показывать документ в таком то фрейме). Штрих код печатается на бумажке, который считывают сканером баркодов.
Проблема. Пользователь открывает представление А, подносит бумажку ко включенному сканеру, тот считывает код, автоматом находит документ и отображается его во втором фрейма. НО не всегда. Порой тупо не обновляет фрейм, показывая старый документ. Иногда вообще не ищет. Конечно чаще находит и открывает верный документ, но порой бывает три раза считываешь штрих код и не отображает все равно верный документ.
Сам собираюсь решать проблему так, сделать кнопку, которая считывает штрих код, находит документ и открывает его в отдельном окне. Но требуют объяснения, почему сейчас не работает, уверяя что раньше работало, а вот я пришел и что то сломал, хотя я придерживаюсь принципа: "работает и всем нравится - не трогай"
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
А почему нельзя посмотреть где глюк?
Что, дизайн закрыт?
Логика то простая.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
ну как предположение - КОМа впадает в кому ;) ибо, с высокой долей вероятности, сделано именно через неё
виновата винда, в кот (возможно после очередного апдейта) КОМа (сканерная) заглючила
 

duchan

Green Team
20.09.2006
127
11
BIT
96
Возможно, потому что считывание штриха сделано через эмуляцию клавиатуры, а фокус ввода при этом не в представлении со штрих кодами, а во втором фрейме. Посоветуйте пользователю, перед сканированием тыкать в представление где штрих коды, чтоб фокус туда перешел....
 
P

proteam

Возможно, потому что считывание штриха сделано через эмуляцию клавиатуры, а фокус ввода при этом не в представлении со штрих кодами, а во втором фрейме. Посоветуйте пользователю, перед сканированием тыкать в представление где штрих коды, чтоб фокус туда перешел....
Возможно. Да, сканер штрих кода сделан так, что он как бы эмитирует ввод с клавиатуры плюс в конец добавляется символ конца строки (аналогично если я сделаю ctrl+v и enter).
А вообще есть какие-нибудь заводские глюки при работе с представлением? Еще в представлении есть такое в PostOpen():

Set refreshView = New NotesTimer(10, "Elapsed time since opening document")
On Event Alarm From refreshView Call refreshViewHandler
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
есть какие-нибудь заводские глюки при работе с представлением?
Нету.
Set refreshView = New NotesTimer(10, "Elapsed time since opening document")
On Event Alarm From refreshView Call refreshViewHandler
Можно предположить, что на контроле время открытия дока из вьюшки: если прошло 10 сек., а док всё ещё открыт - alarm с рефрешем view (? -> Call refreshViewHandler).
Это в механизме поиска дока сканером, штоль?
 
P

proteam

Это в механизме поиска дока сканером, штоль?
Механизм поиска по сути на лотусе не реализован, используются стандартные способы поиска документа по представлению, т.е. вот вы открыли представление, отсортированное по какому то полю, просто вставляете значение (ctrl+v), которое является критерием для поиска, и лотус вам находит его и отображает. Сканер это всего лишь устройства ввода информации
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
вот вы открыли представление, отсортированное по какому то полю, просто вставляете значение (ctrl+v), которое является критерием для поиска
Вот нехорошо это, с учётом рефреша вьюшки по таймеру: непредсказуемые эффекты асинхронности событий рефреша и поиска и потери фокуса в представлении.
Здесь хорошо делать (ctrl+v) со сканера в поле "поиска" на форме и, по его изменению, автоматом лукапить док по этому ключу и открывать его как надо, а не опираться на неуправляемое здесь АПИ поиска по вьюшке.
К тому же, фокус в поле хорошо управляется, и по его наличию, можно индицировать юзверю, что доступен ввод со сканера.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
@proteam, делал я такую штуку, без всяких таймеров.
необходимо было логиниться в базу по штрихкоду.
Поэтому поле ввода для сканера было всегда на экране + выход через 10 минут простоя
+ пароль для "обхода"
 
P

proteam

@savl , а возможно ли сделать слушатель события для представления, или может в лотусе это есть уже, чтобы отловить то, что пользователь вводит как критерий для поиска. Не хотят нажимать кнопку или переводить курсор в область ввода, хотят чтобы как раньше, считали со сканера ШК находясь в представлении, и он сразу открыл документ.

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

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
@proteam, у меня было чуть проще.
На открытии базы стоит фреймсет, в фреймсетеидет вычисление:
Если админ, то открывать базу, если не админ, то открывать форму.
На форме javaScript таймер.
После открытия формы через 50 мс срабатывает нажатие кнопки.
В кнопке вызов
res = ws.Prompt(10, "Идентификация", "Поднесите штрих-код к сканеру")
если res = "", то диалог не исчезает.
А если вернул значение, то идет поиск по спец вьюхе.
Если документ нашелся, то он открывается на экране.

Тут вся суть в настройках сканера, у меня он был настроен по умолчанию: сканер возвращает последовательность символов штрихкода + символ новой строки (Enter).
И как результат, в поле ввода попадает штрихкод и нажимается кнопка ОК.
Слушатель представления не нужен.
Вот мой шаблон для входа: https://codeby.net/threads/49909/#post-234067
Прочтите всю дискуссию, чтобы было представление что именно я делал.
 
P

proteam

@savl , хороший пример для работы с таймерами, надо будет взять на заметку)
А так пример для меня не применим. У меня есть представление, я писал о нем в начале, сортированное по штрих коду. Мне нужно сделать так, чтобы пользователь мог открыть документ только считав штрих-код сканером, исключая ручной ввод цифр. При этом нельзя заставлять пользователя кликать на кнопку, он должен лишь поднести бумажку с ШК к сканеру и система должна открыть документ.:areyoukiddingme:
 

Leoric

Lotus Team
15.10.2003
66
9
BIT
16
@savl , хороший пример для работы с таймерами, надо будет взять на заметку)
А так пример для меня не применим. У меня есть представление, я писал о нем в начале, сортированное по штрих коду. Мне нужно сделать так, чтобы пользователь мог открыть документ только считав штрих-код сканером, исключая ручной ввод цифр. При этом нельзя заставлять пользователя кликать на кнопку, он должен лишь поднести бумажку с ШК к сканеру и система должна открыть документ.:areyoukiddingme:
Была примерно такая схема работы, но ушли из-за похожих проблем.
Если пользователям не надо видеть какие-либо данные во вьюхе (там только ШК), то советую вместо вида использовать форму с таймером.
На форме одно поле ввода, таймер(JS) и скрытая кнопка. По таймеру проверяется есть ли в конце поля перевод строки, если есть - ищем по виду и открываем в нужном фрейме документ.
Перевод строки мне лично был нужен т.к. пользователи могут вводить как ШК сканером, так и номер документа руками (+ автоматом ушла проблема когда сканер успевал ввести только половину ШК).

P.S. Если документ по ШК не нашли надо сказать про это пользователю, т.к. во втором фрейме останется старый и могут подумать ,что это открылся новый.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
@proteam, а вы базу смотрели?
Там если код даже и руками ввести, то если его нет диалог не исчезает.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
34
На форме одно поле ввода, таймер(JS) и скрытая кнопка. По таймеру проверяется есть ли в конце поля перевод строки, если есть - ищем по виду и открываем в нужном фрейме документ.
Тут лучше без таймера:
Поле для ШК -> Combobox, Choises - пусто, Allow values not in list - включить, Run Exiting/OnChange... - включить,
В OnChange - JS проверка на Enter, его удаление, кнопка.click(), очистка поля.
В кнопке - лукапим по ключу док и показываем в фрейме\ембедед едиторе, если гемор, то показываем там же пейдж с надписью "всё плохо"
Поле для ШК закрыть леером в цвет фона, поля видно не будет, а ввод туда будет возможен.
Юзеру дополнительно никаких действий не надо - только перевести фокус на форму ввода ШК (что кагбэ еквивалентно переводу фокуса на вью) и отсканировать ШК - дальше, автоматом, будет OnChange работать.
 
  • Нравится
Реакции: Leoric
P

proteam

@proteam, а вы базу смотрели?
Там если код даже и руками ввести, то если его нет диалог не исчезает.
Мне не надо чтобы он руками вообще вводил, только с помощью сканера.
@alexas1 , попробую. Только у меня пользователю доступны два фрейма, один с представлением, второй для отображения preview, я описывал ситуацию в начале темы. Мне желательно сохранить первоначальный вид.
Никогда еще не пробовал что то на JS писать в лотусе))) Видимо время пришло. Да и просто боюсь как бы все это не выросло в какую нибудь неуправляемую базу, все эти обходы, как бы скрытие поля для отображения)))
 
P

proteam

@proteam,
Так же возможен ручной ввод в поле
предлагают поле прикрыть и проверку на конец строки сделать...
Ну я все сейчас варианты буду пробовать, какой понравится тот и оставлю. Думаю еще попробовать убедить, что смысла нет делать защиту от ручного ввода. Мотив запрета такой, что пользователь может его запомнить, и потом уже без карточки сам просто ввести в поле. :facepalm:Ведь пользователь может тупо снять копию карточки))) и потом уже с копии считать. В общем мое дело искать решения. Спасибо всем откликнувшимся
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
может его запомнить
тупо снять копию карточки
Кому надо обмануть - обманет, его ничто не остановит.
Предложите еще тогда вложить деньги с систему считывателей магнитных:
Приложил карточку - открылся документ.
Программирование правда больше, система сложнее, но понадежней.
 
P

proteam

А теперь вопрос, просто я уже писал, с JS в лотусе не работал. Добавил я как предложил @alexas1 поле combobox, установил все свойства, но теперь как получить значение введенное в поле в методе onchange()?
 
Мы в соцсетях:

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