Откат Документов

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

  1. Chron

    Chron Well-Known Member

    Регистрация:
    16 авг 2010
    Сообщения:
    49
    Симпатии:
    0
    Всем привет. Столкнулся с проблемой... Есть база электронного документооборота, есть в ней многозначные поля с исполнителями и соответствующее поле со значениями статуса исполнения документа этими исполнителей... В какой-то определенный момент времени документ откатывает назад, то есть приходит к первоначальному виду... Проще говоря если документ был выполнен, исполнитель написал отчет об исполнении, дату и все такое, то через некоторое время документ чудит так, что вроде и не делал он этого... В чем прикол, код весь перерыл, ну нет так такого прикола, чтобы документ вот так вот просто брал и откатывал... может ли сервер системно влиять на такое дело?
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Реплики базы есть?
     
  3. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Chron, а в свойствах док-та что - кто и когда его модифицировал посл. раз?
     
  4. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    несинхрон во времени, на компах с реплик-копиями, вполне может дать такой эффект
     
  5. Chron

    Chron Well-Known Member

    Регистрация:
    16 авг 2010
    Сообщения:
    49
    Симпатии:
    0
    А вот как быстро определить, есть ли реплики у базы.. будь то локальные, на этом же сервере или на другом... Пробую при помощи аналайзера, он ругается на отсутствие файла dba4.nsf
     
  6. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    на сервере - открыть catalog.nsf

    Добавлено: но главное м.б. не сами реплики - а различие времени
     
  7. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    открыть свойство БД - история репликации
     
  8. Chron

    Chron Well-Known Member

    Регистрация:
    16 авг 2010
    Сообщения:
    49
    Симпатии:
    0
    В истории репликации все пусто... В общем-то и так мог бы сказать, что база в единственном экземпляре...
     
  9. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    где - на сервере? серверов сколько, каталог смотрели?
     
  10. Chron

    Chron Well-Known Member

    Регистрация:
    16 авг 2010
    Сообщения:
    49
    Симпатии:
    0
    На дочернем сервере...
     
  11. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    значит почистили ;)
     
  12. Chron

    Chron Well-Known Member

    Регистрация:
    16 авг 2010
    Сообщения:
    49
    Симпатии:
    0
    Дико извиняюсь, но вынужден апнуть тему. Проблема то не решилась, просто подзабил на нее, но с ростом количества пользователей проблема возникает все чаще. Уверен в одном, база в единственном экземпляре, репликации базы запрещена. Документы каким-то чудесным образом продолжают откатываться. Что за чертовщина творится, не понимаю...
     
  13. Darkhan

    Darkhan Well-Known Member

    Регистрация:
    14 дек 2012
    Сообщения:
    96
    Симпатии:
    4
    Может народ одновременно исполняет документ? Через УИ или в бэкенде
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    @Chron, точно запрещена репликация?
    История репликации между серверами пустая?
     
  15. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
  16. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
  17. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Реплик может и не быть, но документы с конфликтами могут быть вполне. Один пользователь открыл документ и что-то там делает, второй пользователь тоже открыл документ, но немного позже первого... первый завершил своё дело и сохранил документ, в истории сохранилась запись об этом, после этого второй пользователь завершил своё дело и тоже сохранил документ, в его версии в истории нет записи о действиях первого пользователя, но появилась запись об его истории и т.к. его действия последние и в итоге сохранилась его версия документа, то в истории документа "пропадёт" запись о действиях первого пользователя.

    Способы борьбы
    1. Хранить историю по каждому действию в отдельном респонз документе и показывать всю историю в эмбедед вью. Недостаток - большое количество документов в базе.
    2. При открытии документа на редактирование делать его копию (можно не сохранять), а при сохранении считывать новую копию документа с диска из базы и проверять не изменились ли какие-то поля уже после открытия. Ну хотя бы как минимум проверить время последнего изменения. Если что-то изменилось предпринять соответствующие действия на ваш вкус - сообщить пользователю, что оно не прав и не дать сохранить документ, втихоря скопировать историю с более новой версией и т.п. Недостаток - много всяких действий и кода с проверками.
    Следует учесть, что в качестве "второго пользователя" вполне может выступать какой-нибудь агент на сервере, работающий по расписанию.
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    я бы в отдельной базе хранил, а путь/реплику прописывал бы в документ при создании.
    Плюсы: всегда знаешь в какой базе история к документу, баз может быть over 9000, при критическом количестве - создаем новую базу и меняем настройку.

    Можно чуть проще:
    При открытии писать в глобальную переменную текущий документ.
    При сохранении переполучить документ из базы в другую переменную, затем проверить у документов $UpdateBY.
    Если размер не совпадает, то кто-то пересохранил документ.

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

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