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

Тема в разделе "Lotus - Программирование", создана пользователем StarikStarik2705, 23 фев 2012.

  1. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    есть База Данных
    Выписываем документ поль1 и поль2

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

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


    Подформа ActBar_01
    Код (LotusScript):
    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:
     
  2. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    У меня на сохранении в вебе висит агент, который проверяет корректность данных, и если все корректно отправляет сабмит форме.
    При этом есть проверка даты изменения документа, если она различается в текущем документе и том который актуален для БД то недаю сохранять документ.
     
  3. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0

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

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Проблема то в чем?
    При сохранении документа вторым пользователем и сработает условие.
     
  5. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Может есть смысл сделать функционал блокировки под веб?

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

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

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

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Ну вариантов то навалом.
    Все зависит от задачи.
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    если работа производится на одном сервере - очередь, для координации (и не надо мутить создание доков)
    при простое - выдаётся предупреждение, также выдаётся при входе "второго" пользователя, по таймауту - отваливается блокировка и сессия закрывается без сохранения
     
  8. VladSh

    VladSh начинающий
    Lotus team

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

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
Загрузка...

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