Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Блокировка документа
Форум программистов > Базы данных и администрирование > Lotus > Lotus - Программирование
Страницы: 1, 2
kizarek
ну собственно хотелось бы услышать кто и как делает.

Ситуация следующая, есть 2е базы, 1бд и 2бд. между 1бд и 2бд осуществляется синхронизация при закрытии документа(по запросу пользователя и агентом). В 1бд созадана система, что при открытии документа с которым возможна синхронизация, создается документ который при синхронизациии говорит что документ занят.

вот какие проблемы нам это несет:
1. Документ о занятости другого создается при открытии документа (что на чтение, что на редактирование). А вот удаляется только при закрытии документа из редактирования (на событии квериклозе).И запись эта сохраняется до удаления агентом, и документ становится занятым до отработки агента, тоже в общем то решаема, но не очень приятно.
2. Не все пользователи имеют право на удаление документов, приходится обнулять значение, что приводит к огрызкам этих документов в базе. в общем то пустяк, агентом ночным чистим, но все равно неприятно.

прошу поделиться идеями синхронизации) и мб какие то мысли есть по даным проблемам.

заранее благодарен.
Morpheus
Цитата(kizarek @ 15:08:2008 - 07:53) *
А вот удаляется только при закрытии документа из редактирования (на событии квериклозе)

queryclose срабатывает в любом случае при "нормальном" закрытии UI документа

Цитата(kizarek @ 15:08:2008 - 07:53) *
2. Не все пользователи имеют право на удаление документов, приходится обнулять значение, что приводит к огрызкам этих документов в базе. в общем то пустяк, агентом ночным чистим, но все равно неприятно.

вот и делайте документы блокировки в другой системе, или вместо удаления документов, просто пользоваться индикаторомчто документ залочен, тоесть в документе-признаке ставить индикатор что гл. документ уже освободился
Akupaka
а зачем вообще это все? репликацией нельзя было воспользоваться?..

если синхронизация по типу репликации, а реплицировать нельзя, то почему бы не сделать так:

- при открытии ставим признак, что документ заблокирован во вспомогательном документе;
- при закрытии его снимаем;
- при попытке синхронизации, смотрим, если документ заблокирован, то делаем ответом наш синхронизируемый документ к заблокированному документу;
- если не заблокирован - сихнронизируем;
- каким-то образом придумать синхронизацию ответов, которые не удалось синхронизировать ранее smile.gif
Medevic
А использовать стандартную блокировку?
kizarek
Morpheus
Что есть стандартная блокировка просвятите?)
Medevic
Document locking + F1
Morpheus
kizarek
там ( в Lock/Unlock ) тоже будут грабли по закакиванию документов. документ не залочен, а в полях врайтеров все равно стоит информация о локе
Medevic
Цитата(Morpheus @ 15:08:2008 - 11:06) *
там ( в Lock/Unlock ) тоже будут грабли по закакиванию документов. документ не залочен, а в полях врайтеров все равно стоит информация о локе

Это достаточно редко.
Зато, если документ изменится на одном сервере, то на другом при попытке открыть документ выскочит сообщение, что документ был изменен.
Morpheus
Medevic
я вот пока плохо себе представляю как быть с репликами
Medevic
Цитата(Morpheus @ 15:08:2008 - 11:13) *
я вот пока плохо себе представляю как быть с репликами

А что с ними?
Morpheus
Medevic
будет ли реплицироваться информация о Lock документа вместе с документом?
Medevic
Цитата(Morpheus @ 15:08:2008 - 11:18) *
будет ли реплицироваться информация о Lock документа вместе с документом?

Поля $Writers и $WritersDate вроде бы будут реплицироваться. Но блокировкой управляет только один сервер. Поэтому при попытках заблокировать/разблокировать будет проверяться статус документа на определенном сервере.
kizarek
Как с локом обстоит дело вообще? если при открытии документа он блокируется, а при закрытии разблокируется, то есть ли возможность закрыть документ не разблокировав? т.е. есть ли реальная возможность закрыть документ без отработки квериклоза? закроется ли тогда документ для чтения другим юзерам? то как узнать что документ заблокирован из другой базы?
Medevic
Цитата(kizarek @ 15:08:2008 - 11:52) *
есть ли возможность закрыть документ не разблокировав? т.е. есть ли реальная возможность закрыть документ без отработки квериклоза?

Есть. Кнопка Power или сбой.

Цитата(kizarek @ 15:08:2008 - 11:52) *
закроется ли тогда документ для чтения другим юзерам?

Блокируется только для редактирования.

Цитата(kizarek @ 15:08:2008 - 11:52) *
то как узнать что документ заблокирован из другой базы?

