Если док находится на редактировании у №1, а №2 сохраняет LotusScript-ом?

Автор Тема: Если док находится на редактировании у №1, а №2 сохраняет LotusScript-ом?  (Прочитано 7337 раз)

cybergeene

  • Специалист
  • ***
  • Сообщений: 59
    • Просмотр профиля
    • E-mail
Стандартно реализована мягкая блокировка, т.е. при попытке войти в редактирование из клиента
лотус пользователю №2 говорит, что документ заблокирован таким-то юзерем.
Если же, как описано в заголовке темы, пользователь №2 сохранит документ с помощью кнопки, в которой стоит
doc.Save(False,True), то при нажатии на сохранить у первого пользователя появится сообщение о возможности
создания конфликта.
 Есть ли стандартная функция в LotusScript, позволяющая отловить то, что документ уже находится на редактировании
 у пользователя №1?
« Последнее редактирование: 07 Октябрь 2010, 18:23:19 от cybergeene »

ViV

  • Global Moderator
  • Профессионал
  • *****
  • Сообщений: 1428
  • Владимир Егоров
    • Просмотр профиля
    • lotusnotes.ru
    • E-mail
Обрабатывайте в лотусскрипте блокировки перед doc.Save

cybergeene

  • Специалист
  • ***
  • Сообщений: 59
    • Просмотр профиля
    • E-mail
Re: Если док находится на редактировании у №1,
« Ответ #2 : 15 Октябрь 2010, 15:58:27 »
Ну да, так и делаем. Создаем документ doc_lock, в  одном из полей которого записан UID залоченого дока, после выполнения doc.Save этот dock_lock удаляем.
Еще один способ хочу попробывать - запретить редактирование документа пользователями в событии документа QueryModeChange (т.е. Continue=False) и проверять doc.LastModified вот такой функцией

Function Reopen_doc (doc_old As NotesDocument, viewUID As NotesView) As NotesDocument
Dim doc_new  As NotesDocument
Dim UID_str As String
Dim LastMod As Variant
Dim LastMod1 As Variant

UID_str   =  doc_old.UniversalID
LastMod = doc_old.LastModified
Call viewUID.Refresh ' Панов из Интертраста рекоммендует
Call viewUID.Refresh ' 2 раза вызывать .Refresh для надежности

Set doc_new  = viewUID.GetDocumentByKey(UID_str)
LastMod1 = doc_new.LastModified
Print Str(Second(LastMod))+"     -    "+Str(Second(LastMod1))
If (LastMod <> LastMod1)  Then
Set Reopen_doc = doc_new
Else
Set Reopen_doc = Nothing
End If
End Function

Если возвращается Nothing, то документ не изменялся каким-либо способом (на заднем или переднем плане).
viewUID - представление, в котором документы в первом столбце упорядочены по UID (только таким образом можно достать ссылку на измененный кем-то документ)
« Последнее редактирование: 15 Октябрь 2010, 16:00:31 от cybergeene »