Таймер

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#1
И снова здравствуйте!
Ребята, вот какой вопрос.
Можно ли на каждый открытый документ навесить свой таймер?
Событие таймера должно возникать через определенное кол-во секунд/минут до тех пор пока документ открыт
Если можно - прошу помочь (как, что и где надо писать ). Что-то до меня не доходит с чего начинать ковырять таймер :ya_lamo:
 
K

Klido

#2
загугли что-то типа NotesTimer - класс такой точно в нескольких вариациях есть... про навесить на каждый док - лучше бы этого не делать :ya_lamo:
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#3
загугли что-то типа NotesTimer - класс такой точно в нескольких вариациях есть... про навесить на каждый док - лучше бы этого не делать :ya_lamo:
Согласен, но пока не вижу варианта как можно было бы обновлять документ
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#4
сморя что обновлять - может можно и JS обойтись (искать типа "бегущая строка")
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#5
Событие таймера должно возникать через определенное кол-во секунд/минут до тех пор пока документ открыт
открыт в каком клиенте?
Согласен, но пока не вижу варианта как можно было бы обновлять документ
обновлять в документе что? изменения в бекенде, полученном с УИ, влекут за собой автоматические изменения на УИ, если не отключено и не РТ-поле.
Что-то до меня не доходит с чего начинать ковырять таймер
со справки ) NotesTimer не такой и большой и сложный
 
13.03.2009
625
1
#6
сморя что обновлять - может можно и JS обойтись (искать типа "бегущая строка")
+1
setTimeout, setInterval
из js можно вызвать скриптовую функцию эмулируя нажатие кнопки
делаем кнопку с кодом, на последней закладке присваиваем ей name=id="myBtn"

в jsheader засунуть
Код:
var myInterval;
var periodInSeconds = 5*1000;
function myFunction(){
alert( periodInSeconds + ' секунд прошло. пора жать кнопку');
document.forms[0].myBtn.click();
clearInterval( myInterval );
myInterval = setInterval('myFunction()' , periodInSeconds )

}
и на onLoad формы: myInterval = setInterval('myFunction()' , periodInSeconds );
 

hosm

* so what *
18.05.2009
2 442
6
#7
Согласен, но пока не вижу варианта как можно было бы обновлять документ
с одним документом можно попрбовать, а вот с кучей как-то оно кривовато будет, имхо.
что-то типа такого: на квериопен сохранить уи-док, создать таймер, потом по аларму таймера пересчитывать какие-то поля или релоадить?

Добавлено: а это вообще в вебе надо или вы к лотус-клиенту js-подвязываете?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#8
код кот. привел turumbay будет работать и в клиенте
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#9
проблема вот собственно в чем.
Часто бывает ситуация, когда над одним и тем же документом работают 2-3 человека одновременно.
Есть желание организовать блокировку документа на редактирование для последующих желающих его открыть и перехват полных прав на документ по требованию одного из пользователей.
 
K

Klido

#11
организовать блокировку документа на редактирование для последующих желающих его открыть
оно автоматом не даст им открыть с сообщением "Документ уже редактируется таким-то" в пределах сервера и в пределах реплик, если включить блокировку в свойствах базы

пройдитесь по форуму - тема недавно обсуждалась...
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#12
если включить блокировку в свойствах базы
если я не ошибаюсь, то в свойствах базы включается возможность включать блокировку пользователем и работает оно не только пока документ открыт, а пока блок не снимут. а та блокировка сама по себе.
 
K

Klido

#13
Akupaka
2 типа блокировки - ручная и временная (как там написано, реально хард&софт :)) , ручная (открытие на редактирование) при включенной опции на базе "Allow document locking" заблокирует док для редактировани явно всех репликах (что круто) и более того - если был запрос из другой реплики на редактирование - репликация пройдет моментально при внесении изменений в измененный док - вне рамок обычной репликации (что тоже круто)
к сожалению, блокировки частенько глючат, потому надо ваять всякие обработчики...
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#14
NickProstoNick
всё можно, я такой таймер на каждый док повесил, создал подформочку в неё прописал код на пост опен и установил интервал раз в 30 минут, при первом же "тике" проверяю если док в режиме редактирования, перевожу его в режим чтения, дабы кто-то другой тоже мог поработать с этим доком
 
K

Klido

#15
ToxaRat
супер просто - а что ты делаешь с изменениями за 30мин? когда чел отвлекся не телефон или на перекур в процессе работы???
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#16
супер просто - а что ты делаешь с изменениями за 30мин? когда чел отвлекся не телефон или на перекур в процессе работы???
и кроме того, что, если этот документ никем не востребован? О.о

Klido
я имел в виду, что в пределах одного сервера эта фича не обязательна, сервер не даст войти в режим редактирования другому человеку, пока первый не закроет.
а, если нужна блокировка за пределами одной реплики, конечно, полезная настройка.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#17
ммм... как бы это объяснить.
В документе есть набор хотспотов, которые запрограммированы на определенные действия. Запрограммированы как на @formula так и на скрипте.
Хотспоты работают и в состоянии просмотра документа.
И получается что несколько человек может выполнить разные действия, что собственно недопустимо.
Вот собственно к этим хотспотам и надо ограничить доступ. Просто прятать их в режиме просмотра нельзя.
Монопольно отдавать права на хотспоты первому открывшему документ тоже нельзя (пользователи часто открывают документ и могут "держать" его долгое время) Нужна возможность перехватить документ.
Потому я склоняюсь к какому-нить списку открытых сейчас документов через который и будет организовано блокирование (скрытие) хотспотов и перехват прав на них.
В случае перехвата прав всем открывшим один и тот же документ - документ надо перегрузить или попросту закрыть. Как это организовать на удаленных машинах - не знаю.
Вижу 2 варианта:
1. Опрос списка открытых документов по таймеру
2. Как-то попробовать разобрать команду админки "Drop", но вот только дропать надо доступ не ко всей базе, а к одному документу. И мне кажется что это не реально
Более оригинального ничего не могу придумать :)

Добавлено:
я имел в виду, что в пределах одного сервера эта фича не обязательна, сервер не даст войти в режим редактирования другому человеку, пока первый не закроет.
а, если нужна блокировка за пределами одной реплики, конечно, полезная настройка.
Ну у меня проще немного... как такового доступа на редактирование к документу нет. Просто согласно данных в документе пользователю предлагается определенный набор действий.
 
K

Klido

#18
Akupaka
что в пределах одного сервера эта фича не обязательна, сервер не даст войти в режим редактирования другому человеку, пока первый не закроет
ну да - я так сразу и написал :) остальное - предмет отдельных манипуляций...
NickProstoNick
режим редактирования - специально для внесения изменений в док, почему же не логично спрятать что-то, что вносит изменения в режим чтения?

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#19
В документе есть набор хотспотов, которые запрограммированы на определенные действия. Запрограммированы как на @formula так и на скрипте.
Хотспоты работают и в состоянии просмотра документа.
ты забыл уточнить, что именно выполняется по этим кнопкам :)
если изменения текущего документа, то как вариант - делать очередь изменений, т.е. ряд каких-то документов, которые будет обрабатывать механизм внесения изменений в документ, если их нельзя внести в момент выполнения операции.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#20
если изменения текущего документа, то как вариант - делать очередь изменений, т.е. ряд каких-то документов, которые будет обрабатывать механизм внесения изменений в документ, если их нельзя внести в момент выполнения операции.
Я тоже за такой вариант. А таймер, мягко говоря - это решение через задницу.