notesDocument.LockHolders
Morpheus
Цитата(kizarek @ 15:08:2008 - 10:52) *
закроется ли тогда документ для чтения другим юзерам?

]]>http://forum.codeby.net/topic15154.html-]]> штудируем


Цитата(Medevic @ 15:08:2008 - 10:40) *
Поэтому при попытках заблокировать/разблокировать будет проверяться статус документа на определенном сервере.

а что именно будет и как определяться "определённый" сервер
Medevic
Цитата(Morpheus @ 15:08:2008 - 12:51) *
а что именно будет и как определяться "определённый" сервер

Подозреваю, сервер посмотрит поле $Writers. smile.gif
Сервер в ACL ставится.
Morpheus
Цитата(Medevic @ 15:08:2008 - 11:56) *
Сервер в ACL ставится

да вот недоступен административный сервер
Medevic
Цитата(Morpheus @ 15:08:2008 - 13:03) *
да вот недоступен административный сервер

И что? Самодельная блокировка из первого поста решает эту проблему?
Akupaka
ребята, в хэлпе все ваши вопросы описаны, что вы догадываетесь? smile.gif

вот кто из вас знает точно, нужны ли права на изменение дока, чтобы его заблокировать?
а то тут чтение упоминается вовсю, но заблокировать документ от чтения можно лишь явно кодом в QueryOpen, и то только УИ! а бэкэнд?.. если, конечно, надо smile.gif
Medevic
Цитата(Akupaka @ 15:08:2008 - 14:17) *
ребята, в хэлпе все ваши вопросы описаны, что вы догадываетесь?

Где?

Цитата(Akupaka @ 15:08:2008 - 14:17) *
вот кто из вас знает точно, нужны ли права на изменение дока, чтобы его заблокировать?

В хелпе написано, зачем же спрашивать? smile.gif

Цитата(Akupaka @ 15:08:2008 - 14:17) *
а то тут чтение упоминается вовсю, но заблокировать документ от чтения можно лишь явно кодом в QueryOpen, и то только УИ! а бэкэнд?.. если, конечно, надо

А разве есть задача заблокировать документ от чтения?
Morpheus
Цитата(Medevic @ 15:08:2008 - 13:37) *
А разве есть задача заблокировать документ от чтения?

а придёться... если из режима чтения в режим редактирования то ... получиться такая вот ситуация

]]>http://forum.sysfaq.ru/index.php?showtopic=8239]]>
Medevic
Цитата(Morpheus @ 15:08:2008 - 14:44) *
а придёться... если из режима чтения в режим редактирования то ... получиться такая вот ситуация

Не получится. Перед редактированием документ блокируется. И если документ был изменен во время просмотра, то лотус ругнется.
Akupaka
Цитата(Medevic @ 15:08:2008, 14:37 ) *
Где?

flag = notesDocument.Lock( [ name ] [, provisionalOK ] )

Parameters
name - Array of type String. Optional. The names of the lock holders. Each lock holder must be a user or group. Defaults to one lock holder: the effective user. The empty string ("") is not permitted in the array.

provisionalOK - Boolean. Optional.
True permits the placement of a provisional lock.
False (default) does not permit a provisional lock.

Return value
flag - Boolean.
True if the lock is placed.
False if the lock is not placed.

Usage
IsDocumentLockingEnabled in NotesDatabase must be True or this method raises an error.
This method:
Places a persistent lock if the administration (master lock) server is available.
Places a provisional lock if the administration server is not available and the second parameter is True.
Raises an error if the administration server is not available and the second parameter is False.
The following actions occur depending on the current lock status:
If the document is not locked, this method places the lock and returns True.
If the document is locked and the current user is one of the lock holders, this method returns True.
If the document is locked and the current user is not one of the lock holders, this method returns False.
If the document is modified by another user before the lock can be placed, this method raises an error.


Цитата(Medevic @ 15:08:2008, 14:37 ) *
В хелпе написано, зачем же спрашивать? smile.gif

Ну вот зачем, а? smile.gif раз спрашиваю, значит не написано, а сам не юзал smile.gif

Цитата(Medevic @ 15:08:2008, 14:37 ) *
А разве есть задача заблокировать документ от чтения?


В самом первом посте было указано, что блокировка при открытии на чтение должна быть, вот логически мне показалось, что должна быть блокировка на чтение заблокированного документа... моя личная догадка, мож и не надо smile.gif

Цитата(Morpheus @ 15:08:2008, 14:44 ) *
а придёться... если из режима чтения в режим редактирования то ... получиться такая вот ситуация

]]>http://forum.sysfaq.ru/index.php?showtopic=8239]]>

