NotesDocumentCollection

Тема в разделе "Lotus - Программирование", создана пользователем ak-47, 30 окт 2006.

  1. ak-47

    ak-47 Гость

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

    Mihal Гость

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

    ak-47 Гость

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

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

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

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

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
  5. GROMILA

    GROMILA Well-Known Member

    Регистрация:
    8 апр 2004
    Сообщения:
    297
    Симпатии:
    0
    А вот нечего коллекцию лотусиную использовать не по незначению.
    Для временного хранения и передачи параметров юзай List або массив динамический
    (Redim с перезервом)
     
  6. Mihal

    Mihal Гость

    <!--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">[​IMG]</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">[​IMG]</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">[​IMG]</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">[​IMG]</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">[​IMG]</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">
    <!--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">[​IMG]</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">[​IMG]</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">[​IMG]</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">[​IMG]</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">[​IMG]</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 работает с коллекциями.
     
  7. hosm

    hosm * so what *

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Интересно, а вызов
    Set notesDocumentCollection = notesDatabase.GetProfileDocCollection("Нет таких профилей в этой базе!")
    даст сортированную или несортированную коллекцию?
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ToxaRat
    Ну, конечно, можно переделать код через списки или массив документов и не морочиться с коллекциями.
    но не одна я такая :)
    не один раз в коде встречала, даже как-то давненько прикалывалась с того, кто чего у нас пишет в качестве параметра для GetAllDocumentsByKey (народу много поработало).

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

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Во времена 5-ки была какая-то дока (не помню, но в голове сидит жёстко), что GetAllDocumentsByKey возвращает коллекцию, отсортированную по дате создания документов. Мы тогда наткнулись на это... для одного процесса нам нужна была "своя" сортировка, побороть не смогли, использовать библиотеки, "сортирующие коллекцию", а на самом деле возвращающую массивы или списки - это изврат (зачем лишний перебор?), поэтому остановились тогда на NotesViewNavigator'е.

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

    Немного "напрягает" другое... - что у коллекции есть свойство Parent. Никогда не добавлял в коллекцию документы из другой БД; теоретически должно поклинить... если да, то это конечно неприятное ограничение.
     
  11. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    клинит. даже ошибка есть именная. 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]
     
  12. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    turumbay

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

    GetDatabase никогда не приходилось использовать, т.к. при подключении к БД у меня они в List записывались, где тэгом был AliasDb, по которому её вызывали в коде. Интересно, спасибо!
     
  13. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Дык здесь и есть пустая коллекция. db.search("", Nothing , 0 ) - это аналог трюка с GetProfileDocCollection.
    т.е. в коллекцию( в т.ч. пустую ) можно добавить документ, у которого parentDatabase ссылается на тот же объект, что и collection.parent.
    получается - это необходимое условие.
     
  14. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    по моему Search работает дольше чем GetAllDocumentsByKey
     
  15. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    по вашему, может и дольше, но вот по жизни - быстрее. сишная функция сразу возвращает управление вызывающей при пустой nsfformula - никакого поиска не происходит. а вот процесс Set view = db.getView(...) займет время однозначно.
    если хочется проверить - welcome. написание теста займет 5 минут.
     
  16. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Нужно выбрать документы из категории в виде. Все вроде нормально, но где-то слышал что в коллекции сортировка слетает. Это так? Можно как-то отсортировать коллекцию?
     
  17. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    NotesViewEntryCollection class
     
  18. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    garri
    колекция будет построена согласно дате создания документов и коллекцию никогда не нужно даже пытаться сортировать
     
  19. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Спасибо.

    Добавлено:
    Понятно, спс, запомню на будущее.
    NotesViewEntryCollection то что нужно.
     
  20. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Где-то натыкался на классы сортировки коллекции. Принцип действия — если в пустую коллекцию добавлять документы, то они в ней будут отсортированы в порядке добавления.
    Сам не пользовал, где может пригодиться, не знаю.
     
Загрузка...
Похожие Темы - NotesDocumentCollection
  1. nayke
    Ответов:
    8
    Просмотров:
    3.557
  2. Akupaka
    Ответов:
    11
    Просмотров:
    4.301

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