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

Тема в разделе "Lotus - Программирование", создана пользователем Kizarek86, 21 янв 2009.

  1. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Собственно кто как борется с появлением конфликтов в базе?

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

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

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

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    1) В момент перехода в режим редактирования проверить, не изменился ли документ.
    2) Если изменился, то переоткрыть его.
    Галки пашут для конфликтов репликации.
     
  3. Akupaka

    Akupaka А че я?.. О.о

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

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А одновременное редактирование и не происходит.
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    автор пишет, что происходит :(
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Пункт 2. Я думаю, имеется в виду, что Петров закрывает документ, а Иванов переходит в режим редактирования.
     
  7. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Akupaka
    Вроде не пишу)) Пишу что чтение происходит одновременное)

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    написано явно, что документ открывается на изм двумя, т.е. не указано, чтобы Петров закрывал его до того, как Иванов откроет на изм...

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Сделать можно в Querymodechange. Что-то типа:
    Код (Text):
    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
     
  10. Xalet

    Xalet Well-Known Member

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

    извинения за оффтоп
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    xalet, не, там как-то появляется сообщение, что документ уже открыт на редактирование пользователем таким-то... и не дает сменить режим...

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

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Так тут как раз случай, что открыли оба документ. Один отредактировал, сохранил и закрыл. Второй в это время читал. Дочитал, тоже отредактировал и сохранил. В таком случае ноутсы выдадут предупреждение и нажав, что согласны, возникнет конфликт сохранения.
     
  13. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Всем спасибо, проблема решена переоткрытием)

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    немного оффтопа, а в восьмерке уже поправили дебагер? при EditDocument код отлаживать можно в новом открытом окне?..
     
  15. Extraterrestrial

    Extraterrestrial Well-Known Member

    Регистрация:
    28 фев 2008
    Сообщения:
    267
    Симпатии:
    0
    Интересно, а если включена опция Allow document locking, это также работает?
     
  16. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Так же, если оба не будут пытаться залочить документ вначале чтения, что можно сделать в каком-нибудь кьюэри опен. Тогда кто первый начнет читать, тот залочит, а второму выдать соответственно сообщение и закрыть документ. А в кьюэри клоуз соответственно делать разлочивание.
     
  17. Extraterrestrial

    Extraterrestrial Well-Known Member

    Регистрация:
    28 фев 2008
    Сообщения:
    267
    Симпатии:
    0
    Вообще, по идее, если эта опция включена, то должно произойти при переходе в режим редактирования залочивание документа в бэкенде, в базе, который перед этим уже был сохранен другим пользователем, и данные должны бы были быть использованы при редактировании из этого документа...
     
  18. PaVaP

    PaVaP Member

    Регистрация:
    25 июн 2009
    Сообщения:
    23
    Симпатии:
    0
    Soft Locking and Hard Locking
    http://www-01.ibm.com/support/docview.wss?...uid=swg21174820
     
Загрузка...

Поделиться этой страницей