асболютно ниче интересного не вычитал... вообще, станно, что у них не создался конфликт...
Morpheus
Цитата(Medevic @ 15:08:2008 - 13:50) *
И если документ был изменен во время просмотра, то лотус ругнется.

вот получаеться что не ругнёться wink.gif
при том юзвери на одном серверне
Medevic
Цитата(Morpheus @ 15:08:2008 - 14:59) *
вот получаеться что не ругнёться wink.gif
при том юзвери на одном серверне

При включенной блокировке? По ссылке я не нашел ничего про блокировку.
Morpheus
Цитата(Medevic @ 15:08:2008 - 14:03) *
о ссылке я не нашел ничего про блокировку.

мда, там не написано, уже вижу. Но имелось в виду что при єтом документы Lock делают. Общались потом просто по асе
Medevic
Akupaka
А, ты про это. Я думал про это:
Цитата(Medevic @ 15:08:2008 - 12:56) *
Подозреваю, сервер посмотрит поле $Writers.

В хелпе не написано что такое блокировка и где признак хранится. Я думаю, что просто в поле $Writers. Можно попробовать вручную создать такое поле и посмотреть что будет.

Цитата(Akupaka @ 15:08:2008 - 14:58) *
Ну вот зачем, а? smile.gif раз спрашиваю, значит не написано, а сам не юзал smile.gif

Хелп говорит. smile.gif
Цитата
When you set the database property "Allow document locking," users with Author access or higher can lock documents in that database.


Цитата(Akupaka @ 15:08:2008 - 14:58) *
В самом первом посте было указано, что блокировка при открытии на чтение должна быть, вот логически мне показалось, что должна быть блокировка на чтение заблокированного документа... моя личная догадка, мож и не надо

Там написано, что она есть. А вот для чего она нужна не понятно. smile.gif
Возможно она нужна, чтобы решить проблему, когда во время чтения документ меняется. Но стандартная блокировка эту проблему нормально решает, как я написал выше.
Akupaka
та по-моему тема про велосипед вообще wink.gif

а это видать (как всегда) написали в документе про галку, а не про метод smile.gif
Цитата
When you set the database property "Allow document locking," users with Author access or higher can lock documents in that database.
Medevic
Цитата(Akupaka @ 15:08:2008 - 15:17) *
а это видать (как всегда) написали в документе про галку, а не про метод smile.gif

Ага. smile.gif
Кстати, если не ошибаюсь, в 6-ке был глюк, когда юзер с правами Readers может заблокировать документ, если откроет документ из представления по ctrl-e. Видимо, права на редактирование проверялись после блокировки. smile.gif
В 7-ке всё работает как надо.
Morpheus
Цитата(Medevic @ 15:08:2008 - 14:23) *
В 7-ке всё работает как надо.

возможно, патамушта глюк в 6,5,х
Constantin A Chervonenko
Цитата(Akupaka @ 15:08:2008, 14:17 ) *
но заблокировать документ от чтения можно лишь явно кодом в QueryOpen, и то только УИ! а бэкэнд?.. если, конечно, надо smile.gif

В backend - точно так-же, как и в UI для read: явно обратившись к ф-ции Lock


Цитата(Medevic @ 15:08:2008, 15:14 ) *
В хелпе не написано что такое блокировка и где признак хранится. Я думаю, что просто в поле $Writers

Когда-то на ibm-овском мероприятии докладывали:
provisonal-блокировка нигде не хранится. Точнее - в мозгах у сервака. Поэтому она не "зависает" при аварийном слете сеанса пользователя, док-т автоматом освобождается (вот не помню: сразу или по тайм-ауту)
"Глобальная" блокировка - это действительно поле.
Morpheus
Цитата(Constantin A Chervonenko @ 15:08:2008 - 16:35) *
provisonal-блокировка нигде не хранится. Точнее - в мозгах у сервака. Поэтому она не "зависает" при аварийном слете сеанса пользователя, док-т автоматом освобождается (вот не помню: сразу или по тайм-ауту)
"Глобальная" блокировка - это действительно поле.

а можно перевести что есть provisonal блокировка?
Akupaka
это временная

2 Constantin A Chervonenko :
т.е. заблокированный док нельзя прочесть? я думал, что его нельзя сохранить... надо самому попробовать smile.gif
Constantin A Chervonenko
Цитата(Akupaka @ 18:08:2008, 10:29 ) *
это временная

2 Constantin A Chervonenko :
т.е. заблокированный док нельзя прочесть? я думал, что его нельзя сохранить... надо самому попробовать smile.gif

Ы? Этого я не говорил
Akupaka
я так понял Ваш ответ:
Цитата(Constantin A Chervonenko @ 15:08:2008, 17:35 ) *
В backend - точно так-же, как и в UI для read: явно обратившись к ф-ции Lock

