1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. StarikStarik2705

    StarikStarik2705 Well-Known Member

    Репутация:
    0
    Регистрация:
    8 фев 2012
    Сообщения:
    103
    Симпатии:
    0
    есть База Данных
    Выписываем документ поль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:
     
  2. Kizarek86

    Kizarek86 Well-Known Member
    Lotus team

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

    StarikStarik2705 Well-Known Member

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

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

    Kizarek86 Well-Known Member
    Lotus team

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

    Gandliar Well-Known Member
    Lotus team

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

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

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

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

    Kizarek86 Well-Known Member
    Lotus team

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

    lmike нет, пердело совершенство
    Lotus team

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

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

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

    Dragon108 Well-Known Member

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

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

    hosm * so what *

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

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