Как Программно (на Ls) Узнать Кто Редактирует Документ? (без Использов

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

  1. AndyOrlov

    AndyOrlov Гость

    Задача:
    Документ сразу открывается в режиме редактирования.
    Перед открытием надо узнать не редактирует ли другой пользователь этот документ, и если да, то открыть в режиме просмотра.

    Пояснение:
    Задача на открытие документа в пределах одной реплики БД, так как при открытии на разных репликах сообщение о блокировке не появляется, а проблему конфликта решил.

    От себя:
    Форумы читал, но нужного ответа не нашел.

    Своё решение есть (открытие в режиме просмотра, в PostOpen перевод в EditMode. Если занято, то выскакивает сообщение, и после этого пользователь остается в режиме просмотра). Это решение работает и всех устраивает, но мне не нравится!!! Немного коряво и чувствую, что решение есть, так как в выскакивающем сообщение написано кто блокирует. У меня чисто профессиональный интерес.

    Если использовать режим блокировки, то всё ясно. Но надо без включения этого режима.
    Создание самописной блокировки... Понятно! Не пойдет.
    Заранее спасибо.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    в свойствах формы - 2я закладка
    Automatically enable Edit Mode

    Добавлено:
    поле $Writers - в случае если включена стандартная блокировка
     
  3. AndyOrlov

    AndyOrlov Гость

    Так в этом решение. Если сразу в EditMode, то после сообщения пользователь остается в виде. А у меня остается в документе в режиме просмотра.

    Так в этом и задачка. Режим блокировки в базе не включать, И как я понимаю, поле $Writers появляется только в случае включения режима блокировки.
     
  4. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Это soft locking в действии. Фича малоизученная и потому неоднозначная. Может отравлять жизнь разработчику вообще и фоновым агентам в частности...
    Скриптом до нее можно добраться через апишные NSFDbNoteLock/NSFDbNoteUnlock. Тут можно посмотреть пример кода.
     
  5. AndyOrlov

    AndyOrlov Гость

    ОГРОМНОЕ СПАСИБО! Всё получилось. Я чувствовал, что можно обойтись без включения режима блокировки!!!
    1. Взял библиотеку из статьи и положил её в БД под именем "SoftLocking".
    2. На форме в разделе [Option] подключил эту библиотеку Use "SoftLocking"
    3. В событии QueryOpen использую ф-цию IsDocSoftLocked
    Dim doc As NotesDocument
    Dim doc As NotesDocument
    Set doc=Source.DOCUMENT
    If IsDocSoftLocked(doc) Then
    Print"Документ заблокирован"
    Else
    Print"Документ свободен"
    End If
    ВСЁ СУПЕР!!!
     
  6. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
    AndyOrlov
    Посмотрите тут, ещё один вариант блокировки документа
     
  7. AndyOrlov

    AndyOrlov Гость

    Спасибо за ссылку!
    Но это же вариант рукописной блокировки с использованием полей, видов и событий Open и Close. Я сразу отказался от такого варианта, так как в случае сбоя надо подчищать поля. Из-за этого же я и со службой блокировки связываться не хотел.
    Вариант, который прислал turumbay я считаю 100% попаданием для решения моей задачи.
    Ещё раз огромное ему СПАСИБО!
     
  8. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    AndyOrlov
    эээ при включении дебагера такая блокирувка обходиться на ура
     
  9. AndyOrlov

    AndyOrlov Гость

    Про какую блокировку это? Рукописную или Soft Lock от turumbay?
     
  10. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.082
    Симпатии:
    300
    непонятна цель действий...
    нотус не РСУБД и устраивать подобные "фокусы" просто нет смысла
     
  11. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    AndyOrlov
    имел в виду любые вызовы блокировки документа, которые происходят в интерфейсе пользователя скриптом.
     
  12. AndyOrlov

    AndyOrlov Гость

    Тогда полностью согласен.
     
Загрузка...

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