как определить выделенные документы?

DNT

Постоялец форума
Lotus team
12.10.2005
594
2
#1
Начало агента такое:

Dim vw As notesView
Dim vw_ecol As NotesViewNavigator
Dim vw_ent As NotesViewEntry
....
Set vw = ws.CurrentView.View ' back-end объект текущего представления
Set vw_ecol = vw.CreateViewNav
....


Set vw_ent = vw_ecol.GetFirst ' Формирование отчета
While Not vw_ent Is Nothing

....выгрузка в Эксель

Set vw_ent = vw_ecol.GetNext(vw_ent)
Wend


Т.е. формирую NotesViewNavigator и потом выгружаю каждый NotesViewEntry в Эксель.
Вопрос: как мне выгрузить только выделенные документы из вьюхи?
 

Kee_Keekkenen

Well-known member
05.09.2006
639
4
#2
используй свойство базы UnprocessedDocuments
Set notesDocumentCollection = notesDatabase.UnprocessedDocuments
 

DNT

Постоялец форума
Lotus team
12.10.2005
594
2
#3
используй свойство базы UnprocessedDocuments
Set notesDocumentCollection = notesDatabase.UnprocessedDocuments
не, не то.
что в моём случае даст коллекция? если я экспорт делаю с помощью NotesViewNavigator?

я уже нашел ответ, спасибо за реакцию.
 
M

Mikhail

#4
Я эту проблему так решил:
1. Создаю коллекцию UnprocessedDocumenst.
2. Когда копирую,документы(а копирую я их построчно из View, наверно, как и ты), то проверяю, есть ли текущий документ в коллекцииUnprocessedDiocuments. Если есть, то копирую, если нет, то беру следующий.

А как ты решил эту проблему? Вот мой код:
'************************************************
jj%=-1
nid = vw_ent.UniversalID
Set docc = collect.GetFirstDocument()
flag=0
While Not(docc Is Nothing)
nid1= docc.UniversalID
If nid=nid1 Then
flag=1
End If
Set docc = collect.GetNextDocument(docc)
Wend 'далее, если
If flag=1 Then 'то копирую в EXCEL
'************************************************
 

DNT

Постоялец форума
Lotus team
12.10.2005
594
2
#5
Для: Mikhail

я сделал примерно так-же. Но есть проблема: у меня вьюха категоризированная, а пользуясь этим способом можно проверить на "выбранность" только документы. Другими словами выгружаются пустые категории, чего быть не должно... Пока не знаю как побороть. :D
 
M

Mikhail

#6
Первое, что приходит в голову по поводу твоей проблемы - написать макрос на VBA для Excel. запускать этот макрос из лотуса примерно так: xls.Application.Run("My"). Где "My" - название макроса.

Если до этого не сталкивался с VBA - там не сложно. Я за сутки освоил.
Так вот, потом проверять, в уже готовом Excel-файле, и, если это категория, то удалять строку.

А вообще лучше не загоняться с макросом - из Лотуса тоже можно определить, категория это или нет:
If vw.Columns(j%).IsCategory - то тогда не копировать, пропускать. :ph34r:

У меня другая проблема :( , задумался вот:
Моим методом выгрузка работает существенно медленее, чем когда просто экспорт всех документов.
Моим методом база в 1200 документов выгружается за 2-2,5 часа.
А так где-то полчаса.

А что значит - "примерно так же"? посто если ты придумал как-то подругому, как это быстрее сделать - напиши, плиз.
 

DNT

Постоялец форума
Lotus team
12.10.2005
594
2
#7
Для: Mikhail

1. Про макрос: а как я узнаю что текущая категория это не та, которая пустая и её нужно грохнуть, а та которая мне нужна и её необходимо оставить в Экселе. Вот главное...

2. f vw.Columns(j%).IsCategory не катит по той-же причине. Как знать выбрана она лил нет?

3. Это не мой метод, в смысле, я им пользуюсь но не автор (с форума Интертраста):

Sub Initialize
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim CurDB As NotesDatabase
Dim dc As NotesDocumentCollection
Dim view As NotesView
Dim nav As NotesViewNavigator
Dim doc As NotesDocument, doc0 As NotesDocument
Dim entry As NotesViewEntry, entry0 As NotesViewEntry
Dim UNIDs() As Variant
Dim UNIDsCount As Long
Dim Counter As Long
Dim Flag1 As Variant

Set CurDB=s.CurrentDatabase
Set view=w.CurrentView.View
view.AutoUpdate=False ' line updated 08.08.2003: чуть не забыл! :) - для ускорения и во избежание ошибок
Set dc=CurDB.UnprocessedDocuments
Set nav=view.CreateViewNav

Print "."
Print "Starting..."

' создание списка UNID отмеченных документов
UNIDsCount&=dc.Count
Redim UNIDs(1 To UNIDsCount&) As Variant
If UNIDsCount& > 0 Then
Counter&=0
Set doc=dc.GetFirstDocument
Do While Not doc Is Nothing
Counter&=Counter& + 1
UNIDs(Counter&)=doc.UniversalID
Set doc0=doc
Set doc=dc.GetNextDocument(doc0)
Delete doc0 ' освобждение предыдущего полученного объекта
Loop
End If

' перебор всех элементов ViewEntry в текущем представлении
Set entry=nav.GetFirst
Do While Not entry Is Nothing
If entry.IsDocument Then
' проверка, имеется ли UNID текущего Entry в списке UNID отобранных документов
Flag1=Arraygetindex(UNIDs, entry.Document.UniversalID)
If Not Isnull(Flag1) Then
' сюда вставить обработчик
Print entry.ColumnValues(0) ' пример обработчика
End If
End If
Set entry0=entry
Set entry=nav.GetNext(entry0)
Delete entry0 ' освобждение предыдущего полученного объекта
Loop
End Sub
 
V

VVIS

#8
Для: DNT
Может попробовать выбранные документы поместить в folder со структурой такой же как у view, и навигатор строить уже по ней