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

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

  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Есть задача, копировать новые документы с базы1 в базу2.
    Я прохожу по всем документам в базе 1, с помощью GetDocumentByUNID ищу по UNID документ в базе 2.
    Если ошибка, дока нет в базе 2, то док1 копирую с CopyToDatabase в базу 2.
    Но при этом иногда появляется ошибка, что UNID док2 уже есть во второй базе.

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

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

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Если всё так, как описано (док копируется с помощью CopyToDatabase), то очень странно... это говорит, что для создаваемого дока генерируется UNID, уже имеющийся в базе.. - редчайшая ситуация!

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    я раньше использовал этот метод "GetDocumentByUNID", но ушел в сторону одной большой вьюхи.
    Где документы отсортированы по UNID и искал по вьюхе.
    Почему ушел: GetDocumentByUNID может вернуть окурок.
     
  4. TIA

    TIA :-)
    Lotus team

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

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    ПОчему то попытка загнать в коллекцию с помощью
    unprocessedDocuments выдает
    can't get left-to-do list database
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    а базу как получаете? через notesUIworkspace?
     
  7. TIA

    TIA :-)
    Lotus team

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

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