1. Уважаемые участники и гости, 19 октября codeby будет работать в режиме "Только чтение". Регистрация новых участников будет закрыта. 20 октября портал продолжит работу в прежнем режиме.

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

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

  1. Sandro

    Sandro Гость

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

    RAJ Well-Known Member

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

    Sandro Гость

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

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

    nvyush Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если нужны отсортированные в том же порядке документы, то самое простое это:
    Код:
    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

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

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

    Sandro Гость

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

    RAJ Well-Known Member

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

    nvyush Well-Known Member
    Lotus team

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

    Sandro Гость

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


    Код:
    	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 Well-Known Member
    Lotus team

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

    Sandro Гость

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

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

    Код:
    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 Well-Known Member
    Lotus team

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

    Sandro Гость

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

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

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

    Код:
    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 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    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 Гость

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

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