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

erhe

Well-Known Member
05.03.2013
48
0
#1
Здравствуйте.

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

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

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

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

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#2
Да уже обсуждалось не раз... поиск же есть. LS рабочий вариант вполне, если база действительно на сервере, а не локальная реплика.
 

erhe

Well-Known Member
05.03.2013
48
0
#3
Да уже обсуждалось не раз... поиск же есть. LS рабочий вариант вполне, если база действительно на сервере, а не локальная реплика.
Вот только что внес этот код в обработчик кнопки. Перекрутил время на рабочей станции на 5 дней вперед и через 20 минут нажал кнопку в документе -- вернулась дата с моего клиента... База действительно на сервере.

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

erhe

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

erhe

Well-Known Member
05.03.2013
48
0
#7
а пробовали LS код, который сами же привели в 1м посте? Обсуждалось же неделю назад - Получить В Скрипте Дату И Время Сервера, посмотрите
На этот LS код я сам дал же ответ:
> Вот только что внес этот код в обработчик кнопки. Перекрутил время на рабочей станции на 5 дней вперед и через 20 минут нажал кнопку в документе -- вернулась дата с моего
> клиента... База действительно на сервере.

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

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

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

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

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#8
1) Лотус-клиент считает, что открытая база лежит у него локально, поэтому игнорирует обращения к серверу и берет дату с локальной станции.
Для LS-кода (там где создание документа) такое возможно только при открытии локальной реплики, возможно Кэш дизайна еще висит.
Попробуй переоткрыть клиента, удалить cache.ndk из папки с клиентом, пример "C:\Program Files\IBM\Lotus\Notes\Data"
Снова провести эксперимент.
Еще посмотрите, если есть иконка на рабочей области, которая ведет на локал, то удалите ее с области.

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

erhe

Well-Known Member
05.03.2013
48
0
#9
Для LS-кода (там где создание документа) такое возможно только при открытии локальной реплики, возможно Кэш дизайна еще висит.
Попробуй переоткрыть клиента, удалить cache.ndk из папки с клиентом, пример "C:\Program Files\IBM\Lotus\Notes\Data"
Снова провести эксперимент.
Еще посмотрите, если есть иконка на рабочей области, которая ведет на локал, то удалите ее с области.

Добавлено: Попробуй: закрыть клиента, удалить cache.ndk, открыть клиента.
Кэш -- вполне возможно, из Дизайнера не выходил и Клиента не закрывал. Попробую, спасибо.

ЗЫЖ Что за фигня при сохранении сообщения? Что с рабочего компа, что из дома. из-за этого мои ответы дуплятся :)
"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"
 

erhe

Well-Known Member
05.03.2013
48
0
#11
Я что-то вот эту фразу не догнал...
Мне предлагали такой вариант: сохраняем документ с флагом, на сервере крутится агент, который подхватывает такие документы и проставляет им дату -- тогда она однозначно будет с сервера.

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

Anatoly

Well-Known Member
Lotus team
30.03.2007
221
0
55
Волгоград
#12
А что за беда со временем на локальных компьютерах?
Не синхронизируются с сервером при старте?
Пользователи правят ручками?
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#14
erhe
Это забавно... Работа задним числом...
Возвращаемся к задаче. Вставляешь код, что вернул msgbox?
Код:
Dim ass As New NotesSession
dim doc as notesdocument
set doc = ass.CurrentDatabase.CreateDocument()
aNow = doc.created
msgbox ass.CurrentDatabase.server & "~" & aNow
 

erhe

Well-Known Member
05.03.2013
48
0
#15
Это забавно... Работа задним числом...
В том то и дело, что не задним, а передним -- крутят вперед на несколько дней.

Возвращаемся к задаче. Вставляешь код, что вернул msgbox?
За праздниками просто руки не дошли -- в понедельник сделаю.
 

erhe

Well-Known Member
05.03.2013
48
0
#16
Для LS-кода (там где создание документа) такое возможно только при открытии локальной реплики, возможно Кэш дизайна еще висит.
Добавлено: Попробуй: закрыть клиента, удалить cache.ndk, открыть клиента.
Сейчас провел такой эксперимент (правда долго не ждал, всего минут 15) -- работает.

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

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#17
это файл кэша, в него часто "записывается" дизайн и оттуда считывается. Стоит у всех чистить периодически.
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#18
>даже клиента не выключают на время перевода системной даты.
а вот это очень плохо - может приводить к падению лотуса.
 

erhe

Well-Known Member
05.03.2013
48
0
#19
это файл кэша, в него часто "записывается" дизайн и оттуда считывается. Стоит у всех чистить периодически.
"Дизайн" в смысле работа Дизайнера или какие-то настройки клиента? Не туда ли записывается системная дата?