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

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

Anatoly

Разве здесь не очевиден внешний цикл по БД с записью/дописью в тот же файл в потоковом режиме? Зачем вообще тогда "собирать коллекции документов из разных баз в одну коллекцию"? Здесь же говорили на эту тему. Ответ на вопрос, наверное, потому что "Для форума тоже хорошо - он живет." ©
А если записи из разных баз должны идти вперемешку? Скажем, в хронологическом порядке даты в документах?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Автор от незнания остановился на том, о чём он хоть что-нибудь слышал, на неверном для данной задачи решении, в чём все ему стали усердно помогать.
Почему неверное? Если работает, значит решение верное.

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

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

ЗЫ А если автор вообще не программист, но ему надо что-то поправить, т.к. больше некому? Не читать же ему весь FM и искать не зная чего.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
340
А если записи из разных баз должны идти вперемешку? Скажем, в хронологическом порядке даты в документах?
Потом в Excel ручками отсортировать проще. Или, если выгрузка через OLE, VBA "макрос" написать и запустить.
А в Lotus Notes в одну коллецию не соберёшь, массив имеет ограниченный размер - остаётся только Java Collections из классов-обёрток лотусовых документов.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
427
если выгрузка д.б. "интелектуальная" - тащить в хехель весь объем, да еще через ОЛЕ - бр-р-р
у массива меньше ограничения чем у жвм, при дефолтных настройках, притом - индекс, в 32 разрядах, ограничен одинаково
тащить полные объекты в массив - не рекомендовал бы так делать (ведь цель - получить текст)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
А если записи из разных баз должны идти вперемешку? Скажем, в хронологическом порядке даты в документах?
"А если" в условиях задачи не было.
А если всё таки "А если", то, например для "разовых" открытий результатов (выгрузка во временную папку - просмотрел и закрыл, а если надо - пусть сохраняет куда хочет), как вариант, возможна
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">сортировка по определённой колонке сразу же в Excel</div></div><div class="sp-body"><div class="sp-content">
Код:
'vbs-файл; VladSh
Dim objXL
Set objXL = CreateObject("Excel.Application")

If Not objXL Is Nothing Then
objXL.Visible = True

fileName = "%FILENAMEDATA1%"

xlXmlLoadOption = 2	'xlXmlLoadImportToList
Call objXL.Workbooks.OpenXML(fileName,, xlXmlLoadOption)

Set ActiveSheet = objXL.ActiveSheet
rowCount = ActiveSheet.ListObjects.Count
If rowCount <> 0 Then
Set UsedRange = ActiveSheet.UsedRange

SPEC_ELEMENT_SORT = "%COLUMNSORTNAME%"
Dim colNum
For i = 1 To ActiveSheet.ListObjects(rowCount).ListColumns.Count
If CStr(UsedRange.Cells(1, i).Value) = SPEC_ELEMENT_SORT Then
colNum = i
Exit For
End If
Next

'если не найдено, не сортируем!
If colNum <> 0 Then
'имя колонки, по которой будем сортировать
cName = Replace(UsedRange.Cells(1, colNum).Address(0, 0), 1, "") + "1"
Set objRange = objXL.Range(cName)
objRange.Select
xlYes = 1
MatchCase = False
UsedRange.Sort objRange,,,,,,,xlYes,,MatchCase
End If
End If
End If
а также я писал (но писать даже не нужно было, т.к. вариант этот лежит там помимо меня, нужно только попытаться найти информацию и всё получится):
и лучший по логике и проработанности алгоритм от Darker
Почему неверное? Если работает, значит решение верное.
Микроскопом гвозди тоже забиваются.
Так и у гугля можно спросить. :)
Я ж об этом же. С этого и надо начинать, прежде чем темы на форуме хреначить как робототехническая система.
Если есть желающие помочь, то почему бы не помочь?
Это благородно. Ну что ж с этим поделаешь...)
Я, наверное, думаю не с этой позиции, а с той, - какая будет польза всему комьюнити, а не отдельным личности, которые не в состоянии открыть хэлп и хотя бы посмотреть примеры кода, а не то чтобы даже прогнать некоторые страницы через гугл-тренслэйт.
 
