Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум программистов _ Oбщий функционал _ Запрет открытия Lock'ного док-та

Автор: Morpheus 30:05:2007, 13:34

Вопрос

Цитата
Э.. народ , а случаем никто не предотвращал открытие/редактирование документов более чем одним (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")))


Автор - ]]>http://forum.codeby.net/go.php?http://forum.sysadmins.ru/profile.php?mode=viewprofile&u=31050]]>

]]>http://forum.codeby.net/go.php?http://forum.sysadmins.ru/viewtopic.php?p=7616841]]>

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

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

 

Форум Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)