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

Тема в разделе "Lotus - Программирование", создана пользователем DNT, 2 апр 2007.

  1. DNT

    DNT Постоялец форума
    Lotus team

    Регистрация:
    12 окт 2005
    Сообщения:
    592
    Симпатии:
    7
    Начало агента такое:

    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 в Эксель.
    Вопрос: как мне выгрузить только выделенные документы из вьюхи?
     
  2. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    используй свойство базы UnprocessedDocuments
    Set notesDocumentCollection = notesDatabase.UnprocessedDocuments
     
  3. DNT

    DNT Постоялец форума
    Lotus team

    Регистрация:
    12 окт 2005
    Сообщения:
    592
    Симпатии:
    7
    не, не то.
    что в моём случае даст коллекция? если я экспорт делаю с помощью NotesViewNavigator?

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

    Mikhail Гость

    Я эту проблему так решил:
    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
    '************************************************
     
  5. DNT

    DNT Постоялец форума
    Lotus team

    Регистрация:
    12 окт 2005
    Сообщения:
    592
    Симпатии:
    7
    Для: Mikhail

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

    Mikhail Гость

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

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

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

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

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

    DNT Постоялец форума
    Lotus team

    Регистрация:
    12 окт 2005
    Сообщения:
    592
    Симпатии:
    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
     
  8. VVIS

    VVIS Гость

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

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