Объединение Коллекции Документов Из Разных Баз

  • Автор темы Mitya
  • Дата начала
M

Mitya

#1
Гуру, подскажите, как собрать коллекции документов из разных баз в одну коллекцию.

1) Перебираю базы
2) Из каждой базы получаю по коллекции документов

Как мне получить суммарную коллекцию всех коллекций?

Спасибо.
 

divankin

Senjor developer
13.08.2009
182
0
#2
Никак.
Все документы коллекции должны быть из одной базы.

Зачем вам это нужно? Почему нельзя сначала обработать коллекцию из одной базы, затем коллекцию из другой?

Если очень нужно, то можно загнать все документы в массив или в лист.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#3
Если память не изменяет - коллекция работает в рамках одной базы.
Можно создать массив или список коллекций и перебирая базы заполнять каждую из коллекций
 

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#4
Никак.
Все документы коллекции должны быть из одной базы.

Зачем вам это нужно? Почему нельзя сначала обработать коллекцию из одной базы, затем коллекцию из другой?

Если очень нужно, то можно загнать все документы в массив или в лист.
либо их копии с указанием откуда они есть..
 
M

Mitya

#5
Никак.
Все документы коллекции должны быть из одной базы.

Зачем вам это нужно? Почему нельзя сначала обработать коллекцию из одной базы, затем коллекцию из другой?

Если очень нужно, то можно загнать все документы в массив или в лист.
Зачем....
потом я на базе этой коллекции формирую excel файл. А так, для каждой базы - свой Excel - печально =)

в Массив! это как?

Dim arr
Dim colldoc As NotesDocumentCollection
.........
for _ to _
......
Set colldoc =db.Search(SearchFormula,Nothing,0)
??????
Next
Call Excel(???)

p.s. NickProstoNick - память не изменяет. Метод Merge (Все документы, входящие в параметр метода, должны быть из той же БД, что и объект)
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#6
Документы в массив не надо. Лучше загнать коллекции в массив и немного переделать функцию Excel().
 

divankin

Senjor developer
13.08.2009
182
0
#7
Если через массив коллекций, то примерно так

Dim colldoc() As NotesDocumentCollection
.........
redim colldoc(count)
for _ to _
......
Set colldoc(i) =db.Search(SearchFormula,Nothing,0)

Next
Call Excel(colldoc)

Ну и внутри Excel помнить, что это массив
 

savl

Lotus team
28.10.2011
2 136
105
#8
Да можно все сделать это... Просто напишите свою DocumentCollection.
Суть: Свой класс, элементы: список баз где лежат документы(храним объекты баз), массив объектов(документов), массив UNIDов, счетчик элемента в коллекции, свои методы получения документов и все необходимое далее, включая сортировку, очистку и тд.
Стандартный ход, как и обработчик ошибок.
Что-то вроде этого должно быть:
Код:
Public Class collection
Private DbList List As Variant
Private Elements() As Variant
Private ElementsUID() As Variant
Private Count As Long
Private FldSort As String
Private TypeSort As Integer'(1-UP, 2 - DOWN, 0 - Not Sorting)
Private Nth As Long ' счетчик
....
End Class
Штука конечно память будет отжирать достаточно и скоростью не сильно обладает, но можно пооптимизировать.
Для задач, где надо одним действием обработать кучу документов из разных баз, подходить идеально (ИМХО)
На основе данного класса можно написать транзакционную коллекцию, да и транзакционный стэк.
 

garrick

Lotus team
26.10.2009
911
61
#9
потом я на базе этой коллекции формирую excel файл. А так, для каждой базы - свой Excel - печально =)
Что-то мешает сформировать файл по одной коллекции, а затем добавить в этот же файл данные из другой?
 

savl

Lotus team
28.10.2011
2 136
105
#10
И да, для данной задачи подойдет массив коллекций, как посоветовали Medevic и Divankin.
И размещать на для каждой базы на отдельном листе удобнее.

Или действительно дополнить просто Excel, как предложил garrick

offtop: как-то медленно стал печатать...
 

afest

Well-known member
16.06.2009
78
0
#11
дык тут вообще по ходу дела сервачным агентом пахнет... как уже сказали - создать массив коллекций и в расписании агента поставить его на ночь, никто тормозов домино не заметит, ну и на утро будет готов док
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#12
можно загонять в массив rid:unid, о получении конкретных данных уже "думать позже"
хранить доки - накладно как по памяти так и по трафику
о самих коллекциях тоже надо думать (о способе их получения)
может сделать "сервисную вьюшку" с ключами

Добавлено:
Что-то мешает сформировать файл по одной коллекции, а затем добавить в этот же файл данные из другой?
часто мешает тормознутость КОМа (через кот. любсят туды пихать данные) и размер данных
запихнуть, чтобы потом еле ворочать многомегабайтный файл - не лучший вариант
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#13
Интересно, почему вдруг все повелись на этот троллинг (невозможность загнать доки в NotesDocumentCollection из разных баз уже обсуждалась, как и все варианты собственных классов-контейнеров документов).
 

