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

  • Автор темы nadezdaMP
  • Дата начала
N

nadezdaMP

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

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

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

erdi

Well-known member
20.08.2008
265
17
#2
самый простой способ - удалить документы из БД приемник и заново скопировать из БД источник
в документе создай вычисляемое поле "ID" с формулой @if(id="";@Text(@DocumentUniqueID);id), тогда ты всегда сможешь обратиться в любой базе по этому полю и сравнить с другими документами
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#3
согласен, удаляйте всё что накопировали и заново но теперь с указанием ИД оригинала
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#4
копировала методом Call doc.CopyToDatabase(db),
а если сделать так:

Код:
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(...)
то можно еще и в двух разных базах поиметь документы с одинаковыми унидами. иногда удобно :)
 

Andre

Well-known member
29.07.2004
108
0
#5
копировала методом Call doc.CopyToDatabase(db),
пробовала искать по unid ранее скопированные документы, но ругается что invalid universal ID, видимо после копирования в базу документа его unid меняется....

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

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

nadezdaMP

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

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

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#7
как удлаить все документы из базы так чтобы сразу на совсем?
пересоздай базу из шаблона

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

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

Omh

Lotus team
04.07.2007
2 210
1
#8
Код:
Call Doc.RemovePermanently
Ещё формула есть кажется, что-то там
Код:
@HardDeleteDocument
 

TIA

:-)
Lotus team
15.05.2009
790
3
#9
Call doc.CopyToDatabase(db) преобразовывает UNIDы всех копируемых документов одинаковым образом. Что-то типа меняет первую часть UNID на часть от ReplicaId целевой БД. И если в целевой БД нет документа с получившимся UNID, то он и назначается копии. Т.о. если уточнить, какова закономерность изменения UNID при копировании, тогда можно определить какие документы исходной БД точно были скопированы. Остальные документы исходной БД (надеюсь, что их останется небольшой процент) можно определить сравнением полей.

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#10
Т.о. если уточнить, какова закономерность изменения UNID при копировании, тогда можно определить какие документы исходной БД точно были скопированы
да, если разговор идет о кол-ве до ста, то я буду плакать ))
 
N

nadezdaMP

#11
пересоздай базу из шаблона

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

если база сама по себе, то пересоздать проще
это в хелпе версии 8.5 написано, пор софт.

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#12
N

nadezdaMP

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

TIA

:-)
Lotus team
15.05.2009
790
3
#16
чтобы было ясно что база без документов по ее размеру и что ее можно грохнуть)))
По размеру БД не надёжно. От версии NSF зависит, от актуальности индексов видов и т.п.
Если у вас есть права ко всем документам БД лучше проверять Db.AllDocuments.Count = 0.
Кстати, если у копии документа получился такой же UNID, как у стаба, то стаб нормально перезатрётся. Т.е. для копии не будет подбираться другой UNID

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

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

Klido

#17
Set notesView = notesDocument.ParentView - оно?
вид, из которого получен док, если он получен из вида... а вот как определить "принадлежал"? :)

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

Добавлено:
По размеру БД не надёжно. От версии NSF зависит, от актуальности индексов видов и т.п.
Если у вас есть права ко всем документам БД лучше проверять Db.AllDocuments.Count = 0.
ух. а кто мешает посмотреть в свойствах базы на 2-й вкладке кол-во документов?
 
K

Klido

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

nadezdaMP

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

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