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

Andre

Green Team
29.07.2004
114
1
BIT
2
Имеем базу в формате 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.

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

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

Akupaka

попробуй вместо CopyToDatabase создавать в конечной базе документ, и использовать CopyAllItems и Save(Force=True)
правда, не знаю будет ли это корректно для дизайн-документов... по-идее, должно...

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

Andre

Green Team
29.07.2004
114
1
BIT
2
CopyAllItems напрямую не помогает. Возможно недосмотрел какое-нибудь хитрое поле типа $Formula. Попробую еще проверить этот вариант.

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

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

Akupaka

а с доступом проблем нету?..
 

Andre

Green Team
29.07.2004
114
1
BIT
2
При переносе при помощи CopyAllItems все item переносятся, типы их сохраняются, но документ не считается элементом дизайна. Виден как обычный документ в обычной view.
Не хватает флажка дабы док считался дизайном ?

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

Omh

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

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

Andre

Green Team
29.07.2004
114
1
BIT
2
DXL - в общем конечно вариант, но поскольку база должна и под R5 работать, то придется это все реализовывать через динамическое выполнение кода через Execute с проверкой build. А перспектива творить разные ветки кода для разных релизов не сильно вдохновляет.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!