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

  • Автор темы Mitya
  • Дата начала
M

Mitya

#1
Добрый день.
Назрел вопрос...
Хочу собрать (обновить) вид по ключу (диапазон дат)
Получаю коллекцию "строк" из вида. И как обработать эту коллекцию, чтобы отобразить в виде только эти "строки"? на что обратить внимание?
Пишу акцию на вид:
Код:
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
 

nayke

Well-known member
04.08.2010
310
0
#2
Добрый день.
Назрел вопрос...
Хочу собрать (обновить) вид по ключу (диапазон дат)
Получаю коллекцию "строк" из вида. И как обработать эту коллекцию, чтобы отобразить в виде только эти "строки"? на что обратить внимание?
Положите результаты в папку и отобразите
Код:
Call coll.PutAllInfolder("ResView")
 

Anatoly

Lotus team
30.03.2007
222
0
#3
У меня выборки документов за период для обработки решается приблизительно так:
Код:
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
Код:
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
 
M

Mitya

#4
В итоге получил такое:
Код:
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) И вообще, когда лучше работать с коллекций док, а когда с коллекцией "строк"?
 

Dragon108

Well-known member
19.01.2010
265
0
#5
И тут вопросы:
1) из прочитанного, работа со "строками" ускоряет процесс. Но как обработать коллекцию строк? (coll.DeleteEntry( entry) - не хочет)
В смысле "обработать коллекцию" строк? DeleteEntry - удаляет энтри из коллекции. Если вам нужно удалить коллекцию энтри из другой коллекции энтри используйте метод Intersect.
Я так понял в вашем случае вы хотите в итоге получить коллекцию документов по определенным критериям и потом одним махом положить ее в папку. Ну если вы используете класс энтри, то создайте 2 коллекцию, куда вы будете добавлять документы, которые подходят по критерию и потом ее кладите в папку.

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

Anatoly

Lotus team
30.03.2007
222
0
#6
= view.GetAllEntriesByKey( NotesDateRange, True)
Это вообще работает? Возвращает notesViewEntryCollection?
Там же можно передавать массив (или конкретное значение - 1 мерный массив), который должен "стреляться" по количеству и типу с сортированными колонками.
Мне кажется, данный механизм не применим к отбору за интервал дат...


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

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#8
Тема будет позже удалена, т.к. опять чисто RTFM'ный вопрос.