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

Тема в разделе "Lotus - Программирование", создана пользователем proteam, 1 июн 2015.

  1. proteam

    proteam Well-Known Member

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

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    А почему нельзя посмотреть где глюк?
    Что, дизайн закрыт?
    Логика то простая.
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    ну как предположение - КОМа впадает в кому ;) ибо, с высокой долей вероятности, сделано именно через неё
    виновата винда, в кот (возможно после очередного апдейта) КОМа (сканерная) заглючила
     
  4. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    106
    Симпатии:
    3
    Возможно, потому что считывание штриха сделано через эмуляцию клавиатуры, а фокус ввода при этом не в представлении со штрих кодами, а во втором фрейме. Посоветуйте пользователю, перед сканированием тыкать в представление где штрих коды, чтоб фокус туда перешел....
     
  5. proteam

    proteam Well-Known Member

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

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

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Нету.
    Можно предположить, что на контроле время открытия дока из вьюшки: если прошло 10 сек., а док всё ещё открыт - alarm с рефрешем view (? -> Call refreshViewHandler).
    Это в механизме поиска дока сканером, штоль?
     
  7. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Механизм поиска по сути на лотусе не реализован, используются стандартные способы поиска документа по представлению, т.е. вот вы открыли представление, отсортированное по какому то полю, просто вставляете значение (ctrl+v), которое является критерием для поиска, и лотус вам находит его и отображает. Сканер это всего лишь устройства ввода информации
     
  8. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Вот нехорошо это, с учётом рефреша вьюшки по таймеру: непредсказуемые эффекты асинхронности событий рефреша и поиска и потери фокуса в представлении.
    Здесь хорошо делать (ctrl+v) со сканера в поле "поиска" на форме и, по его изменению, автоматом лукапить док по этому ключу и открывать его как надо, а не опираться на неуправляемое здесь АПИ поиска по вьюшке.
    К тому же, фокус в поле хорошо управляется, и по его наличию, можно индицировать юзверю, что доступен ввод со сканера.
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @proteam, делал я такую штуку, без всяких таймеров.
    необходимо было логиниться в базу по штрихкоду.
    Поэтому поле ввода для сканера было всегда на экране + выход через 10 минут простоя
    + пароль для "обхода"
     
  10. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    @savl , а возможно ли сделать слушатель события для представления, или может в лотусе это есть уже, чтобы отловить то, что пользователь вводит как критерий для поиска. Не хотят нажимать кнопку или переводить курсор в область ввода, хотят чтобы как раньше, считали со сканера ШК находясь в представлении, и он сразу открыл документ.

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @proteam, у меня было чуть проще.
    На открытии базы стоит фреймсет, в фреймсетеидет вычисление:
    Если админ, то открывать базу, если не админ, то открывать форму.
    На форме javaScript таймер.
    После открытия формы через 50 мс срабатывает нажатие кнопки.
    В кнопке вызов
    res = ws.Prompt(10, "Идентификация", "Поднесите штрих-код к сканеру")
    если res = "", то диалог не исчезает.
    А если вернул значение, то идет поиск по спец вьюхе.
    Если документ нашелся, то он открывается на экране.

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

    proteam Well-Known Member

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

    Leoric Well-Known Member

    Регистрация:
    15 окт 2003
    Сообщения:
    57
    Симпатии:
    16
    Была примерно такая схема работы, но ушли из-за похожих проблем.
    Если пользователям не надо видеть какие-либо данные во вьюхе (там только ШК), то советую вместо вида использовать форму с таймером.
    На форме одно поле ввода, таймер(JS) и скрытая кнопка. По таймеру проверяется есть ли в конце поля перевод строки, если есть - ищем по виду и открываем в нужном фрейме документ.
    Перевод строки мне лично был нужен т.к. пользователи могут вводить как ШК сканером, так и номер документа руками (+ автоматом ушла проблема когда сканер успевал ввести только половину ШК).

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @proteam, а вы базу смотрели?
    Там если код даже и руками ввести, то если его нет диалог не исчезает.
     
  15. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Тут лучше без таймера:
    Поле для ШК -> Combobox, Choises - пусто, Allow values not in list - включить, Run Exiting/OnChange... - включить,
    В OnChange - JS проверка на Enter, его удаление, кнопка.click(), очистка поля.
    В кнопке - лукапим по ключу док и показываем в фрейме\ембедед едиторе, если гемор, то показываем там же пейдж с надписью "всё плохо"
    Поле для ШК закрыть леером в цвет фона, поля видно не будет, а ввод туда будет возможен.
    Юзеру дополнительно никаких действий не надо - только перевести фокус на форму ввода ШК (что кагбэ еквивалентно переводу фокуса на вью) и отсканировать ШК - дальше, автоматом, будет OnChange работать.
     
    2 пользователям это понравилось.
  16. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    Мне не надо чтобы он руками вообще вводил, только с помощью сканера.
    @alexas1 , попробую. Только у меня пользователю доступны два фрейма, один с представлением, второй для отображения preview, я описывал ситуацию в начале темы. Мне желательно сохранить первоначальный вид.
    Никогда еще не пробовал что то на JS писать в лотусе))) Видимо время пришло. Да и просто боюсь как бы все это не выросло в какую нибудь неуправляемую базу, все эти обходы, как бы скрытие поля для отображения)))
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    @proteam,

    Так же возможен ручной ввод в поле
     
  18. proteam

    proteam Well-Known Member

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Кому надо обмануть - обманет, его ничто не остановит.
    Предложите еще тогда вложить деньги с систему считывателей магнитных:
    Приложил карточку - открылся документ.
    Программирование правда больше, система сложнее, но понадежней.
     
  20. proteam

    proteam Well-Known Member

    Регистрация:
    2 мар 2012
    Сообщения:
    144
    Симпатии:
    2
    А теперь вопрос, просто я уже писал, с JS в лотусе не работал. Добавил я как предложил @alexas1 поле combobox, установил все свойства, но теперь как получить значение введенное в поле в методе onchange()?
     
Загрузка...

Поделиться этой страницей