NotesDocumentCollection

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

ak-47

#1
Как создать пустую коллекцию, чтобы в нее потом можно было добавлять документы при помощи collection.AddDocument ????
 
M

Mihal

#2
Берёшь первую попавшуюся вьюху. И дальше GetAllDocumentsByKey с какой-нить дикой строкой. Например, Set doccol=view.GetAllDocumentsByKey("QQQQWWWWWEEEEERRRRR!@#sdsdcdgf",True). Ну и на всякий случай вычищаешь эту коллекцию :).
 
A

ak-47

#3
Как же эту коллекцию вычистить? Как вообще можно удалить документ из коллекции?

а насчет главного вопроса, пришел к выводу, что лучшим способом будет

Set coll = db.Search("", nothing, 0)

а вы сами пробовали или "где-то слышали" ??
 

GROMILA

Well-known member
08.04.2004
297
0
#5
А вот нечего коллекцию лотусиную использовать не по незначению.
Для временного хранения и передачи параметров юзай List або массив динамический
(Redim с перезервом)
 
M

Mihal

#6
<!--QuoteBegin-ak-47+31:10:2006, 15:02 -->
<table border="0" cellpadding="0" cellspacing="0" align="center" width="98%"> [tr] <td class="vbquote"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="75" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="50px"> [tr] <td class="vbquote" width="28" valign="top">
</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quote-bg.gif'); background-position: center;" valign="middle"><span class="vbquote">Цитата:</span></td> <td class="vbquote" valign="top">
</td> [/tr] </table> </td> <td class="vbquote" align="left" style="background-image: url('style_images/ckr/quotes/quot-lr-bg.gif')" valign="bottom"></td><td class="vbquote" width="0" align="left" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="200"> [tr] <td class="vbquote" valign="top">
</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quot-bye-bg.gif')" align="left" valign="middle" nowrap="nowrap"><span class="vbquote">(ak-47 @ 31:10:2006, 15:02 )</span></td> <td class="vbquote" valign="top">
</td> [/tr] </table> </td><td class="vbquote" width="100%" align="right" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" style="background-image: url('style_images/ckr/quotes/quot-top-bg.gif')" width="100%" valign="middle"></td> <td class="vbquote" align="left" valign="top">
</td> [/tr] </table> </td> [/tr] </table> </td> [/tr] </table> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-left.gif')"></td> <td class="vbquotemain" width="100%" valign="top"></td> <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-right.gif')"></td> [/tr] [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quot-left-bg.gif')"></td> <td class="vbquotemain" width="100%" valign="top"><!--QuoteEBegin-->Как же эту коллекцию вычистить? Как вообще можно удалить документ из коллекции?<!--QuoteEnd--></td> [/tr] [tr] [/tr] </table> </td> [/tr] </table>
<!--QuoteEEnd-->Я это обычно делаю вот так:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Deletes a document from a collection (not from the disk)</div></div><div class="sp-body"><div class="sp-content">
Note This method is new with Release 5.
Defined in
NotesDocumentCollection
Syntax
Call notesDocumentCollection.DeleteDocument( document )
Parameters
document
NotesDocument. The document to be deleted. If you specify Nothing, this method generates an error.
Usage
The specified document must have originated in this collection. If the document does not exist in the collection, or if it was removed from the database by a RemoveAll operation, an error will be raised.
<!--QuoteBegin-Mihal+1:11:2006, 09:39 -->
<table border="0" cellpadding="0" cellspacing="0" align="center" width="98%"> [tr] <td class="vbquote"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="75" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="50px"> [tr] <td class="vbquote" width="28" valign="top">
</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quote-bg.gif'); background-position: center;" valign="middle"><span class="vbquote">Цитата:</span></td> <td class="vbquote" valign="top">
</td> [/tr] </table> </td> <td class="vbquote" align="left" style="background-image: url('style_images/ckr/quotes/quot-lr-bg.gif')" valign="bottom"></td><td class="vbquote" width="0" align="left" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="200"> [tr] <td class="vbquote" valign="top">
</td> <td class="vbquote" width="100%" style="background-image: url('style_images/ckr/quotes/quot-bye-bg.gif')" align="left" valign="middle" nowrap="nowrap"><span class="vbquote">(Mihal @ 1:11:2006, 09:39 )</span></td> <td class="vbquote" valign="top">
</td> [/tr] </table> </td><td class="vbquote" width="100%" align="right" valign="bottom"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" style="background-image: url('style_images/ckr/quotes/quot-top-bg.gif')" width="100%" valign="middle"></td> <td class="vbquote" align="left" valign="top">
</td> [/tr] </table> </td> [/tr] </table> </td> [/tr] </table> <table border="0" cellpadding="0" cellspacing="0" width="100%"> [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-left.gif')"></td> <td class="vbquotemain" width="100%" valign="top"></td> <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quoting-right.gif')"></td> [/tr] [tr] <td class="vbquote" width="10" style="background-image: url('style_images/ckr/quotes/quot-left-bg.gif')"></td> <td class="vbquotemain" width="100%" valign="top"><!--QuoteEBegin-->А вот нечего коллекцию лотусиную использовать не по незначению.
Для временного хранения и передачи параметров юзай List або массив динамический
(Redim с перезервом)<!--QuoteEnd--></td> [/tr] [tr] [/tr] </table> </td> [/tr] </table>
<!--QuoteEEnd-->Ну, человек же не написал КАК он её пользовать собирается. А у коллекции есть ряд "вкусных" методов. FTSearch, например. Или StampAll тоже интиресная штука. Опять же класс NotesNewsLetter работает с коллекциями.
 

