Как Программно (на Ls) Узнать Кто Редактирует Документ? (без Использов

  • Автор темы AndyOrlov
  • Дата начала
A

AndyOrlov

Задача:
Документ сразу открывается в режиме редактирования.
Перед открытием надо узнать не редактирует ли другой пользователь этот документ, и если да, то открыть в режиме просмотра.

Пояснение:
Задача на открытие документа в пределах одной реплики БД, так как при открытии на разных репликах сообщение о блокировке не появляется, а проблему конфликта решил.

От себя:
Форумы читал, но нужного ответа не нашел.

Своё решение есть (открытие в режиме просмотра, в PostOpen перевод в EditMode. Если занято, то выскакивает сообщение, и после этого пользователь остается в режиме просмотра). Это решение работает и всех устраивает, но мне не нравится!!! Немного коряво и чувствую, что решение есть, так как в выскакивающем сообщение написано кто блокирует. У меня чисто профессиональный интерес.

Если использовать режим блокировки, то всё ясно. Но надо без включения этого режима.
Создание самописной блокировки... Понятно! Не пойдет.
Заранее спасибо.
 
M

morpheus

Своё решение есть (открытие в режиме просмотра, в PostOpen перевод в EditMode. Если занято, то выскакивает сообщение, и после этого пользователь остается в режиме просмотра).
в свойствах формы - 2я закладка
Automatically enable Edit Mode

Добавлено:
Перед открытием надо узнать не редактирует ли другой пользователь этот документ

поле $Writers - в случае если включена стандартная блокировка
 
A

AndyOrlov

в свойствах формы - 2я закладка
Automatically enable Edit Mode

Так в этом решение. Если сразу в EditMode, то после сообщения пользователь остается в виде. А у меня остается в документе в режиме просмотра.

поле $Writers - в случае если включена стандартная блокировка
Так в этом и задачка. Режим блокировки в базе не включать, И как я понимаю, поле $Writers появляется только в случае включения режима блокировки.
 
T

turumbay

Своё решение есть (открытие в режиме просмотра, в PostOpen перевод в EditMode. Если занято, то выскакивает сообщение, и после этого пользователь остается в режиме просмотра). Это решение работает и всех устраивает, но мне не нравится!!! Немного коряво и чувствую, что решение есть, так как в выскакивающем сообщение написано кто блокирует. У меня чисто профессиональный интерес.
Это в действии. Фича малоизученная и потому неоднозначная. Может отравлять жизнь разработчику вообще и фоновым агентам в частности...
Скриптом до нее можно добраться через апишные NSFDbNoteLock/NSFDbNoteUnlock. можно посмотреть пример кода.
 
A

AndyOrlov

Это в действии. Фича малоизученная и потому неоднозначная. Может отравлять жизнь разработчику вообще и фоновым агентам в частности...
Скриптом до нее можно добраться через апишные NSFDbNoteLock/NSFDbNoteUnlock. можно посмотреть пример кода.
ОГРОМНОЕ СПАСИБО! Всё получилось. Я чувствовал, что можно обойтись без включения режима блокировки!!!
1. Взял библиотеку из статьи и положил её в БД под именем "SoftLocking".
2. На форме в разделе [Option] подключил эту библиотеку Use "SoftLocking"
3. В событии QueryOpen использую ф-цию IsDocSoftLocked
Dim doc As NotesDocument
Dim doc As NotesDocument
Set doc=Source.DOCUMENT
If IsDocSoftLocked(doc) Then
Print"Документ заблокирован"
Else
Print"Документ свободен"
End If
ВСЁ СУПЕР!!!
 
X

xKlonx

AndyOrlov
Посмотрите , ещё один вариант блокировки документа
 
A

AndyOrlov

AndyOrlov
Посмотрите , ещё один вариант блокировки документа
Спасибо за ссылку!
Но это же вариант рукописной блокировки с использованием полей, видов и событий Open и Close. Я сразу отказался от такого варианта, так как в случае сбоя надо подчищать поля. Из-за этого же я и со службой блокировки связываться не хотел.
Вариант, который прислал turumbay я считаю 100% попаданием для решения моей задачи.
Ещё раз огромное ему СПАСИБО!
 
M

morpheus

AndyOrlov
эээ при включении дебагера такая блокирувка обходиться на ура
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
непонятна цель действий...
нотус не РСУБД и устраивать подобные "фокусы" просто нет смысла
 
M

morpheus

AndyOrlov
имел в виду любые вызовы блокировки документа, которые происходят в интерфейсе пользователя скриптом.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!