Предотвращение конфликтов

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Собственно кто как борется с появлением конфликтов в базе?

Конфликты возникают в такой ситуации:

1. 1 документ -
Открыт на чтение - Иванов
Открыт на редактирование - Петров
2.Петров изменяет и сохраняет документ. после чего Иванов переходит в режим редактирования документа, таким образом при сохранении он получит конфликт.

Как боротца?)

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
1) В момент перехода в режим редактирования проверить, не изменился ли документ.
2) Если изменился, то переоткрыть его.
Галки пашут для конфликтов репликации.
 
A

Akupaka

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

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
А одновременное редактирование и не происходит.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Пункт 2. Я думаю, имеется в виду, что Петров закрывает документ, а Иванов переходит в режим редактирования.
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Akupaka
Вроде не пишу)) Пишу что чтение происходит одновременное)

1) В момент перехода в режим редактирования проверить, не изменился ли документ.
2) Если изменился, то переоткрыть его.
Галки пашут для конфликтов репликации.

Как проверить изменение?)
_tmpdocID := @Text(@DocumentUniqueID);
_tmpField1 := @GetDocField(_tmpdocID,"Field1");
@If(_tmpField1 = Field1;"открываем на редактирование";"переоткрываем")

даже если Field1 было изменено в открытом на чтение документе, то возвращается значение в открытом...т.е. такой конструкцией изменение документа не поймать....
 
A

Akupaka

написано явно, что документ открывается на изм двумя, т.е. не указано, чтобы Петров закрывал его до того, как Иванов откроет на изм...

Открыт на чтение - Иванов
Открыт на редактирование - Петров
2.Петров изменяет и сохраняет документ. после чего Иванов переходит в режим редактирования документа

проверить можно только взяв документ в бэкгроунде...
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Сделать можно в Querymodechange. Что-то типа:
Код:
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim noteID As String

Set db = session.CurrentDatabase
Set doc = Source.Document
noteID = doc.NoteID
Delete doc
Set doc = db.GetDocumentByID(noteID)

If doc.LastModified > Source.Document.LastModified Then
'документ был изменён. переоткрываем его.
Call Source.Close()
Set uidoc = ws.EditDocument(True, doc, False)
End If
 
X

Xalet

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

извинения за оффтоп
 
A

Akupaka

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

наверное, это блокировка документов (свойство БД, Allow document locking), если открыть на редактирование док, то будет наложена временная блокировка...
я просто специально этого не исследовал, не уверен на все 100...
 
X

Xalet

xalet, не, там как-то появляется сообщение, что документ уже открыт на редактирование пользователем таким-то... и не дает сменить режим...
Так тут как раз случай, что открыли оба документ. Один отредактировал, сохранил и закрыл. Второй в это время читал. Дочитал, тоже отредактировал и сохранил. В таком случае ноутсы выдадут предупреждение и нажав, что согласны, возникнет конфликт сохранения.
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
119
Всем спасибо, проблема решена переоткрытием)

Medevic
Отдельный респект.
 
A

Akupaka

немного оффтопа, а в восьмерке уже поправили дебагер? при EditDocument код отлаживать можно в новом открытом окне?..
 
E

Extraterrestrial

Так тут как раз случай, что открыли оба документ. Один отредактировал, сохранил и закрыл. Второй в это время читал. Дочитал, тоже отредактировал и сохранил. В таком случае ноутсы выдадут предупреждение и нажав, что согласны, возникнет конфликт сохранения.

Интересно, а если включена опция Allow document locking, это также работает?
 
X

Xalet

Интересно, а если включена опция Allow document locking, это также работает?

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

Extraterrestrial

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

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

PaVaP

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

наверное, это блокировка документов (свойство БД, Allow document locking), если открыть на редактирование док, то будет наложена временная блокировка...
я просто специально этого не исследовал, не уверен на все 100...

Soft Locking and Hard Locking
 
Мы в соцсетях:

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