hosm

* so what *
18.05.2009
2 442
6
#7
Иногда приходилось сталкиваться с необходимостью создания пустой коллекции.
В 8ке у notesdatabase появился новый (недокументированный) метод для этого - CreateDocumentCollection.
Мне попалось на глаза сообщение на эту тему.
Привлек внимание интересный коммент к нему (2й) насчет создания пустой коллекции (вольный перевод):
"При использовании db.CreateDocumentCollection () получаем в результате неотсортированную коллекцию. То есть коллекция всегда обрабатывает добавленные в нее документы в порядке их NoteID. Аналогичную коллекцию даст .search().
Однако, если коллекция строится с помощью .GetAllDocumentsByKey, то, даже если результирующий набор пуст, коллекция считается отсортированной, и поэтому документы будут обрабатываться в том порядке, в котором вы их добавите (first-in-first-out). Эта особенность, оказывается, имеет очень важное значение для некоторых видов операций."
 

nvyush

Lotus team
22.04.2009
2 317
0
#8
Интересно, а вызов
Set notesDocumentCollection = notesDatabase.GetProfileDocCollection("Нет таких профилей в этой базе!")
даст сортированную или несортированную коллекцию?
 

hosm

* so what *
18.05.2009
2 442
6
#9
ToxaRat
Ну, конечно, можно переделать код через списки или массив документов и не морочиться с коллекциями.
но не одна я такая :)
не один раз в коде встречала, даже как-то давненько прикалывалась с того, кто чего у нас пишет в качестве параметра для GetAllDocumentsByKey (народу много поработало).

Medevic
Да, хелп 7ки вообще практически какую-либо сортировку отрицает, говорит про GetAllDocumentsByKey, что "Documents returned by this method are in no particular order" (в отличие от коллекции энтрисов).
nvy
ничего не скажу, надо экспериментировать с GetProfileDocCollection.
И вообще хз, насколько это вообще верно.
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#10
Во времена 5-ки была какая-то дока (не помню, но в голове сидит жёстко), что GetAllDocumentsByKey возвращает коллекцию, отсортированную по дате создания документов. Мы тогда наткнулись на это... для одного процесса нам нужна была "своя" сортировка, побороть не смогли, использовать библиотеки, "сортирующие коллекцию", а на самом деле возвращающую массивы или списки - это изврат (зачем лишний перебор?), поэтому остановились тогда на NotesViewNavigator'е.