D

divankin

Потом в Excel ручками отсортировать проще. Или, если выгрузка через OLE, VBA "макрос" написать и запустить.
А в Lotus Notes в одну коллецию не соберёшь, массив имеет ограниченный размер - остаётся только Java Collections из классов-обёрток лотусовых документов.
Не надо собирать все в одну коллекцию. И в Java тащить тоже не надо.
Делается класс: значения для Excel + сортировочное поле (или массив их для сложных сортировок)
Для каждого документа заполняется экземпляр класса, после этого документ больше не нужен. Экземпляр класса запихивается в массив (или в лист, если нужно обойти 32к)
Этот массив сортируется по значению сортировочного поля.
Функция выгрузки в Эксель берет значения из элементов этого массива так же, как раньше брала их из документов.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
Сначала нафигачат немеряных масивов/листов, тем более со своими объектами, а потом темы создают. Микроскопы для гвоздей и пушки для воробьёв - это наше всё.
 
D

divankin

Почему неверное? Если работает, значит решение верное.

Микроскопом гвозди тоже забиваются.

Оно не только рабочее, но и явно лучше того решения, на которое намекают твои ссылки.
В данной задаче лучше массив коллекций, чем массив или лист из всех документов. Массив коллекций требует намного меньше памяти.

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

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

P.S. А тема все-таки оказалась хорошая. Здесь прозвучало уже три или даже четыре варианта решения одной типовой задачи.
 
A

Anatoly

Потом в Excel ручками отсортировать проще. Или, если выгрузка через OLE, VBA "макрос" написать и запустить.
А в Lotus Notes в одну коллецию не соберёшь, массив имеет ограниченный размер - остаётся только Java Collections из классов-обёрток лотусовых документов.
Нельзя потом. Результат обработки записей перед выводом зависит от их последовательности.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
Оно не только рабочее, но и явно лучше того решения, на которое намекают твои ссылки.
В данной задаче лучше массив коллекций, чем массив или лист из всех документов. Массив коллекций требует намного меньше памяти.

Что касается, поточного вывода, то хотя он в описанной ситуации действительно хорошо подходит. Однако стоит немного изменить задачу, например, добавить необходимость записать в документ признак, что он был выгружен в отчет, то метод сразу теряет свои достоинства.
Не лучше.
Для признака после строки вызова экспорта надо всего лишь добавить строку с записью этого признака в док.
Кроме того lmike выше писал об ограничениях.

Смысл использовать варианты с собственными объектами с массивами-списками только в одном, - необходимость в одно и то же время иметь доступ к данным/"отсортировать" данные по нескольким критериям сразу, для чего лучше всего подходит именно тот вариант, куда "намекают мои ссылки") Во всех других случаях сортировки обходятся, - у меня код на Java формирует xml для открытия в Excel, сохраняет его на диске и открывает пользователю сразу же с помощью вышеуказанного vbs-файла. И хоть это некрасиво, но экономия ресурсов и стабильность, если речь идёт о сервере (а формирование xml как раз происходит на сервере), гораздо важнее.
Но всё это опять же не имеет никакого отношения к задаче этого топика, для решения которой хватило бы и примеров из хэлпа. Если речь идёт об Эксэле (а она как раз об этом и идёт), то по большому счёту сортировать программно ничего не нужно, т.к. пользователь и сам может это сделать как ему заблагорассудится.

Добавлено:
Нельзя потом. Результат обработки записей перед выводом зависит от их последовательности.
А как это относится к данной теме?
 
D

divankin

Не лучше.
Для признака после строки вызова экспорта надо всего лишь добавить строку с записью этого признака в док.
Запись признака в док можно делать только после успешной отработки всей выгрузки. Если на полпути произойдет ошибка, что с Экселем иногда случается по трудноотслеживаемым причинам, то придется откатывать назад запись признака. По мне так лучше еще раз пройтись по коллекции после выгрузки в Эксель, чем в случае проблем по второму разу сохранять кучу документов.

Смысл использовать варианты с собственными объектами с массивами-списками только в одном, - необходимость в одно и то же время иметь доступ к данным/"отсортировать" данные по нескольким критериям сразу, для чего лучше всего подходит именно тот вариант, куда "намекают мои ссылки") Во всех других случаях сортировки обходятся, - у меня код на Java формирует xml для открытия в Excel, сохраняет его на диске и открывает пользователю сразу же с помощью вышеуказанного vbs-файла. И хоть это некрасиво, но экономия ресурсов и стабильность, если речь идёт о сервере (а формирование xml как раз происходит на сервере), гораздо важнее.
Но всё это опять же не имеет никакого отношения к задаче этого топика, для решения которой хватило бы и примеров из хэлпа. Если речь идёт об Эксэле (а она как раз об этом и идёт), то по большому счёту сортировать программно ничего не нужно, т.к. пользователь и сам может это сделать как ему заблагорассудится.
Странно, а у меня пользователи почти всегда просили сортировку. А иногда еще и категоризацию с суммированием результатов по категории.

Добавлено: А как это относится к данной теме?
Это обсуждение темы. Обсуждение разных вариантов решения задачи. Примеры решения и ссылки на другие решения.
Это все-таки форум, а не википедия по лотусу.
 
A

Anatoly

Добавлено: А как это относится к данной теме?
Абстрагируя от специфики, образно:
в одной базе приглашения с датами вручения и самого меропрития
в другой посещения с датами, соответственно, посещенных мероприятий.
И теперь за период все документы нужны собрать в 1 кучу и по каждому клиенту проанализировать все посещения.

IF ты посетил мероприятие ПОСЛЕ получения приглашения и в УКАЗАНЫЙ день THEN
приглашенный = ты желанный гость
ELSE
приглашенный = "хуже татарина" :)
ENDIF

И надо формировать список клиентов с резюме (гость/татарин)...

А для некоторых дел хронология документов еще сУрьезнее... с пеней...
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
Запись признака в док можно делать только после успешной отработки всей выгрузки. Если на полпути произойдет ошибка, что с Экселем иногда случается по трудноотслеживаемым причинам, то придется откатывать назад запись признака. По мне так лучше еще раз пройтись по коллекции после выгрузки в Эксель, чем в случае проблем по второму разу сохранять кучу документов.
А при повторном проходе и сохранении доков ничего вдруг не может случиться (на практике такое случается)? И что тогда делать, когда часть доков изменились, а часть нет?
От комментариев этой реализации я пожалуй воздержусь...
Странно, а у меня пользователи почти всегда просили сортировку.
Сортировка по одному параметру решается, без горы массиво-списков; приводил пример выше.
А иногда еще и категоризацию с суммированием результатов по категории.
Код Даркера; говорили об этом выше.
Это обсуждение темы. Обсуждение разных вариантов решения задачи. Примеры решения и ссылки на другие решения.
Это не обсуждение темы (в условиях задачи всего этого добра о сортировках, категоризации и т.п. не было), а поллюционные сны на тему "что если бы у бабушки был ..." Так мы сейчас дойдём до вариантов реализации собственных транзакционных механизмов в СЭД.
Почему бы тогда не создать нормальную тему по интересующим вопросам (если её ещё нет) и не общаться там? А темы эти есть: по сортировке - своя, по траблам и решениям на Excel - свои, и т.д. Продолжили бы любую тему или завели бы новую, типа "Варианты экспорта данных из Лотуса, достоинства и недостатки", тогда и люди отвечали бы не ПОД КОНКРЕТНУЮ ЗАДАЧУ ОПИСАННУЮ В ДАННОЙ ТЕМЕ, а более в общем, и, естественно все варианты были бы уместны.
В этой теме обсуждение этого флейма я для себя завязал, - надоело, как "слепые с глухими".
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!