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

  • Автор темы Sandro
  • Дата начала
S

Sandro

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

RAJ

Well-known member
17.01.2007
440
0
#2
Есть задачка сделать отчёт в xls из формы, на форме есть встроенная вьюшка с респонсами дока формы, вот из неё мне и надо получить коллекцию документов, при чём в отсортированном виде, точно так как во вьюшке. Вот не знаю как обратиться ко встроенной вьюшке и можно ли получить именно отображаемый список доков.
1. Вьюшку ты знаешь - возьми её из NotesDatabase по имени
2. Создай навигатор, установи его на нужную позицию и в цикле обрабатывай
 
S

Sandro

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

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

nvyush

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

Если нет, тогда уж проще создавать вьюшку с нужными условиями и из неё всё брать
Если нужны отсортированные в том же порядке документы, то самое простое это:
Код:
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
 

RAJ

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

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

Sandro

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

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

Sandro

#9
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 (((
 

nvyush

Lotus team
22.04.2009
2 317
0
#10
Sandro
В строке
Код:
Set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
вместо doc.UniversalID подставьте то, что у Вас в Show Single Category. Это если во встроенном представлении документы отбираются по Show Single Category. Если по родительскому документу, то как было указано RAJ в посте 5 (первый случай).
 
S

Sandro

#11
: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.
Понимаю, что туплю от незнания классов , может есть у кого описание нормальное, желательно развёрнутое и на русском
 

nvyush

Lotus team
22.04.2009
2 317
0
#12
Sandro
Во внедрённом представлении у Вас видны все документы или только относящиеся к главному? Если все, то нечего заморачиваться, перебирайте представление. Если в представлении стоит галка Show response documents in hierarchy, то действовать как указал RAJ, только сперва получить entry документа через GetEntryByKey.
 
S

Sandro

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

У меня во встроенной вьюшке отображаются только респонсы текущего документа (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
 

nvyush

Lotus team
22.04.2009
2 317
0
#14
Sandro
К сожалению, интерфейс Лотуса (пока?) не позволяет конструкций типа uidoc.Form.EmbeddedViews("MyView")... Так что единственный путь, это брать нужное представление и ещё раз перебирать его записи. Для ускорения Imike советовал использовать не
Set ViewNavigator = view.CreateViewNavFromChildren("..."), а Set ViewNavigator = view.CreateViewNav и искать начальную запись и далее перебирать до конечной, конечную определять по entry.IndentLevel. Данные лучше брать не из документа, а из entry.ColumnValues, скрытые столбцы также доступны.
 
S

Sandro

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