Что касается использования изначально пустых коллекций и их создания с помощью GetProfileDocCollection, так это не глупость, иногда это удобно. Использую, например, когда получил документ по CaretCategory - засовываю его в коллекцию, - последующий код унифицируется, т.е. я не ставлю потом проверок типа "если был выделен 1 документ, то выполняем опереции с ND, а если несколько, то с NDC", все последующие процедуры работают без этих ненужных условий - по коллекции.

Немного "напрягает" другое... - что у коллекции есть свойство Parent. Никогда не добавлял в коллекцию документы из другой БД; теоретически должно поклинить... если да, то это конечно неприятное ограничение.
 
13.03.2009
625
1
#11
Немного "напрягает" другое... - что у коллекции есть свойство Parent. Никогда не добавлял в коллекцию документы из другой БД; теоретически должно поклинить... если да, то это конечно неприятное ограничение.
клинит. даже ошибка есть именная. 4427 Document is from different database
инстанс NotesDatabase - не синглтон, поэтому клинит, даже если document.ParentDatabase фактически совпадает с collection.parent, но ссылаются на разные объекты.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='vb'> Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection

Set db = session.CurrentDatabase
Set collection = db.Search( "" , Nothing , 0 )

Dim sameDb As NotesDatabase

' При получении по replicaID - sameDb - другой объект. ERROR
Set sameDb = New NotesDatabase( "" , "" )
Call sameDb.OpenByReplicaID( db.Server , db.ReplicaID )

' При получении по getDatabase - sameDb - тот же объект. Нормально работает.
' Set sameDb = session.GetDatabase( db.Server , db.FilePath )

Dim doc As NotesDocument
Set doc = sameDb.AllDocuments.GetFirstDocument
Call collection.AddDocument( doc )[/CODE]
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#12
turumbay

В коллекцию, полученую культурными методами - да. Тем более, если там есть уже хоть один док. Просто интересно было, если в пустую, полученную с помощью GetProfileDocCollection, добавить док из др. БД... попробую как-нибудь.

GetDatabase никогда не приходилось использовать, т.к. при подключении к БД у меня они в List записывались, где тэгом был AliasDb, по которому её вызывали в коде. Интересно, спасибо!
 
13.03.2009
625
1
#13
В коллекцию, полученую культурными методами - да. Тем более, если там есть уже хоть один док. Просто интересно было, если в пустую, полученную с помощью GetProfileDocCollection, добавить док из др. БД... попробую как-нибудь.
Дык здесь и есть пустая коллекция. db.search("", Nothing , 0 ) - это аналог трюка с GetProfileDocCollection.
т.е. в коллекцию( в т.ч. пустую ) можно добавить документ, у которого parentDatabase ссылается на тот же объект, что и collection.parent.
получается - это необходимое условие.
 
13.03.2009
625
1
#15
по моему Search работает дольше чем GetAllDocumentsByKey
по вашему, может и дольше, но вот по жизни - быстрее. сишная функция сразу возвращает управление вызывающей при пустой nsfformula - никакого поиска не происходит. а вот процесс Set view = db.getView(...) займет время однозначно.
если хочется проверить - welcome. написание теста займет 5 минут.
 

motogarri

Well-known member
17.02.2010
200
3
#16
Нужно выбрать документы из категории в виде. Все вроде нормально, но где-то слышал что в коллекции сортировка слетает. Это так? Можно как-то отсортировать коллекцию?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#18
garri
колекция будет построена согласно дате создания документов и коллекцию никогда не нужно даже пытаться сортировать
 

motogarri

Well-known member
17.02.2010
200
3
#19
Спасибо.

Добавлено:
garri
колекция будет построена согласно дате создания документов и коллекцию никогда не нужно даже пытаться сортировать
Понятно, спс, запомню на будущее.
NotesViewEntryCollection то что нужно.
 

nvyush

Lotus team
22.04.2009
2 317
0
#20
колекция будет построена согласно дате создания документов и коллекцию никогда не нужно даже пытаться сортировать
Где-то натыкался на классы сортировки коллекции. Принцип действия — если в пустую коллекцию добавлять документы, то они в ней будут отсортированы в порядке добавления.
Сам не пользовал, где может пригодиться, не знаю.