Система Со Своим Механизмом Входа (аутентификацией)

Тема в разделе "Lotus - Программирование", создана пользователем savl, 15 янв 2013.

  1. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Доброго времени суток
    Есть задача, вот часть где есть проблема:
    1. создать систему с внутренним списком сотрудников
    2. сотрудники будут логиниться в базу по штрих-коду
    3. при нахождении документа сотрудника по ключу (штрих-код) открывать документ.
    4. авто выход сотрудника из системы (по таймеру)

    Для аутентификации я использую notesUIWorkspace.Prompt с параметром PROMPT_PASSWORD.
    И потом обрабатываю данные со считывателя, здесь проблем нет.
    таймер тоже сделан, документ закрывается.

    И вот суть проблемы: как при закрытии документа открыть notesUIWorkspace.Prompt ?
    Изначально делал на PostOpen базы, но не нашел способа вызвать форму ввода данных при закрытии документа (не само это событие просто форму).
    Затем решил делать через FrameSet, с отображением разных форм. И снова столкнулся с тем, что при закрытии документа форма ввода данных либо не отображается сразу, либо появляется раньше времени, либо проблемы с определением фрейма.

    Возможно я не так делаю, возможно что-то упускаю. Одним словом: запутался.
    Подскажите как можно это сделать, пож-та. Важны идеи или направление, в которое стоит идти.
    Очень не хотелось бы уходить в web, да, на нем проще было бы сделать и примеров тут много, но рамками самого клиента было бы лучше.
     
  2. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Длина штрихкода фиксирована?
    Вам очень важно скрывать значение штрихкода? Ведь кто угодно может сфотографировать карточку и прочитать значение?
     
  3. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    А если использовать форму-аутентификации с полем *пароль* и открывать не в диалоге, а во фрейме?
    При закрытии документа (м.б. save, settargetframe,...открывать форму-аутентификации).
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Divankin
    Это не сильно важно. По факту "штрихом" может быть что угодно или то что я скажу.
    susinmn
    С самой формой я думал, но тогда надо программировать считыватель на определенные штрих-коды.
    В частности, как один из вариантов, чтобы в конце был символ "TAB", тогда я смогу обрабатывать onChange поля ввода.
    С диалогом же, особенно с prompt попроще, в поле ввода поступает информация, сразу отрабатывает "ок" и результат ввода попадает в переменную.
     
  5. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    создаешь отдельную форму и на Postopen свой код
    Код (LotusScript):
            Source.Close
    Call ws.Prompt(PROMPT_PASSWORD, "Password", "Please type your password.")
    --- код по поиску нужного документа----------
    поле SaveOptions не забудь
    при входе можешь на PostOpen базы открывать документ
    Код (LotusScript):
        Set doc=db.CreateDocument
    doc.form="open2"
    Call ws.EditDocument(False, doc)
    или сразу стартовый фрейм с даной формой, в таком случаи документ сам создастся

    а при закрытии основного документа снова создавать данный документ
    Код (LotusScript):
        Set doc=db.CreateDocument
    doc.form="open2"
    Call ws.EditDocument(False, doc)
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    PostOpen отрабатывает до загрузки формы, значит если открывать фреймсет с этой формой, то его не будет на экране и SetTargetFrame даст ошибку. Это если открывать документ по ключу в том же фрейме.
    Опять же, если сделать при закрытии документа открытие лог-формы, то диалог ввода пароля появиться раньше, чем документ закроется.
    Если открывать в новой закладке, то ничего не мешает вернуться на предыдущую просто переключением вкладки, так что просто не подходит...

    UPD: Ошибки SetTargetFrame не будет, просто не найдет фрейм и откроет в новой вкладке, а затем откроет уже фрейм с документом, еще один.
     
  7. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    зачем тебе SetTargetFrame ?
    как-раз после загрузки формы
    а ты проверял?
    и вообще вот тебе тестовая бд....2 формы: 1 авторизация по паролю, другая найденный документ. пароль к этому документу - 123, все остальное вывод сообщение, отмена закрывает базу
    Посмотреть вложение authorization.zip
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    такой пример я сделал сам,подходит в целом, не подходит по причинам требований.
    Чтобы не видеть рабочую область клиента, открыта вкладка, в ней фреймсет, во вреймсете форма на которой вылезает диалог логина.
    Ввод логина - загрузка в этом же фреймсете документа пользователя. Через 5-10 минут, если в документе не нажата кнопка "Сделать" (пусть так будет) документ автоматом закрывается, в этом же фрейме появляется форма, где высвечивается диалог для ввода логина ...

    Если на Queryclose вешать, то все хорошо, никто не спорит. Я делал код в кнопке, которая вызывается по времени, вот тут и ошибся.
    Сейчас буду переделывать, да и еще одно решение созрело, если получится отпишусь.

    До загрузки формы на экран, форма на экране еще не появилась, а событие отрабатывает. Легко проверяется msgbox'ом в PO.
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    В целом сделал, задумка удалась, именно через фреймсет и 2 формы.
    Как и erdi сделал форму "логин", которая открывается во фреймсете, в свойствах базы стоит: открывать через фреймсет.
    На форме "логин" выставил JS-таймер при загрузке формы, на 500 мс. Когда таймер срабатывает он нажимает невидимую кнопку на форме.
    В коде кнопки код, который вызывает ws.prompt, далее вводим наш штрих-код со считывателя, находим документ и открываем его в этом же фрейме.
    В нашем документе. который мы нашли есть такой же JS-таймер, который так же нажимает невидимую кнопку на форме.
    В коде данной кнопки: создание временного документа по форме "логин", открытие его в нашем фрейме и закрытие документа с данными.

    Вот в принципе и всё. Решение не без минусов, но полностью удовлетворяет всем текущим требованиям.
    Спасибо за пример и за помощь.
     
  10. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    А можно подробнее про JS-таймер?
    Как его выставить? Можно ли его выставить из LS?
    В семерке это уже работает?
    Невидимая кнопка - это скрытая формулой видимости, или какие-то интерфейсные ухищрения, в результате которых кнопка сливается с фоном?
    Таймер точно работает ровно через 500 мс? Я уже сталкивался с тем, что NotesTimer выставленный на секунду, иногда срабатывает сразу, иногда через полсекунды, а иногда через секунду. Вот и ищу альтернативу.
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Divankin
    вот тут брал: http://codeby.net/forum/threads/44544.html?hl...%E0%E9%EC%E5%F0 Последняя запись.
    кстати пост от nvy :p

    В семерке это уже работает? Должно
    Невидимая кнопка Галками скрыл для всех клиентов, из поста про таймер станет ясно.
    Таймер точно работает ровно через 500 мс? Сложно сказать, начало в событии onLoad.
     
  13. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    кнопка д.б. скрыта (без хитростей), но ей надо задать имя (в хтмл св-вах)
    точность таймера под вопросом, как и вся мультитредовость в нотусне :p "оно хорошее, но почему-то хромает" © ВиниПух
     
  14. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    я бы немного изменил механизм, т.к. при работе с фрейсет может возникнуть проблема с SetTargetFrame, если пользователь когда прошел авторизацию и временно начал работать с другим документом(например почта пришла и он переключился на входящее сообщение). В этом случаи все-равно надо заблокировать документ и вывести окно с авторизацией.
    Для решения этой проблемы наверное подойдет использование слоев.
    В слое создается форма авторизации, чтобы не программировать считыватель на спец символы, а использовать по-умолчанию Enter, для этого вешаем на поле этот код и добавляем нажатие кнопки по поиску нужного документа.
    Данный слой будет отображаться при условии что некое поле "Field"="1", например. Поле "Field" будет заполняться через скрытую кнопку по истечению таймера. При этом uidoc.Refresh и uidoc.RefreshHideFormulas будут применяться к документу, даже если фокуса на этом документе нет. Для этого uidoc нужно глобально переопределить при открытии документа set uidoc=Source

    вот как-то такая мысль меня посетила

    link
     
  15. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    erdi
    да, проблемка с возможностью переключения вкладок есть, подумаю об этом.
    Система разрабатывается как имитация терминала общего доступа, так что переключение не должно быть.
    Но метод автовыхода при смене вкладки и использовании ws.prompt невозможен, так как ws.prompt модально.
    Как вариант - открыть данную базу в новом окне, тогда и вкладку будет некуда переключить.
     
  16. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    savl
    Проще выложить базу, как это сделал erdi, чем долго объяснять что к чему :(
     
  17. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    ну да) действительно)

    Там один документ, введите "123" и он найдется.
    Таймер стоит на 1 минуту, если карточку не трогать минуту - появиться окно логина.
    Введите ***, чтобы прервать цикл. Или просто закройте карточку, которая найдется.
    Большего пока не сделал.

    Обновил файл
     

    Вложения:

    • daytale.rar
      Размер файла:
      30 КБ
      Просмотров:
      10
  18. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    savl
    База зашифрована.
     
  19. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Обновил
     
Загрузка...

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