Anatoly

Lotus team
30.03.2007
223
0
#14
Интересно, почему вдруг все повелись на этот троллинг (невозможность загнать доки в NotesDocumentCollection из разных баз уже обсуждалась, как и все варианты собственных классов-контейнеров документов).
1.Автор о невозможности не в курсе. И, скорее всего, поиском не воспользовался
2.У остальных предверие выходных и сами выходные
3.Проблемма не тривиальная и, вообщем-то, практическая.

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

divankin

Senjor developer
13.08.2009
182
0
#15
Интересно, почему вдруг все повелись на этот троллинг (невозможность загнать доки в NotesDocumentCollection из разных баз уже обсуждалась, как и все варианты собственных классов-контейнеров документов).
Странные претензии. Человеку проще спросить, мне по кайфу поделиться своими знаниями. Для форума тоже хорошо - он живет.
Кому от этого плохо?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 233
18
#16
Странные претензии. Человеку проще спросить, мне по кайфу поделиться своими знаниями. Для форума тоже хорошо - он живет.
Кому от этого плохо?
Влад начал чистить форум, обьединять темы - теперь умничает ;)
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#18
мне по кайфу поделиться своими знаниями.
Вы считаете, что городить массив коллекций для того, чтобы выплюнуть результаты поиска по нескольким базам в один Excel-файл, нормальным решением и хорошим советом, тем более новичку? В чём заключаются здесь Ваши знания? В том, "каких извращенческих массивов здесь на форуме ещё не было"?

3.Проблемма не тривиальная и, вообщем-то, практическая.
Проблема в том, что человек не знает что такое массив (#5), и, походу, вообще ничего, отсюда и все "нетривиальные проблемы".
Разве здесь не очевиден внешний цикл по БД с записью/дописью в тот же файл в потоковом режиме? Зачем вообще тогда "собирать коллекции документов из разных баз в одну коллекцию"? Здесь же говорили на эту тему. Ответ на вопрос, наверное, потому что "Для форума тоже хорошо - он живет." ©
Это не Вам, Anatoly, это просто мысли вслух...
 

divankin

Senjor developer
13.08.2009
182
0
#19
Вы считаете, что городить массив коллекций для того, чтобы выплюнуть результаты поиска по нескольким базам в один Excel-файл, нормальным решением и хорошим советом, тем более новичку? В чём заключаются здесь Ваши знания? В том, "каких извращенческих массивов здесь на форуме ещё не было"?

Проблема в том, что человек не знает что такое массив (#5), и, походу, вообще ничего, отсюда и все "нетривиальные проблемы".
Разве здесь не очевиден внешний цикл по БД с записью/дописью в тот же файл в потоковом режиме? Зачем вообще тогда "собирать коллекции документов из разных баз в одну коллекцию"? Здесь же говорили на эту тему. Ответ на вопрос, наверное, потому что "Для форума тоже хорошо - он живет." ©
Это не Вам, Anatoly, это просто мысли вслух...
Идеальных решений вообще не бывает. Бывают наилучшие решения для данной конкретной задачи. Но специфика вопросов на форуме такова, что не хватает информации для правильной оценки как задачи, так и уровня разработчика. Поэтому на форуме предлагают разные варианты решения, а разработчик из них выбирает приемлимый для него.
Если посмотреть мое первое сообщение, то я тоже поинтересовался почему нельзя сначала обработать одну коллекцию, затем другую. Но дальше стало ясно, что автор склоняется к варианту с массивами, я показал ему, как этот вариант реализуется. Пусть узнает хоть один способ.
К сожалению, в теме так и не нашлось никого, кто бы разъяснил автору поточный способ обработки коллекций.
По части "извращенсческих массивов", то бывают ситуации, когда такое решение является оптимальным.
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#20
Но дальше стало ясно, что автор склоняется к варианту с массивами
Автор от незнания остановился на том, о чём он хоть что-нибудь слышал, на неверном для данной задачи решении, в чём все ему стали усердно помогать.

я показал ему, как этот вариант реализуется. Пусть узнает хоть один способ.
Всё по коллекциям и массивам документов есть в теме Сортировка документов коллекции, в т.ч. область применения массивов документов, и лучший по логике и проработанности алгоритм от Darker'а; можно было просто дать ссылку. Получилось не "старые песни о главном", а "новые о старом".

К сожалению, в теме так и не нашлось никого, кто бы разъяснил автору поточный способ обработки коллекций.
Пост garrick'а как раз был об этом. Он и пытался направить в нужную сторону.

По части "извращенсческих массивов", то бывают ситуации, когда такое решение является оптимальным.
Бывают. Но, исходя из условий задачи, сейчас не та ситуация.
В итоге бестолковая тема, которую заменил БЫ RTFM + просто здравый смысл (даже не надо читать кучу полезной инфы, что уже есть на форуме).