Получить Серверное Время

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

  1. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Здравствуйте.

    Задача вроде простая. Клиент открывает документ (уже созданный, может быть даже и несколько дней как) и нажимает в нем кнопку "Выполнил". По нажатию в поля документа заносятся имя пользователя и дата-время этого действия. И всё бы хорошо, но иногда пользователям для своих нужд нужно менять системное время на рабочей станции. И тогда нажатие по кнопке дает неверную дату -- будущего. И начинаются просрочки по выполнению действий (нужно было вчера, а у тебя аж послезавтра).

    Пробовал использовать
    Код (LotusScript):
    @Now([ServerTime] : [LocalTimeOnError]; @ServerName)
    -- не помогает, всё равно время берется с клиента. (Точнее не так: если нажимать кнопку в течении минут 15 после смены времени на рабочей станции, то формула работает, а если прошло больше часа, то время берется с клиента) Делать для этого агента нельзя -- начальство не велит :)

    Как бороться?

    Или таким образом без сохранения документа?
    Код (LotusScript):
    Dim ass As New NotesSession
    dim doc as notesdocument
    set doc = ass.CurrentDatabase.CreateDocument()
    aNow = doc.created
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Да уже обсуждалось не раз... поиск же есть. LS рабочий вариант вполне, если база действительно на сервере, а не локальная реплика.
     
  3. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Вот только что внес этот код в обработчик кнопки. Перекрутил время на рабочей станции на 5 дней вперед и через 20 минут нажал кнопку в документе -- вернулась дата с моего клиента... База действительно на сервере.

    Если это важно: клиент 6.5, сервер 8.
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    erhe
    не верю
     
  5. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Сам не верю, а куда деваться? Формула @Now([ServerTime]) не отрабатывает -- однозначно. Всевозможные Now() из LS тоже тянут время клиента. Как заставить код отработать на сервере, чтобы время взялось с него? Можно агентом, но против начальство. :)
     
  6. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
  7. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    На этот LS код я сам дал же ответ:
    > Вот только что внес этот код в обработчик кнопки. Перекрутил время на рабочей станции на 5 дней вперед и через 20 минут нажал кнопку в документе -- вернулась дата с моего
    > клиента... База действительно на сервере.

    Вашу ссылку смотрел. Разве только имя сервера получал через @ServerName.

    Бывший коллега лотус-программист (даже сертификаты есть) и ещё один программист с форума давали такое объяснение по этому факту:
    1) Лотус-клиент считает, что открытая база лежит у него локально, поэтому игнорирует обращения к серверу и берет дату с локальной станции.
    2) Время берется с сервера, но на клиенте переводится в локальный часовой пояс.

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

    (Я в Лотус-программировании полный чайник: сижу литературу читаю, форумы просматриваю -- прошу строго не ругать. Сильно удивляет, что написанное в официальной документации нужно так извращенно применять...)
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Для LS-кода (там где создание документа) такое возможно только при открытии локальной реплики, возможно Кэш дизайна еще висит.
    Попробуй переоткрыть клиента, удалить cache.ndk из папки с клиентом, пример "C:\Program Files\IBM\Lotus\Notes\Data"
    Снова провести эксперимент.
    Еще посмотрите, если есть иконка на рабочей области, которая ведет на локал, то удалите ее с области.

    Добавлено: Попробуй: закрыть клиента, удалить cache.ndk, открыть клиента.
     
  9. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Кэш -- вполне возможно, из Дизайнера не выходил и Клиента не закрывал. Попробую, спасибо.

    ЗЫЖ Что за фигня при сохранении сообщения? Что с рабочего компа, что из дома. из-за этого мои ответы дуплятся :)
    "Fatal error: Call to a member function register_class() on a non-object in /var/www/codeby/data/www/codeby.net/sources/classes/post/class_post.php on line 2119"
     
  10. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Я что-то вот эту фразу не догнал...
     
  11. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Мне предлагали такой вариант: сохраняем документ с флагом, на сервере крутится агент, который подхватывает такие документы и проставляет им дату -- тогда она однозначно будет с сервера.

    Начальство грит: так нехорошо -- точность события падает, поскольку агент не мгновенно их обрабатывает, и Лотус админят другие люди (не я) и если агент "слетит", то они его запросто не запустят и начнется фигня с простановкой дат. (по отзывам, есть некоторые проблемы с Лотусом-Сервером админы их вроде как решают, но бывает по разному)
     
  12. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    А что за беда со временем на локальных компьютерах?
    Не синхронизируются с сервером при старте?
    Пользователи правят ручками?
     
  13. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Именно. Им для работы нужно. Не всегда, но бывает.
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    erhe
    Это забавно... Работа задним числом...
    Возвращаемся к задаче. Вставляешь код, что вернул msgbox?
    Код (LotusScript):
    Dim ass As New NotesSession
    dim doc as notesdocument
    set doc = ass.CurrentDatabase.CreateDocument()
    aNow = doc.created
    msgbox ass.CurrentDatabase.server & "~" & aNow
     
  15. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    В том то и дело, что не задним, а передним -- крутят вперед на несколько дней.

    За праздниками просто руки не дошли -- в понедельник сделаю.
     
  16. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    Сейчас провел такой эксперимент (правда долго не ждал, всего минут 15) -- работает.

    Теперь остался вопрос по этому файлу cache.ndk -- я зашел в клиента и он создался (дата создания 18.03 -- как я и установил системное время). Будет ли LS код работать, если этот файл не удалять? В обычном порядке пользователи работают в клиенте и никакие файлы руками не удаляют; даже клиента не выключают на время перевода системной даты.
     
  17. savl

    savl Lotus team
    Lotus team

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    >даже клиента не выключают на время перевода системной даты.
    а вот это очень плохо - может приводить к падению лотуса.
     
  19. erhe

    erhe Well-Known Member

    Регистрация:
    5 мар 2013
    Сообщения:
    48
    Симпатии:
    0
    "Дизайн" в смысле работа Дизайнера или какие-то настройки клиента? Не туда ли записывается системная дата?
     
Загрузка...

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