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

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

  1. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    Гуру, подскажите, как собрать коллекции документов из разных баз в одну коллекцию.

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

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

    Спасибо.
     
  2. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Никак.
    Все документы коллекции должны быть из одной базы.

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

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Если память не изменяет - коллекция работает в рамках одной базы.
    Можно создать массив или список коллекций и перебирая базы заполнять каждую из коллекций
     
  4. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    либо их копии с указанием откуда они есть..
     
  5. Mitya

    Mitya Well-Known Member

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

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

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

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Документы в массив не надо. Лучше загнать коллекции в массив и немного переделать функцию Excel().
     
  7. divankin

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Если через массив коллекций, то примерно так

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

    Next
    Call Excel(colldoc)

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Да можно все сделать это... Просто напишите свою DocumentCollection.
    Суть: Свой класс, элементы: список баз где лежат документы(храним объекты баз), массив объектов(документов), массив UNIDов, счетчик элемента в коллекции, свои методы получения документов и все необходимое далее, включая сортировку, очистку и тд.
    Стандартный ход, как и обработчик ошибок.
    Что-то вроде этого должно быть:
    Код (LotusScript):
    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
    Штука конечно память будет отжирать достаточно и скоростью не сильно обладает, но можно пооптимизировать.
    Для задач, где надо одним действием обработать кучу документов из разных баз, подходить идеально (ИМХО)
    На основе данного класса можно написать транзакционную коллекцию, да и транзакционный стэк.
     
  9. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Что-то мешает сформировать файл по одной коллекции, а затем добавить в этот же файл данные из другой?
     
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    И да, для данной задачи подойдет массив коллекций, как посоветовали Medevic и Divankin.
    И размещать на для каждой базы на отдельном листе удобнее.

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

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

    afest Well-Known Member

    Регистрация:
    16 июн 2009
    Сообщения:
    78
    Симпатии:
    0
    дык тут вообще по ходу дела сервачным агентом пахнет... как уже сказали - создать массив коллекций и в расписании агента поставить его на ночь, никто тормозов домино не заметит, ну и на утро будет готов док
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    можно загонять в массив rid:unid, о получении конкретных данных уже "думать позже"
    хранить доки - накладно как по памяти так и по трафику
    о самих коллекциях тоже надо думать (о способе их получения)
    может сделать "сервисную вьюшку" с ключами

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

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Интересно, почему вдруг все повелись на этот троллинг (невозможность загнать доки в NotesDocumentCollection из разных баз уже обсуждалась, как и все варианты собственных классов-контейнеров документов).
     
  14. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    1.Автор о невозможности не в курсе. И, скорее всего, поиском не воспользовался
    2.У остальных предверие выходных и сами выходные
    3.Проблемма не тривиальная и, вообщем-то, практическая.

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

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Странные претензии. Человеку проще спросить, мне по кайфу поделиться своими знаниями. Для форума тоже хорошо - он живет.
    Кому от этого плохо?
     
  16. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    Влад начал чистить форум, обьединять темы - теперь умничает ;)
     
  17. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Видать, наболело....
     
  18. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Вы считаете, что городить массив коллекций для того, чтобы выплюнуть результаты поиска по нескольким базам в один Excel-файл, нормальным решением и хорошим советом, тем более новичку? В чём заключаются здесь Ваши знания? В том, "каких извращенческих массивов здесь на форуме ещё не было"?

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

    divankin Senjor developer

    Регистрация:
    13 авг 2009
    Сообщения:
    182
    Симпатии:
    0
    Идеальных решений вообще не бывает. Бывают наилучшие решения для данной конкретной задачи. Но специфика вопросов на форуме такова, что не хватает информации для правильной оценки как задачи, так и уровня разработчика. Поэтому на форуме предлагают разные варианты решения, а разработчик из них выбирает приемлимый для него.
    Если посмотреть мое первое сообщение, то я тоже поинтересовался почему нельзя сначала обработать одну коллекцию, затем другую. Но дальше стало ясно, что автор склоняется к варианту с массивами, я показал ему, как этот вариант реализуется. Пусть узнает хоть один способ.
    К сожалению, в теме так и не нашлось никого, кто бы разъяснил автору поточный способ обработки коллекций.
    По части "извращенсческих массивов", то бывают ситуации, когда такое решение является оптимальным.
     
  20. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Автор от незнания остановился на том, о чём он хоть что-нибудь слышал, на неверном для данной задачи решении, в чём все ему стали усердно помогать.

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

    Пост garrick'а как раз был об этом. Он и пытался направить в нужную сторону.

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

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