• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Mitya

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

nayke

Добрый день.
Назрел вопрос...
Хочу собрать (обновить) вид по ключу (диапазон дат)
Получаю коллекцию "строк" из вида. И как обработать эту коллекцию, чтобы отобразить в виде только эти "строки"? на что обратить внимание?

Положите результаты в папку и отобразите
Код:
Call coll.PutAllInfolder("ResView")
 
A

Anatoly

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

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

Dragon108

И тут вопросы:
1) из прочитанного, работа со "строками" ускоряет процесс. Но как обработать коллекцию строк? (coll.DeleteEntry( entry) - не хочет)

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

2) И вообще, когда лучше работать с коллекций док, а когда с коллекцией "строк"?

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

Anatoly

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


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

nvyush

Мне кажется, данный механизм не применим к отбору за интервал дат
Применим к колонкам типа дата, но отбор по следующим колонкам не работает
link removed
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
Тема будет позже удалена, т.к. опять чисто RTFM'ный вопрос.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!