• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы StarikStarik2705
  • Дата начала
S

StarikStarik2705

есть База Данных
Выписываем документ поль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

Green Team
20.07.2007
871
7
BIT
38
У меня на сохранении в вебе висит агент, который проверяет корректность данных, и если все корректно отправляет сабмит форме.
При этом есть проверка даты изменения документа, если она различается в текущем документе и том который актуален для БД то недаю сохранять документ.
 
S

StarikStarik2705

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


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

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
даааа но если мой дорогой второй пользователь оставил документ открытым и не сохранил ещё и точно так эе первый как быть?

Проблема то в чем?
При сохранении документа вторым пользователем и сработает условие.
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Может есть смысл сделать функционал блокировки под веб?

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

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

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

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Может есть смысл сделать функционал блокировки под веб?

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

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

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

Ну вариантов то навалом.
Все зависит от задачи.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
если работа производится на одном сервере - очередь, для координации (и не надо мутить создание доков)
при простое - выдаётся предупреждение, также выдаётся при входе "второго" пользователя, по таймауту - отваливается блокировка и сессия закрывается без сохранения
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
При открытии документа юзером на редактирование создается блокирующая запись в базе, при отмене - блокирующая запись удаляется (или автоматом удаляется через n часов)

...

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

Dragon108

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


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

hosm

Вот тут основы (за ссылки спасибо lmike) и вот тут обсуждается еще вариант поддержки разных платформ link removed
 
Мы в соцсетях:

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