Удалить все документы в категоризированной вью.

  • Автор темы Jooz
  • Дата начала
J

Jooz

#1
Коллеги, имеется ли такая возможность?

Есть вьюшка в которой тысячи категорий, в каждой категории может быть от 1 до 100 документов, внутри категории доки отсортированы по дате. Задача: в каждой категории оставить только 1 документ.

Подскажите имена классов которыми можно порешать эту проблему.

Делать циклом, т.е. проверять уникальность документа по отношению к другому это 20 000 на 20 000 операция, т.е. 2 суток работы агента. Нужно сделать быстрее. Для этого и создал вью, где уже нужно только пробежаться по категориям и шлепнуть хвост. А вот как, что не докумекаю.
 

hosm

* so what *
18.05.2009
2 442
6
#2
Для разовой задачи в качестве идеи - сделать вьюху с флагом Generate Unique Keys in Index и оставить только эти документы? (ну, кинуть их в папку или каким-то уникальным полем отметить)
 

nvyush

Lotus team
22.04.2009
2 317
0
#4
К сожалению задача ежедневная.
В этом случае, КМК, проще при добавлении новых документов проверять, нет ли уже таких же в категории и, если есть, помечать в спецполе как "подлежащий чистке". Сделать представление по данному спецполю и удалять агентом все документы в данном представлении.
 

Xalet

Well-known member
08.08.2008
410
0
#6
Делать циклом, т.е. проверять уникальность документа по отношению к другому это 20 000 на 20 000 операция, т.е. 2 суток работы агента. Нужно сделать быстрее. Для этого и создал вью, где уже нужно только пробежаться по категориям и шлепнуть хвост. А вот как, что не докумекаю.
А зачем каждый к каждому? Делается в один проход. Уникальные значения скидывать в лист(как вариант). В каждом доке брать поле категории и смотреть, есть ли оно в листе. Если нет, то добавить в лист, док не трогать, если есть, док в мусор...
 
J

Jooz

#7
NotesViewNavigator - отличная идея, помогло!!!

Добавлено:
А зачем каждый к каждому? Делается в один проход. Уникальные значения скидывать в лист(как вариант). В каждом доке брать поле категории и смотреть, есть ли оно в листе. Если нет, то добавить в лист, док не трогать, если есть, док в мусор...
Тоже не быстро, когда у Вас массив вырастит до 1000 записей и более, каждый новый документ вы будите прогонять по этому массиву. Т.е. вначале ф-ия работать будет быстро, а потом начнет замедляться и "фактически" придет 1 к 1.
 

rinsk

Lotus team
12.11.2009
900
44
#8
NotesViewNavigator - отличная идея, помогло!!!
если во вьюшке сделать Total то оч шустро будет...

Код:
%REM
Agent $MessageID
Удаляет из журнальной базы письма с одинаковыми $MessageID 
Created 20.03.2010 by Rinat N. Karimov/TAPB/RU
Description: Comments for Agent
%END REM
Option Public
Option Declare

Sub Initialize()
Dim s As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim nv As NotesViewNavigator
Dim en As NotesViewEntry
Dim cl As NotesDocumentCollection
Dim doc As NotesDocument
Dim cnt As Long
Dim va (1) As String
va(0)="$MessageID"
va(1)="$MessageID2"
Set db=s.Currentdatabase
ForAll vn In va
Set v=db.Getview(vn)
Call v.Refresh()
v.Autoupdate=False
Set nv=v.Createviewnav()
Set en=nv.Getfirst()
Do While Not en Is Nothing
' Columnvalues(3) содержит totals категории...
If en.Columnvalues(3)>1 Then
'Print en.Columnvalues(0) & "--" &en.Columnvalues(3)
Set cl=v.Getalldocumentsbykey(en.Columnvalues(0),True)
Set doc=cl.Getfirstdocument()
Call cl.Deletedocument(doc)
Call cl.Removeall(True)
End If
cnt=cnt+1
Set en=nv.Getnextcategory(en)
Loop
'Print "Done..." &cnt
End ForAll
End Sub