Предупреждение О Сохранении Конфликтов

StarikStarik2705

Well-Known Member
08.02.2012
103
0
#1
есть База Данных
Выписываем документ поль1 и поль2

поль2. заходит в док нажимает редактировать не закрывает.
в это время поль1 заходит в свой док и закрывает его вместе с дочерними.
поль2 пытается сохранить документ.

без дорабтки лотус предложит сохранить конфликт, с доработкой выдаст предупреждение (Msgbox "В документ были внесены изменения после открытия вами." + lf + "Переоткройте документ для просмотра состояния документа.") и закроет док.


Подформа ActBar_01
Код:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If Not noConflict(Source) Then
Let Source.Document.SaveOptions = "0"
Continue = False
Call Source.Close()
Exit Sub
End If
End Sub

Function noConflict( Source As NotesUIDocument ) As Boolean

On Error Goto ERROR_HANDLER

Goto START
ERROR_HANDLER:
On Error Goto 0
Error Err, Error$ & Chr(10) & Getthreadinfo(1) & " (" & Erl & ")"
Exit Function
START:

Const lf = |
|

noConflict = True
If Source.IsNewDoc Then Exit Function	'conflict is not possible

Dim ns As New NotesSession

Dim doc As NotesDocument, doc2 As NotesDocument, vu As NotesView
Set doc = Source.Document
Dim thisdate, thatdate, users
Dim username As NotesName
Dim usertext As String, user As String

Set vu = ns.CurrentDatabase.GetView( "AllDataBaseDocs" )
vu.Refresh
Set doc2 = vu.GetDocumentByKey( doc.UniversalID )
If doc2 Is Nothing Then Exit Function	'should only happen with a new doc, but just in case...

thisdate = doc.LastModified()
thatdate = doc2.LastModified()

If thisdate < thatdate Then
noConflict = False
Msgbox "В документ были внесены изменения после открытия вами." + lf + "Переоткройте документ для просмотра состояния документа.", 16, "Сохранение конфликтного документа"
End If

End Function

внимание впорос, как можно эту проверку реализовать для этой базы под Вебом? как опеределить что они оба нажали кнопку сохранить? :facepalm:
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#2
У меня на сохранении в вебе висит агент, который проверяет корректность данных, и если все корректно отправляет сабмит форме.
При этом есть проверка даты изменения документа, если она различается в текущем документе и том который актуален для БД то недаю сохранять документ.
 

StarikStarik2705

Well-Known Member
08.02.2012
103
0
#3
У меня на сохранении в вебе висит агент, который проверяет корректность данных, и если все корректно отправляет сабмит форме.
При этом есть проверка даты изменения документа, если она различается в текущем документе и том который актуален для БД то недаю сохранять документ.

даааа но если мой дорогой второй пользователь оставил документ открытым и не сохранил ещё и точно так эе первый как быть?
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#4
даааа но если мой дорогой второй пользователь оставил документ открытым и не сохранил ещё и точно так эе первый как быть?
Проблема то в чем?
При сохранении документа вторым пользователем и сработает условие.
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
329
6
#5
Может есть смысл сделать функционал блокировки под веб?

При открытии документа юзером на редактирование создается блокирующая запись в базе, при отмене - блокирующая запись удаляется (или автоматом удаляется через n часов)

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

Просто если форма большая и полей много то юзер долго заполняв ее и получив месадж о том что другой юзер сохранил... и вся работа текущего юзера была зря...
 

Kizarek86

Well-Known Member
Lotus team
20.07.2007
863
6
#6
Может есть смысл сделать функционал блокировки под веб?

При открытии документа юзером на редактирование создается блокирующая запись в базе, при отмене - блокирующая запись удаляется (или автоматом удаляется через n часов)

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

Просто если форма большая и полей много то юзер долго заполняв ее и получив месадж о том что другой юзер сохранил... и вся работа текущего юзера была зря...
Ну вариантов то навалом.
Все зависит от задачи.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 486
363
#7
если работа производится на одном сервере - очередь, для координации (и не надо мутить создание доков)
при простое - выдаётся предупреждение, также выдаётся при входе "второго" пользователя, по таймауту - отваливается блокировка и сессия закрывается без сохранения
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#8
При открытии документа юзером на редактирование создается блокирующая запись в базе, при отмене - блокирующая запись удаляется (или автоматом удаляется через n часов)

...

если форма большая и полей много то юзер долго заполняв ее и получив месадж о том что другой юзер сохранил... и вся работа текущего юзера была зря...
И эти n часов все остальные курят?)))
На Лотусе же не учётные системы пишут, тут важно, чтобы все пользователи работали и не ощущали дискомфорта.. "Подождите n часов" здесь просто не прокатит, т.к. стоимость документа или часа работы иногда доходит до сотен тысяч долларов... У нас даже когда-то был такой случай, - ген.дир-заказчик как-то выразился подобным образом: "А нах... мне ваше сообщение, что документ заблокировал г.-н 'подметало'?"
lmike правильно сказал - очередь.
 

Dragon108

Well-Known Member
19.01.2010
265
0
#9
И эти n часов все остальные курят?)))
На Лотусе же не учётные системы пишут, тут важно, чтобы все пользователи работали и не ощущали дискомфорта.. "Подождите n часов" здесь просто не прокатит, т.к. стоимость документа или часа работы иногда доходит до сотен тысяч долларов... У нас даже когда-то был такой случай, - ген.дир-заказчик как-то выразился подобным образом: "А нах... мне ваше сообщение, что документ заблокировал г.-н 'подметало'?"
lmike правильно сказал - очередь.

Просто читал данную тему на форуме и наткнулся на "Очередь".
Что под этой "Очередью" имеется ввиду? какая то стандартная настройка лотуса или какое то программное решение?