• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

Sandro

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

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

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

Если нет, тогда уж проще создавать вьюшку с нужными условиями и из неё всё брать
Если нужны отсортированные в том же порядке документы, то самое простое это:
Код:
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
 
внедренная вьюха с ключом "Single by category"?
если нет, то
Код:
Set notesViewEntry = notesViewNavigator.GetEntry( entry )
где entry - это твой текущий документ
и дальше - GetChild(получишь первого childа), а потом GetSibling - следующих

если да, то:
Код:
Set notesViewNavigator = notesView.CreateViewNavFromCategory( category$ [ , cacheSize& ] )
где category - твоя группировка, по чём ты их связвал
 
внедренная вьюха с ключом "Single by category"?
если нет, то
Код:
Set notesViewEntry = notesViewNavigator.GetEntry( entry )
где entry - это твой текущий документ
и дальше - GetChild(получишь первого childа), а потом GetSibling - следующих

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

Не совсем понял, как мы в таких случаях notesViewNavigator получаем ?
 
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 (((
 
Sandro
В строке
Код:
Set viewNavigator = view.CreateViewNavFromCategory(doc.UniversalID)
вместо doc.UniversalID подставьте то, что у Вас в Show Single Category. Это если во встроенном представлении документы отбираются по Show Single Category. Если по родительскому документу, то как было указано RAJ в посте 5 (первый случай).
 
: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.
Понимаю, что туплю от незнания классов , может есть у кого описание нормальное, желательно развёрнутое и на русском
 
Sandro
Во внедрённом представлении у Вас видны все документы или только относящиеся к главному? Если все, то нечего заморачиваться, перебирайте представление. Если в представлении стоит галка Show response documents in hierarchy, то действовать как указал RAJ, только сперва получить entry документа через GetEntryByKey.
 
Прошу не бить ногами ))) Но если можно по порядку, Лотус знаю плохо

У меня во встроенной вьюшке отображаются только респонсы текущего документа (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
 
Sandro
К сожалению, интерфейс Лотуса (пока?) не позволяет конструкций типа uidoc.Form.EmbeddedViews("MyView")... Так что единственный путь, это брать нужное представление и ещё раз перебирать его записи. Для ускорения Imike советовал использовать не
Set ViewNavigator = view.CreateViewNavFromChildren("..."), а Set ViewNavigator = view.CreateViewNav и искать начальную запись и далее перебирать до конечной, конечную определять по entry.IndentLevel. Данные лучше брать не из документа, а из entry.ColumnValues, скрытые столбцы также доступны.
 
Понятно, просто структура Лотуса вещь своеобразная, с непривычки не так просто и разобраться, спасиб за ответ и что не послали :) Хочется разобраться, задачку начал, не знаю пойдёт или нет в широкие массы, так хоть поразбираться для расширения кругозора )))
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab