NotesDocumentCollection

  • Автор темы ak-47
  • Дата начала
T

TIA

Есть вид с 2-мя категоризированными колонками
Да, если категоризованных колонок больше одной, ситуация иная.
Если первый аргумент у GetAllDocumentByKey -- скаляр (строка например), получается как вы и сказали -- документы первой вложенной категории.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
427
Цитата:
(lmike @ 2:06:2010 - 14:47) *
взять вьюшный навигатор
Простите, а что значит "взять" и чем оно отличается от "создать"?
ну здесь от восприятия зависит ;)
я имел ввиду - не создавать навигатор от категории

Добавлено: с допущением, что Set NVN=NV.CreateViewNav
сделается быстрее, чем set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
 
N

nvyush

с допущением, что Set NVN=NV.CreateViewNav
сделается быстрее, чем set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
Сие требует экспериментального подтверждения. В первом случае создаётся навигатор для всех записей представления, во втором случае ищется нужная категория и в навигатор помещаются только её записи. Для больших представлений второе скорее всего работает быстрее, а памяти кушает уж точно меньше.
 

Мыш

Lotus Team
12.02.2008
1 224
29
BIT
102
lmike, спасибо, на самом деле, быстрее! Для моей задачи, в принципе, производительность не критична, просто стараюсь всегда делать правильно.
 
N

nvyush

lmike, спасибо, на самом деле, быстрее! Для моей задачи, в принципе, производительность не критична, просто стараюсь всегда делать правильно.
ИМХО, нужно сравнивать не время создания навигатора, а время получение результирующей коллекции документов с использованием навигатора по всему представлению или только по категории. Причём для проверки брать представление с большим количеством документов и категорий, и категорию для экспериментов использовать не первую, а где-нибудь во второй половине (или вообще для каждой категории и потом усреднить).
 
N

nvyush

Что касается использования изначально пустых коллекций и их создания с помощью GetProfileDocCollection, так это не глупость, иногда это удобно. Использую, например, когда получил документ по CaretCategory - засовываю его в коллекцию, - последующий код унифицируется, т.е. я не ставлю потом проверок типа "если был выделен 1 документ, то выполняем опереции с ND, а если несколько, то с NDC", все последующие процедуры работают без этих ненужных условий - по коллекции.
Может речь идёт о CaretNoteID?
В описанной ситуации обычно сперва получают коллекцию выделенных в представлении документов и если она пуста, тогда обращаются к CaretNoteID. В этом случае, кмк, излишне получать пустую коллекцию с помощью GetProfileDocCollection, проще сделать так:
Код:
Set docs = UIView.Documents
If docs.Count = 0 Then Call docs.AddDocument(db.GetDocumentByID(UIView.CaretNoteID))
... 'обработка коллекции docs
Кстати, поделитесь, пжлст, кто-как определяет, что именно выделено в представлении — документ или категория.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Может речь идёт о CaretNoteID?
В описанной ситуации обычно сперва получают коллекцию выделенных в представлении документов и если она пуста, тогда обращаются к CaretNoteID. В этом случае, кмк, излишне получать пустую коллекцию с помощью GetProfileDocCollection, проще сделать так:
А чего не использовать notesDatabase.UnprocessedDocuments?
 
30.05.2006
1 345
12
BIT
0
VladSh
переходите на классы, не мучайте колекции :ya_lamo:
Эээ...
Класс - объект клиентский, in-memory (односвязный список).
В то время как коллекция - СЕРВЕРНЫЙ. По запросу клиента в уме у сервера создаётся курсор, через который осуществляет навигацию по коллекции (как в "настоящих" СУБД).
Т.е. размер коллекции НЕ ОГРАНИЧЕН памятью клиента
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Эээ...
Класс - объект клиентский, in-memory (односвязный список).
В то время как коллекция - СЕРВЕРНЫЙ. По запросу клиента в уме у сервера создаётся курсор, через который осуществляет навигацию по коллекции (как в "настоящих" СУБД).
Т.е. размер коллекции НЕ ОГРАНИЧЕН памятью клиента
срочно бросайте курить :)
лотусиная колекция ничем не отличается от моего класса, мало того, используя бинарное дерево новые обьектв вносятся в колекцию УЖЕ сортированно
и еще раз чем серверная колекция отличается от клиентской? ;)
 
A

Akupaka

лотусиная колекция ничем не отличается от моего класса
С таким же успехом я могу утверждать, что я самый умный. Какой такой "твой" класс? Почему вдруг он лучше NotesDocCol? Как туда попадают документы? Стандартные операции умеют возвращать документы собранные в "твой" класс?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 980
611
BIT
427
nvy
не всегда нужны документы...
и ябы рекомендовал - без нужды не дергать
получение дока дольше, чем использование вьюшечного индекса (колумн-валью)
и доки надо парсить, если поля мультивэлю (я об этом писал)
НО
получение дока из энтриса дольше, чем из коллекции полученной по DbSearch

Добавлено:
В первом случае создаётся навигатор для всех записей представления
1 не создаётся - а получает вьюшечный индекс
2 - точно не знаю, возможно строит заново для условия
эксперименты были неоднократно - 2 способ ОЧЕНЬ долгий

Добавлено 2: господа, ну что за подход...
нужны не сами доки а инфа из них
потому воротить подобные коллекции - мало смысла вижу (есть случаи, разумеется)
 
30.05.2006
1 345
12
BIT
0
срочно бросайте курить :)
лотусиная колекция ничем не отличается от моего класса, мало того, используя бинарное дерево новые обьектв вносятся в колекцию УЖЕ сортированно
и еще раз чем серверная колекция отличается от клиентской? ;)
Лотусиный класс - это, утрируя, 3 метода:
- Запрос к серверу на СОЗДАНИЕ КОЛЕКЦИИ В УМЕ СЕРВЕРА (на самом деле - даже не в уме, а в дисковом кэше. И коллекция не самих док-тов, а, типа, NoteID-ов)
- Запрос к серверу на получение 1-го док-та
- Запрос к серверу на получение +1 док-та

Ваш класс:
- Запрос к серверу на создание коллекции
- 1000 запросов к серверу на перекачку ВСЕХ док-тов коллекции в ум к клиенту
- методы для навигации по объектам в памяти

Никакой разницы ;)
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
Если первый аргумент у GetAllDocumentsByKey -- скаляр (строка например), получается как вы и сказали -- документы первой вложенной категории.
А если массив с одним элементом? После глюка с GetDocumentByKey всегда передаю массив.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
VladSh
переходите на классы, не мучайте колекции ;)
На какие классы переходить? Уточните, пожалуйста, Ваш ответ, уважаемый :)
На обычные. :)
Я нигде не сортирую коллекцию. Если нужно отсортировать(для отчета), то пихаю нужные данные в класс. В классе использую список и массив с индексами. Сортирую на этапе добавления инфы.
Покажите, где я сортирую коллекции? И где о том, что я не использую классы??
Толи у меня маразм, толи у вас паранормальные способности (видеть то, чего нет)...
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Лотусиный класс - это, утрируя, 3 метода:
- Запрос к серверу на СОЗДАНИЕ КОЛЕКЦИИ В УМЕ СЕРВЕРА (на самом деле - даже не в уме, а в дисковом кэше. И коллекция не самих док-тов, а, типа, NoteID-ов)
- Запрос к серверу на получение 1-го док-та
- Запрос к серверу на получение +1 док-та

Ваш класс:
- Запрос к серверу на создание коллекции
- 1000 запросов к серверу на перекачку ВСЕХ док-тов коллекции в ум к клиенту
- методы для навигации по объектам в памяти

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

Формирование же сначала лотусиной колекции да еще и сортированной приводит к тому, что вы обращаетесь к доку дважды(трижды и т.д.) - запихиваете его в колекцию, потом работаете с ним.

Простыми словами однопроходный способ всегда рулит :)
 
A

Akupaka

Формирование же сначала лотусиной колекции да еще и сортированной приводит к тому, что вы обращаетесь к доку дважды(трижды и т.д.) - запихиваете его в колекцию, потом работаете с ним.
Ты не гони, коллекция не сортируется пользователем. Вообще это свойство IsSorted класса NotesDocumentCollection устанавливается при определенном условии.
И сообщение Влада было о том, что этот параметр меняется вне соответствия условию, описанному в справке.
Если я правильно его понял ))
А ты начал умничать о каких-то абстрактных классах.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
231
Простыми словами однопроходный способ всегда рулит ;)
Т.е. классы всё те же - link removed :)

сообщение Влада было о том, что этот параметр меняется вне соответствия условию, описанному в справке.
Если я правильно его понял ))
Да )) Более того, иногда возникает ощущение, что оно живёт какой-то своей жизнью...)))
Хотя скорее это пинок хэлпописателям... Продолжаю убеждаться в том, что к лотусовскому хелпу может серьёзно относится программер с опытом 1,5-2 года, а у остальных уже свои БЗ есть, на основе опыта, и вот форум :)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
VladSh
тю
я думал тебе сортировка нужна как кровь из носу :)
 
Мы в соцсетях:

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