• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

seoman2

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

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

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

VladSh

начинающий
Lotus Team
11.12.2009
1 791
157
BIT
120
Интересно почему?
Если всё так, как описано (док копируется с помощью CopyToDatabase), то очень странно... это говорит, что для создаваемого дока генерируется UNID, уже имеющийся в базе.. - редчайшая ситуация!

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

savl

Lotus Team
28.10.2011
2 607
313
BIT
261
я раньше использовал этот метод "GetDocumentByUNID", но ушел в сторону одной большой вьюхи.
Где документы отсортированы по UNID и искал по вьюхе.
Почему ушел: GetDocumentByUNID может вернуть окурок.
 
T

TIA

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

seoman2

Green Team
17.02.2010
507
1
BIT
70
ПОчему то попытка загнать в коллекцию с помощью
unprocessedDocuments выдает
can't get left-to-do list database
 
T

TIA

Агент должен быть шедульным, типа "all new & modified documents"
Ещё можно использовать search с временной отсечкой.
 
Мы в соцсетях:

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