Отбор Документов В Виде (по Ключу)

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

  1. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    Добрый день.
    Назрел вопрос...
    Хочу собрать (обновить) вид по ключу (диапазон дат)
    Получаю коллекцию "строк" из вида. И как обработать эту коллекцию, чтобы отобразить в виде только эти "строки"? на что обратить внимание?
    Пишу акцию на вид:
    Код (Text):
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim uiView As NotesUIView
    Dim view As NotesView

    Dim session As New NotesSession
    Dim curdb As NotesDatabase
    Dim tempdoc As NotesDocument
    Dim flag As Boolean
    Dim dr As NotesDateRange
    Dim ndtStart As NotesDateTime
    Dim ndtEnd As NotesDateTime
    Dim coll As NotesViewEntryCollection

    Set uiView = Ws.CurrentView
    Set view = uiView.View

    Set curdb = session.CurrentDatabase
    Set tempdoc = curdb.CreateDocument


    flag = ws.DialogBox("test", True, True, , , , , "Введите данные",tempdoc ,False,)
    If flag Then       
    Set dr = session.CreateDateRange
    Set ndtStart = New NotesDateTime(tempdoc.t1(0))
    Set ndtEnd = New NotesDateTime( tempdoc.t2(0))     
    Set dr.StartDateTime= ndtStart
    Set dr.EndDateTime = ndtEnd
    If tempdoc.t3(0)="1" Then          
    Call view.Refresh
    End If
    Set coll = view.GetAllEntriesByKey(dr,True)    
    End If 
    End Sub
     
  2. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Положите результаты в папку и отобразите
    Код (Text):
    Call coll.PutAllInfolder("ResView")
     
  3. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    У меня выборки документов за период для обработки решается приблизительно так:
    Код (LotusScript):
    Sub CreatePaymentsList( DateBeg As Variant, DateEnd As Variant)
    Dim dc As NotesDocumentCollection

    Call vwList.AllEntries.RemoveAllFromFolder( vwList.Name )
    Set dc = dbPaym.Search({Form="Payment.Doc" & DocDate>=[} + CStr(DateBeg) + {] & DocDate<=[} + CStr(DateEnd) +{] & Deleted<>"1"}, Nothing, 0)
    Call dc.PutAllInFolder( vwList.Name )

    End Sub
    Если папка на экране, рефреш и далее по смыслу.


    Есть варианты с установкой флага в удовлетворяющих условию документов + наличие вью c SELECT ... & StatFlag=1
    Код (LotusScript):
    Sub FlagClear
    SearchFormula ={@IsMember(Form;"Inspection") & StatFlag=1}
    Set dc = CurrDb.Search(SearchFormula,Nothing,0)
    Call dc.StampAll("StatFlag", 0)
    End Sub
    Sub FlagSet_Inspection
    SearchFormula ={Form="Inspection" & DateStart>=[} + Cstr(StartDate) + {] & DateStart<=[} + Cstr(EndDate) +{]}
    Set dc = CurrDb.Search(SearchFormula,Nothing,0)
    Call dc.StampAll("StatFlag", 1)
    End Sub
     
  4. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    В итоге получил такое:
    Код (Text):
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim uiView As NotesUIView
    Dim view As NotesView

    Dim session As New NotesSession
    Dim curdb As NotesDatabase
    Dim tempdoc As NotesDocument
    Dim flag As Boolean
    Dim dr As NotesDateRange
    Dim ndtStart As NotesDateTime
    Dim ndtEnd As NotesDateTime
    Dim coll As NotesViewEntryCollection
    Dim entry As NotesViewEntry
    Dim doc As NotesDocument

    Set uiView = Ws.CurrentView
    Set view = uiView.View

    Set curdb = session.CurrentDatabase
    Set tempdoc = curdb.CreateDocument


    flag = ws.DialogBox("test", True, True, , , , , "Введите данные",tempdoc ,False,)
    If flag Then       
    Set dr = session.CreateDateRange
    Set ndtStart = New NotesDateTime(tempdoc.t1(0))
    Set ndtEnd = New NotesDateTime( tempdoc.t2(0))     
    Set dr.StartDateTime= ndtStart
    Set dr.EndDateTime = ndtEnd
    If tempdoc.t3(0)="1" Then          
    Call view.Refresh
    End If
    Set coll = view.GetAllEntriesByKey(dr,True)
    Set entry = coll.GetFirstEntry
    Do While Not (entry Is Nothing)
    If entry.ColumnValues(2)= tempdoc.t4(0) Then
    Set doc = entry.Document
    Call doc.PutInFolder ("ResView")               
    End If
    Set entry = coll.GetNextEntry(entry)       
    Loop
    Call ws.OpenFrameSet("ResView")    
    End If 
    End Sub
    И тут вопросы:
    1) из прочитанного, работа со "строками" ускоряет процесс. Но как обработать коллекцию строк? (coll.DeleteEntry( entry) - не хочет)
    2) И вообще, когда лучше работать с коллекций док, а когда с коллекцией "строк"?
     
  5. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    В смысле "обработать коллекцию" строк? DeleteEntry - удаляет энтри из коллекции. Если вам нужно удалить коллекцию энтри из другой коллекции энтри используйте метод Intersect.
    Я так понял в вашем случае вы хотите в итоге получить коллекцию документов по определенным критериям и потом одним махом положить ее в папку. Ну если вы используете класс энтри, то создайте 2 коллекцию, куда вы будете добавлять документы, которые подходят по критерию и потом ее кладите в папку.

    Ну когда вам что будет удобнее :huh: Я обычно использую энтри, когда нужно работать с представлениями и содержимыми в нем, например: обработать какую-нибудь большую вьюшку с документами (по вьюшке они работают быстрее чем обычная коллекция документов) или при "мелком поиске" в представлении (GetAllEntriesByKey).
     
  6. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    = view.GetAllEntriesByKey( NotesDateRange, True)
    Это вообще работает? Возвращает notesViewEntryCollection?
    Там же можно передавать массив (или конкретное значение - 1 мерный массив), который должен "стреляться" по количеству и типу с сортированными колонками.
    Мне кажется, данный механизм не применим к отбору за интервал дат...


    Добавлено:
    Я, в основном, когда нужна информация из строк категорий, тотал и т.п.
     
  7. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Применим к колонкам типа дата, но отбор по следующим колонкам не работает
    Getallentriesbykey криво ищет по составному ключу
     
  8. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Тема будет позже удалена, т.к. опять чисто RTFM'ный вопрос.
     
Загрузка...

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