Быстрый отбор и помещение документво в папку

Тема в разделе "Lotus - Программирование", создана пользователем Sayonara, 31 янв 2006.

Статус темы:
Закрыта.
  1. Sayonara

    Sayonara Гость

    Я тут почитал форумы и мне понравилась идея, о отправки найденных доков в папку, чтобы пользователь уже имел возможность работать с необходимой ему информацию. Нов от проблемма для 1 дня (это 500 записей в среднем), этот метод работает 2 минуты!!! А иногда нужно сортировать 2-х месячные логи..., это порядка нескольких часов, и абсалютно не приемлемо.... :)
    Люди, кто может посаветовать, более оптимальный код сортировки?

    Код (Text):
    Sub Click(Source As Button)
    Dim wks As New NotesUIWorkspace
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim db As NotesDatabase
    Dim txt As String


    Set db = wks.CurrentDatabase.Database


    Set dc=db.AllDocuments
    Set doc=dc.GetFirstDocument

    While Not doc Is Nothing

    txt = doc.FullName(0)

              If Instr(txt,"\Ролики\Анонсы\") > 0 Then

           If Instr (txt,"\Ролики\Анонсы\некоммерческие") > 0 Then
     
           Else
    Call doc.PutInFolder("Анонсы",True)  
           End If

    End If

    If Instr(txt,"Рекламные") > 0 Then

    Call doc.PutInFolder("реклама",True)
    End If

    If Instr(txt,"Сегодня в эфире") > 0 Then

    Call doc.PutInFolder("Коммерческие",True)  

    End If
     
    Set doc=dc.GetNextDocument(doc)
    Wend

    Msgbox("Сортировка закончена")
    End Sub
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Попробуй использовать методы notesDatabase.Search или notesDatabase.FTSearch (или, лучше, notesView.FTSearch), а не просматривать каждый документ в цикле. А потом сделаешь notesDocumentCollection.PutAllInFolder. Будет гораздо быстрее.
     
  3. Sayonara

    Sayonara Гость

    <!--QuoteBegin-Medevic+31:01:2006, 15:11 -->
    <span class="vbquote">(Medevic @ 31:01:2006, 15:11 )</span><!--QuoteEBegin-->Попробуй использовать методы notesDatabase.Search или notesDatabase.FTSearch (или, лучше, notesView.FTSearch), а не просматривать каждый документ в цикле. А потом сделаешь notesDocumentCollection.PutAllInFolder. Будет гораздо быстрее.
    [snapback]29950" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Пробывал... вот, что у меня получилось.....
    Код (Text):
    Set view = db.GetView("LogView")

    j = view.FTSearch( "Рекламные", 0 )
    Set doc = view.GetFirstDocument()

    While Not(doc Is Nothing)
     Call doc.PutInFolder( "реклама", True )
     Set doc = view.GetNextDocument(doc)
    Wend

    j = view.FTSearch( "Сегодня в эфире", 0 )
    Set doc = view.GetFirstDocument()

    While Not(doc Is Nothing)
     Call doc.PutInFolder( "Коммерческие", True )
     Set doc = view.GetNextDocument(doc)
    Wend

    j = view.FTSearch( "Новый поворот", 0 )
    Set doc = view.GetFirstDocument()

    While Not(doc Is Nothing)
     Call doc.PutInFolder( "Коммерческие", True )
     Set doc = view.GetNextDocument(doc)
    Wend
    Но работает, на 5 секунд быстрее, тоесть для одного дня 1-ый способ 1 мин.50 сек, а во 2-ом способе 1 мин. 45 сек...... тоже не приемлимо....
    Хотя может я неправильно написал код.... :-\
     
  4. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Дааа. :D
    Не проще ли примеры в хелпе глянуть по этим методам ?
     
  5. Domino6

    Domino6 Гость

    Кладив папку не поштучно а коллециями

    метод Putallinfolder от коллекции документов
    Код (Text):
        Dim ses As New NotesSession
    Dim db As NotesDatabase
    Set db = ses.CurentDatabase
    Dim scol As NotesDocumentCollection
    Dim qS List As String
    ' Показатель имя папки значение полнотекстовый запрос согласно синтаксису FT Search
    qs("Папка 1")="Полнотекстовый запрос"
    qs("Реклама")="Рекламные"
    qs("Цены товар")="цена | price | produce | товар"

    Forall q In qs
    scol = db.FTSearch( q, 0 )
    If scol.Count>0 Then
    Call scol.PutInAllFolder( Listag(q), True )
    End If
    End Forall
    в qs дописываеш нужное колличество элементов
    в виде qs("Папка 1")="Полнотекстовый запрос"
     
  6. Sayonara

    Sayonara Гость

    <!--QuoteBegin-Medevic+1:02:2006, 15:15 -->
    <span class="vbquote">(Medevic @ 1:02:2006, 15:15 )</span><!--QuoteEBegin-->Дааа. :D
    Не проще ли примеры в хелпе глянуть по этим методам ?
    [snapback]29991" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Это и был пример из хелпа..... :(
     
  7. Sayonara

    Sayonara Гость

    Domino6, спасибо супер!!! Очень помогло и нетолько в этой проблеме.... :(
     
Загрузка...
Статус темы:
Закрыта.

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