копирование документов

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

  1. nadezdaMP

    nadezdaMP Гость

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

    копировала методом Call doc.CopyToDatabase(db),
    пробовала искать по unid ранее скопированные документы, но ругается что invalid universal ID, видимо после копирования в базу документа его unid меняется....

    подскажите пожалуйста как лучше докопировать оставшиеся документы?
     
  2. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    самый простой способ - удалить документы из БД приемник и заново скопировать из БД источник
    в документе создай вычисляемое поле "ID" с формулой @if(id="";@Text(@DocumentUniqueID);id), тогда ты всегда сможешь обратиться в любой базе по этому полю и сравнить с другими документами
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    согласен, удаляйте всё что накопировали и заново но теперь с указанием ИД оригинала
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а если сделать так:

    Код (Text):
    dim sourceDb as NotesDatabase
    dim sourceDoc as NotesDocument
    dim targetDb as NotesDatabase
    dim targetDoc as NotesDocument

    set sourceDb = GetSourceDb()
    set sourceDoc = sourceDb . GetSourceDocument

    set targetDb = GetTargetDb()
    set targetDoc = targetDb.CreateDocument
    call sourceDoc.CopyAllItems(targetDoc, True)
    targetDoc.UniversalID = sourceDoc.UniversalID
    call targetDoc.Save(...)
    то можно еще и в двух разных базах поиметь документы с одинаковыми унидами. иногда удобно :)
     
  5. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0

    При использовании CopyToDatabase согласно IBM UNID не меняется, но только последние 16 символов из UNID. Первые 16 символов описывают replica id базы.
    Подробности можно посмотреть тут

    Итого: для поиска по unid ранее скопированных документов UNId необходимо собрать следующим образом:
    replicaid базы приемника + последние 16 символов из оригинального UNID документа
     
  6. nadezdaMP

    nadezdaMP Гость

    как удлаить все документы из базы так чтобы сразу на совсем?
    метод notesDocumentCollection.RemoveAll( force ) удалит только
    если soft deletions не включены,
    если soft deletions are enabled, the documents are available in a soft deletions view until removed from that view.

    можно ли скриптом обойти это и грохнуть сразу?? как??

    зы за предыдущие ответы спасибо!!!!
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    пересоздай базу из шаблона

    Call notesDocumentCollection.RemoveAll( force ) удаляет все, если параметр True. где ты про софт взяла? в какой версии?
    только стабы останутся все-равно! хотя их тоже можно убить.

    если база сама по себе, то пересоздать проще
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Call Doc.RemovePermanently
    Ещё формула есть кажется, что-то там
    Код (Text):
    @HardDeleteDocument
     
  9. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Call doc.CopyToDatabase(db) преобразовывает UNIDы всех копируемых документов одинаковым образом. Что-то типа меняет первую часть UNID на часть от ReplicaId целевой БД. И если в целевой БД нет документа с получившимся UNID, то он и назначается копии. Т.о. если уточнить, какова закономерность изменения UNID при копировании, тогда можно определить какие документы исходной БД точно были скопированы. Остальные документы исходной БД (надеюсь, что их останется небольшой процент) можно определить сравнением полей.

    Блин, пока писал, Andre уже тоже самое предложил
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    да, если разговор идет о кол-ве до ста, то я буду плакать ))
     
  11. nadezdaMP

    nadezdaMP Гость

    это в хелпе версии 8.5 написано, пор софт.

    как убить стабы??? мне нужно точно - грохнуть документы, чтобы размер базы уменьшился,
    чтобы было ясно что база без документов по ее размеру и что ее можно грохнуть)))
     
  12. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    эм... сначала грохнуть доки, потом проверить грохнулись ли, чтобы удалить базу? :) ;)

    вот, только осторожно с этой фичей!!!
    http://www-01.ibm.com/support/docview.wss?...uid=swg21095683
     
  13. nadezdaMP

    nadezdaMP Гость

    ясно, спасибо!!!
    прошу прощения что сыплю вопросами,
    но очень срочно надо -
    можно ли из документа определить к какой папке или вью он принадлежит/(принадлежал)??
     
  14. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Set notesView = notesDocument.ParentView - оно?
     
  16. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    По размеру БД не надёжно. От версии NSF зависит, от актуальности индексов видов и т.п.
    Если у вас есть права ко всем документам БД лучше проверять Db.AllDocuments.Count = 0.
    Кстати, если у копии документа получился такой же UNID, как у стаба, то стаб нормально перезатрётся. Т.е. для копии не будет подбираться другой UNID

    Добавлено:
    Принадлежность к вьюшке определеяется селекшен-формулой вьюшки.

    Принадлежность к папке можно определить только если включен notesDatabase.FolderReferencesEnabled (см. хелп про данное св-во)
     
  17. Klido

    Klido Гость

    вид, из которого получен док, если он получен из вида... а вот как определить "принадлежал"? :)

    а папок может быть несколько - где-то в инете проскакивало определение - для почты функционал, возможно, есть в экстендед-майл шаблоне на openntf... в почте 8х вроде уже есть сразу функция показывать в каких папках доку - можно там попробовать посмотреть...

    Добавлено:
    ух. а кто мешает посмотреть в свойствах базы на 2-й вкладке кол-во документов?
     
  18. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Так программно же надо, наверно. Или как, nadezdaMP ?
     
  19. Klido

    Klido Гость

    программно одну единственную базку удалять? по-моему вы углубились не по-детски в LS :)
     
  20. nadezdaMP

    nadezdaMP Гость

    нет, баз около 3000 и скрипт будет использоваться не один раз)) ради одной я бы послала к админам и пусть разбираются))

    ок, если допустим из базы был скопирован документ в другую базу, то можно из этого скопированного документа определить, к какой папке или виду он принадлежал до копирования из родитальской базы??? :newconfus:
     
Загрузка...

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