Копирование Новых Документов

seoman2

Lotus team
17.02.2010
458
1
#1
Есть задача, копировать новые документы с базы1 в базу2.
Я прохожу по всем документам в базе 1, с помощью GetDocumentByUNID ищу по UNID документ в базе 2.
Если ошибка, дока нет в базе 2, то док1 копирую с CopyToDatabase в базу 2.
Но при этом иногда появляется ошибка, что UNID док2 уже есть во второй базе.

Интересно почему?

понятно, что можно еще с unprocessedDocuments можно
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#2
Если всё так, как описано (док копируется с помощью CopyToDatabase), то очень странно... это говорит, что для создаваемого дока генерируется UNID, уже имеющийся в базе.. - редчайшая ситуация!

Я бы создавал документ с нуля и задавал ему исходный UNID, потом бы копировал все поля, так надёжнее.
 

savl

Lotus team
28.10.2011
2 131
102
#3
я раньше использовал этот метод "GetDocumentByUNID", но ушел в сторону одной большой вьюхи.
Где документы отсортированы по UNID и искал по вьюхе.
Почему ушел: GetDocumentByUNID может вернуть окурок.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#4
seoman2
При копировании документа, его UNID преобразуется по одному и тому же алгоритму, без случайной составляющей. Т.е. если дважды копировать документ, оба раза сгенерируется один и тот же UNID, но отличный от исходного. По тому же алгоритму меняется и $Ref и $Links. Потому в копиях документов одной и тоже БД, сохраняется респонсная иерархия и работают доклинки. Ещё обратите внимание, что после удаления документа, в БД остаётся его стаб со старым UNID. Поэтому UNID может конфликтовать и с удалённым документами.
Как вариант решения - пишите UNID исходного документа в отдельное поле скопированного документа и поиск во 2й БД делайте по вьюшке.
Либо назначайте UNID сами, равным UNID исходного документа, как советовал VladSh.
Для скорости можно совместить решения. Сначала искать через GetDocumentByUNID и если не найден - искать по виду.
 

seoman2

Lotus team
17.02.2010
458
1
#5
ПОчему то попытка загнать в коллекцию с помощью
unprocessedDocuments выдает
can't get left-to-do list database
 

TIA

:-)
Lotus team
15.05.2009
790
3
#7
Агент должен быть шедульным, типа "all new & modified documents"
Ещё можно использовать search с временной отсечкой.