Как получить коллекцию документов из встроенной в форме вьюшке?

Тема в разделе "Lotus - Программирование", создана пользователем Sandro, 1 июн 2010.

  1. Sandro

    Sandro Гость

    Есть задачка сделать отчёт в xls из формы, на форме есть встроенная вьюшка с респонсами дока формы, вот из неё мне и надо получить коллекцию документов, при чём в отсортированном виде, точно так как во вьюшке. Вот не знаю как обратиться ко встроенной вьюшке и можно ли получить именно отображаемый список доков.
     
  2. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    1. Вьюшку ты знаешь - возьми её из NotesDatabase по имени
    2. Создай навигатор, установи его на нужную позицию и в цикле обрабатывай
     
  3. Sandro

    Sandro Гость

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

    Если нет, тогда уж проще создавать вьюшку с нужными условиями и из неё всё брать
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если нужны отсортированные в том же порядке документы, то самое простое это:
    Код (LotusScript):
    set view = db.GetView("То же самое представление")
    set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
    set viewEntry = viewNavigator.GetFirstEntry
    Do Until viewEntry Is Nothing
    ...
    Set viewEntry = viewNavigator.GetNext(viewEntry)
    Loop
     
  5. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    внедренная вьюха с ключом "Single by category"?
    если нет, то
    Код (Text):
    Set notesViewEntry = notesViewNavigator.GetEntry( entry )
    где entry - это твой текущий документ
    и дальше - GetChild(получишь первого childа), а потом GetSibling - следующих

    если да, то:
    Код (Text):
    Set notesViewNavigator = notesView.CreateViewNavFromCategory( category$ [ , cacheSize& ] )
    где category - твоя группировка, по чём ты их связвал
     
  6. Sandro

    Sandro Гость

    Не совсем понял, как мы в таких случаях notesViewNavigator получаем ?
     
  7. RAJ

    RAJ Well-Known Member

    Регистрация:
    17 янв 2007
    Сообщения:
    440
    Симпатии:
    0
    cм. методы класса NotesView
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ну вот же пост №4:
    http://codeby.net/ipb.html?s=&sh...st&p=172251
     
  9. Sandro

    Sandro Гость

    nvy , сорри за не внимательность . Попробовал, но что то не получилось, делаю так, на нажатие кнопки в форме


    Код (LotusScript):
        Dim ws   As New NotesUIWorkspace
    Dim s As New notessession
    Dim db As NotesDatabase
    Set db=s.CurrentDatabase
    Dim edoc As NotesDocument

    Set doc = ws.CurrentDocument.Document

    Dim view As NotesView
    Dim viewNavigator As NotesViewNavigator
    Dim viewEntry As NotesViewEntry

    Set view = db.GetView("Мероприятия (Для бланка)")
    Set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)

    Messagebox viewNavigator.Count,,"!"

    Получаем 0 (((
     
  10. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Sandro
    В строке
    Код (LotusScript):
    Set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
    вместо doc.UniversalID подставьте то, что у Вас в Show Single Category. Это если во встроенном представлении документы отбираются по Show Single Category. Если по родительскому документу, то как было указано RAJ в посте 5 (первый случай).
     
  11. Sandro

    Sandro Гость

    :unsure: Извиняюсь если туплю, в запарках весь, а лотус вроде хобби, но проблемку решить надо, но что то запутался совсем (((

    в Show Single Category - у меня ничего нет , те

    Код (LotusScript):
    Dim ws   As New NotesUIWorkspace
    Dim s As New notessession
    Dim db As NotesDatabase
    Set db=s.CurrentDatabase
    Dim edoc As NotesDocument

    Set doc = ws.CurrentDocument.Document

    Dim view As NotesView
    Dim viewNavigator As NotesViewNavigator
    Dim viewEntry As NotesViewEntry

    Set view = db.GetView("Мероприятия (Для бланка)")


    Set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
    Set ViewEntry = ViewNavigator.GetEntry( doc.UniversalID )

    Messagebox viewNavigator.Count,,"!"
    P.S.
    Понимаю, что туплю от незнания классов , может есть у кого описание нормальное, желательно развёрнутое и на русском
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Sandro
    Во внедрённом представлении у Вас видны все документы или только относящиеся к главному? Если все, то нечего заморачиваться, перебирайте представление. Если в представлении стоит галка Show response documents in hierarchy, то действовать как указал RAJ, только сперва получить entry документа через GetEntryByKey.
     
  13. Sandro

    Sandro Гость

    Прошу не бить ногами ))) Но если можно по порядку, Лотус знаю плохо

    У меня во встроенной вьюшке отображаются только респонсы текущего документа (Show response documents in hierarchy), в самой вьюшке, только выборка по форме. На форме есть кнопочка, сформировать печатный бланк, в бланке список мероприятий с датами, вот и надо вывести их в эксель в порядке возрастания (сейчас идёт просто выборка коллекции и без сортировки и отчёт уже тяжеловато открывается, данных много, многостраничная экселевская книга), соответственно логично и оптимально , обратиться именно к отображённым данным во вьюшке и перенести все эти данные в эксель.

    Пока сделал так, но здесь я делаю выборку , а интересно , можно ли обратиться к отображённым данным на форме или нет

    Код (LotusScript):
    Dim ws   As New NotesUIWorkspace
    Dim s As New notessession
    Dim db As NotesDatabase
    Set db=s.CurrentDatabase
    Dim edoc As NotesDocument

    Set doc = ws.CurrentDocument.Document ' Текущий документ

    Dim view As NotesView
    Dim viewNavigator As NotesViewNavigator
    Dim viewEntry As NotesViewEntry



    Set view = db.GetView("Мероприятия (Для бланка)") ' нужное представление
    Set ViewNavigator = view.CreateViewNavFromChildren(doc) 'получаем дочернии документы представления для текущего документа

    Set viewEntry = viewNavigator.GetFirst

    Do Until viewEntry Is Nothing
    Set edoc=viewEntry.Document    
    Messagebox edoc.fld_date_zapl(0),,"!"      
    Set viewEntry = viewNavigator.GetNext(viewEntry)       
    Loop
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Sandro
    К сожалению, интерфейс Лотуса (пока?) не позволяет конструкций типа uidoc.Form.EmbeddedViews("MyView")... Так что единственный путь, это брать нужное представление и ещё раз перебирать его записи. Для ускорения Imike советовал использовать не
    Set ViewNavigator = view.CreateViewNavFromChildren("..."), а Set ViewNavigator = view.CreateViewNav и искать начальную запись и далее перебирать до конечной, конечную определять по entry.IndentLevel. Данные лучше брать не из документа, а из entry.ColumnValues, скрытые столбцы также доступны.
     
  15. Sandro

    Sandro Гость

    Понятно, просто структура Лотуса вещь своеобразная, с непривычки не так просто и разобраться, спасиб за ответ и что не послали :) Хочется разобраться, задачку начал, не знаю пойдёт или нет в широкие массы, так хоть поразбираться для расширения кругозора )))
     
Загрузка...

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