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

proteam

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

alexas1

Lotus team
10.04.2014
723
144
#2
А почему нельзя посмотреть где глюк?
Что, дизайн закрыт?
Логика то простая.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 567
263
#3
ну как предположение - КОМа впадает в кому ;) ибо, с высокой долей вероятности, сделано именно через неё
виновата винда, в кот (возможно после очередного апдейта) КОМа (сканерная) заглючила
 

duchan

Well-known member
20.09.2006
110
3
#4
Возможно, потому что считывание штриха сделано через эмуляцию клавиатуры, а фокус ввода при этом не в представлении со штрих кодами, а во втором фрейме. Посоветуйте пользователю, перед сканированием тыкать в представление где штрих коды, чтоб фокус туда перешел....
 

proteam

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

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

alexas1

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

proteam

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

alexas1

Lotus team
10.04.2014
723
144
#8
вот вы открыли представление, отсортированное по какому то полю, просто вставляете значение (ctrl+v), которое является критерием для поиска
Вот нехорошо это, с учётом рефреша вьюшки по таймеру: непредсказуемые эффекты асинхронности событий рефреша и поиска и потери фокуса в представлении.
Здесь хорошо делать (ctrl+v) со сканера в поле "поиска" на форме и, по его изменению, автоматом лукапить док по этому ключу и открывать его как надо, а не опираться на неуправляемое здесь АПИ поиска по вьюшке.
К тому же, фокус в поле хорошо управляется, и по его наличию, можно индицировать юзверю, что доступен ввод со сканера.
 

savl

Lotus team
28.10.2011
2 131
102
#9
@proteam, делал я такую штуку, без всяких таймеров.
необходимо было логиниться в базу по штрихкоду.
Поэтому поле ввода для сканера было всегда на экране + выход через 10 минут простоя
+ пароль для "обхода"
 

proteam

Well-known member
02.03.2012
144
1
#10
@savl , а возможно ли сделать слушатель события для представления, или может в лотусе это есть уже, чтобы отловить то, что пользователь вводит как критерий для поиска. Не хотят нажимать кнопку или переводить курсор в область ввода, хотят чтобы как раньше, считали со сканера ШК находясь в представлении, и он сразу открыл документ.

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

savl

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

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

proteam

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

Leoric

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

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

savl

Lotus team
28.10.2011
2 131
102
#14
@proteam, а вы базу смотрели?
Там если код даже и руками ввести, то если его нет диалог не исчезает.
 

alexas1

Lotus team
10.04.2014
723
144
#15
На форме одно поле ввода, таймер(JS) и скрытая кнопка. По таймеру проверяется есть ли в конце поля перевод строки, если есть - ищем по виду и открываем в нужном фрейме документ.
Тут лучше без таймера:
Поле для ШК -> Combobox, Choises - пусто, Allow values not in list - включить, Run Exiting/OnChange... - включить,
В OnChange - JS проверка на Enter, его удаление, кнопка.click(), очистка поля.
В кнопке - лукапим по ключу док и показываем в фрейме\ембедед едиторе, если гемор, то показываем там же пейдж с надписью "всё плохо"
Поле для ШК закрыть леером в цвет фона, поля видно не будет, а ввод туда будет возможен.
Юзеру дополнительно никаких действий не надо - только перевести фокус на форму ввода ШК (что кагбэ еквивалентно переводу фокуса на вью) и отсканировать ШК - дальше, автоматом, будет OnChange работать.
 
Симпатии: Понравилось Leoric

proteam

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

proteam

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

savl

Lotus team
28.10.2011
2 131
102
#19
тупо снять копию карточки
Кому надо обмануть - обманет, его ничто не остановит.
Предложите еще тогда вложить деньги с систему считывателей магнитных:
Приложил карточку - открылся документ.
Программирование правда больше, система сложнее, но понадежней.
 

proteam

Well-known member
02.03.2012
144
1
#20
А теперь вопрос, просто я уже писал, с JS в лотусе не работал. Добавил я как предложил @alexas1 поле combobox, установил все свойства, но теперь как получить значение введенное в поле в методе onchange()?