если я не правильно понял, то, что Вы имели в виду? smile.gif
Constantin A Chervonenko
Когда клиент открывает док-т в UI для редактирования, он автоматом поднимает на него (provisional?) Lock.
Если док-т открывается в background, то на совести автора кода: лочить док-т или нет.
Если док-т открывается в UI, но read-only, опять-же к компетенции автора кода: не сделать-ли Lock гдени-ть в QueryOpen формы - получится "защита" от чтения
Akupaka
да, но, если lock установлен, то кто-то другой ведь сможет документ читать?! т.е. блокировка от чтения не предусмотрена в лотусе?.. smile.gif
kizarek
Возможно ли так задать параметры агента чтобы он перекрывал уровень доступ пользователя?

Допустим пользователь без прав на создание документов в базе, но необходимо создать документ?
Akupaka
ну, если только создать, то можно попробовать сделать по кнопке запуск агента на сервере, он создаст док, даст пользователю на него права (только по роли, т.к. имя текущего пользователя вряди достанем серверным агентом), а пользователь его откроет на редактирование уже из вида...
Medevic
Цитата(Akupaka @ 27:08:2008 - 10:40) *
ну, если только создать, то можно попробовать сделать по кнопке запуск агента на сервере, он создаст док, даст пользователю на него права (только по роли, т.к. имя текущего пользователя вряди достанем серверным агентом), а пользователь его откроет на редактирование уже из вида...

Как он его откроет на редактирование, если у него прав нет на создание? Точнее он откроет, но сохранить не сможет. Опять серверный агент нужен. А как его вызвать, если документ не сохранен? smile.gif

А скорее всего он его даже на редактирование не откроет. smile.gif
Akupaka
Цитата(Medevic @ 27:08:2008, 10:58 ) *
Как он его откроет на редактирование, если у него прав нет на создание? Точнее он откроет, но сохранить не сможет. Опять серверный агент нужен. А как его вызвать, если документ не сохранен? smile.gif

А скорее всего он его даже на редактирование не откроет. smile.gif


я вот как для тебя писал smile.gif

документ создается агентом! на сервере! агент дает доступ к доку по роли! после этого, пользователь ручками открывает этот документ на редактирование smile.gif

естественно, что пользователь должен иметь уровень автор, и роль, о которой выше было сказано, чтобы изменить документ...

проблема в том, что если много пользователей эту операцию проведут, то каждый конкретный пользователь может не угадать который документ его smile.gif
Medevic
Цитата(Akupaka @ 27:08:2008 - 11:09) *
я вот как для тебя писал smile.gif
документ создается агентом! на сервере! агент дает доступ к доку на основании роли! после этого, пользователь ручками открывает этот документ на редактирование smile.gif

Так нет у него прав на создание(т.е. в ACL он Reader или No Access). Какая разница какую ему роль дать?
Akupaka
да и работа локально зарезана на корне ))
Medevic
В смысле доступ в ACL перекрывает доступ по полям Authors.
Akupaka
создание документа - дело агента, который работает на сервере, от имени того, кто имеет право на создание доков, че тут не ясно-то? smile.gif

через веб подобные вещи проще реализовать, там имя юзера можно отловить...

вот, если кто знает, как дернуть по урлу агент от имени нотес-аутентификации!... smile.gif
Medevic
Цитата(Akupaka @ 27:08:2008 - 11:09) *
естественно, что пользователь должен иметь уровень автор, и роль, о которой выше было сказано, чтобы изменить документ...

Ну так вся проблема в том, что нет уровня автора. smile.gif
Цитата(Akupaka @ 27:08:2008 - 11:14) *
да и работа локально зарезана на корне ))

А локально ничего не даст. Чтобы вызвать агента на сервере, ему нужно пихнуть noteid документа. Локальный документ ему не пихнешь. smile.gif

По-моему, всё это извращение. Можно сразу по-нормальному сделать. Дать ему автора. А контроль созданных документов можно сделать агентом.
Akupaka
можно конечно smile.gif
но почему-то всем хочется с самого начала через задний проход...
kizarek
Агент сам генерит документ...пользователю потом нет необходимости его редактировать.

Агент подписан тем кто имеет право на создание доков, но если пользователь не имеющий таковых прав запускает его, то агент ругает все равно на недостаточность прав.
Medevic
Цитата(kizarek @ 27:08:2008 - 11:23) *
Агент подписан тем кто имеет право на создание доков, но если пользователь не имеющий таковых прав запускает его, то агент ругает все равно на недостаточность прав.

Агент серверным должен быть.
kizarek
кхм...как сделать серверный агент?)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2009 IPS, Inc.