Ошибка при использовании метода Copytodatabase.

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

  1. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Имеем базу в формате ods41 (Lotus R5). База работает под Lotus R5, R6, R7.
    База локальная и играет роль инсталлятора.
    В базе есть view отбирающая и показывающая все элементы дизайна.

    Имеем код, который перебором по view получает документы (они же элементы дизайна) и при помощи метода CopyToDatabase копирует в нужную нам базу (например почтовую).
    Перед копированием "старые" элементы дизайна при их наличии в целевой БД удаляет.

    В 95% случаев все проходит на ура. Иногда возникают проблемы в случае, если в дизайн локальной базы (инсталлятора) внесли какие-нить изменения и затем запустили код по копированию/обновлению.
    При этом например элементы дизайна изменились неделю назад, Lotus и комп перегружались неоднократно, код по копированию запускается скажем сегодня.

    Проблемы возникают только для Lotus R6 или R7. Ошибка на строке с вызовом CopyToDatabase -
    Notes error: Someone else modified this document at the same time (I:\Lotus\SMS\SMS_154.ns5) №ошибки 4005.

    Собственно вопрос - кто-нить сталкивался ?

    З.Ы. Способ лечения найден пока только один - в базе инсталляторе скопировать проблемный элемент дизайна,старый удалить и новый элемент дизайна переименовать в старый.
    Но хотелось бы добраться до сути.
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    попробуй вместо CopyToDatabase создавать в конечной базе документ, и использовать CopyAllItems и Save(Force=True)
    правда, не знаю будет ли это корректно для дизайн-документов... по-идее, должно...

    правда, не совсем понятно, почему помогает изменение в базе-источнике... либо я не понял откуда куда копируется документ :rolleyes:
     
  3. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    CopyAllItems напрямую не помогает. Возможно недосмотрел какое-нибудь хитрое поле типа $Formula. Попробую еще проверить этот вариант.

    Вот и мне не понятно - почему единственный способ лечения найденный пока - в инсталляторе скопировать\заменить проблемный элемент дизайна.

    Для ясности - направление копирования "Инсталлятор" - "Почтовая база".
    Все изменения делаются в "инсталляторе".
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
  5. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    При переносе при помощи CopyAllItems все item переносятся, типы их сохраняются, но документ не считается элементом дизайна. Виден как обычный документ в обычной view.
    Не хватает флажка дабы док считался дизайном ?

    С доступом имхо проблем нет - при попытке обращения к items - проблем не возникает.
    IsValid возвращает true
    IsDeleted возвращает false
     
  6. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Как вариант решения:
    Этот перенос делается из под R5?
    Если уже на R6 и выше, может попробовать копирование заменить на DXLExporter (src) -> DXLImporter (dst)?
    C соответсвующей NotesDXLImporter.DesignImportOption.

    Если по делу, то посему такая ошибка появляется у меня идей, к сожалению, нет.
    Случайно design locking не поднят в source базе?
     
  7. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    DXL - в общем конечно вариант, но поскольку база должна и под R5 работать, то придется это все реализовывать через динамическое выполнение кода через Execute с проверкой build. А перспектива творить разные ветки кода для разных релизов не сильно вдохновляет.

    Про design и document locking мысли были, но база в 5-ном формате. Там этого счастья по официальной версии не было.
    В качестве теста под R6 делалась попытка проверки на isDocumentLockingEnabled и isDesignLockingEnabled - результаты False. Принудительный unlock в этом случае генерит ошибку.
     
Загрузка...

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