Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




 
Ответить Новая тема 
> Запрет открытия Lock'ного док-та, Усовершенствуем Doc Lock
Morpheus
Вставить ник
сообщение 30:05:2007, 13:34
Цитата Ответить 


очень злой модератор
Иконка группы

Группа: Lotus team
Сообщений: 3 221
Регистрация: 7:08:2006
Из: Украина, Киев
Пользователь №: 5 807



Репутация:   54  


Вопрос
Цитата
Э.. народ , а случаем никто не предотвращал открытие/редактирование документов более чем одним (1) пользователем ? Ну .. э .. типа если один человек открыл (читает / редактирует) документ то уже никто другой не может открыть документ [даже для просмотра].


Суть
В 6ке появился новый метод Lock у notesDocument. Он запрещает редактирование документа более чем одному пользователю одновременно. А вот открытие этого документа, при условии что ктото другой(в этот момент) уже редактирует? Как отследить?

Ответ

в Queryopen ставим
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) 
   Dim doc As NotesDocument
   Dim session As New notessession    
   Dim user As notesname
   Dim Lockers As Variant
   Set doc = source.Document
   expression = "@DocLock([STATUS])"
   Lockers= Evaluate(expression,Doc)
   Set user = New NotesName(Cstr(session.UserName))
   If Cstr(Lockers(0))="" Then
      Continue=True
   Else
      Continue=False
      Forall names In lockers
         If names= Cstr(user.Abbreviated) Then
            Continue=True
         Else
            Continue=False
         End If
      End Forall      
   End If
   If    Continue=False Then
      Msgbox "Документ сейчас открыт пользователем " + Cstr(Lockers(0)) + Chr(13) + "Свяжитесь с ним или администратором если вам необходимо открыть этот документ" + Chr(13) + "Или попросите пользователя открыть этот документ и закрыть.",64,"Locking"
   End If
End Sub


в PostOpen ставим
@If(@DocLock([Status]) = "";@Do(@DocLock([Lock]);@StatusBar("Locking Succesfull"));@StatusBar("Already locked. Document is already locked by " + @DocLock([Status])))


в QueryClose + Terminate ставим
@If(@IsNotMember(@V3UserName;@DocLock([Status]));@StatusBar("Not authorized Document was locked by " +@DocLock([Status]) + ". Contact the lock owner");@Do(@DocLock([Unlock]);@StatusBar("Document Unlocked")))


Автор - ]]>Koyote23]]>

]]>Обсуждение]]>

Комментарий модератора
Не совсем понятно почему автор не использует LockHolders property , а использует
expression = "@DocLock([STATUS])" Lockers= Evaluate(expression,Doc)

Не забываем включить в опциях БД возможность лочить документы, и указываем Master lock server

Сообщение отредактировал Morpheus - 30:05:2007, 13:54
Прикрепленные файлы
Прикрепленный файл  LOck.jpg ( 45.75 килобайт ) Кол-во скачиваний: 119
 
Подняться вверх 
 
Сообщение #1


Ответить  Новая тема 

 

RSS Текстовая версия Сейчас: 2:12:2008 - 12:43

с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net