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

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

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

Документы представления

  • Автор темы Автор темы GlooMMy
  • Дата начала Дата начала
G

GlooMMy

Как вывести все идентификаторы документов из представления?
Есть наверное какой-то метод у NotesView... может view.GetAllDocumentsByKey, что-то у меня не получилось с ним совладать.
создать коллекцию и обойти ее элементы - как правильно это сделать?
Хотелось бы увидеть пример кода.
Спасибо.
 
вывести .... из представления
в смысле найти/взять все документы из представления? Берешь вьюху, берешь первый/последний док и пошел в цикле...
Ну или стандартно свойство вьюхи - и броди по коллекции
AllEntries property
Read-only. All the entries in a view.

Note This property is new with Release 5.

Defined in
NotesView

Data type
NotesViewEntryCollection
 
что-то у меня не получилось с ним совладать
Что-то не получилось совладать с описаной задачей ))
Как вывести все идентификаторы документов из представления?
Что это значит?
Этот метод возвращает документы в представлении по ключу, состоящему из значений сортированных столбцов представления.
 
Есть представление имеющее имя MyView
как должна быть создана коллекция содержащая все документы из данного представления?

Dim coll As NotesDocumentCollection
Set coll = ???
 
как должна быть создана коллекция содержащая все документы из данного представления
Для перебора всех документов в представлении создавать коллекцию не нужно, грубо говоря, представление уже есть коллекция документов:
Set doc = view.GetFirstDocument
Set doc = view.GetNextDocument(doc)
Быстрее перебирать NotesViewEntry как советовали выше. Иногда попадается совет типа создать первую сортированную колонку со значением 1 и получать все документы через view.GetAllDocumentsByKey(1).
 
Вывел содержимое документа в xml:
Код:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase

Dim stream As NotesStream
Set stream = session.CreateStream
filename$ = "c:\dxl\" & _
Left(db.FileName, Len(db.FileName) - 4) & "_OUTPUT.xml"
If Not stream.Open(filename$) Then
Messagebox "Cannot open " & filename$,, "Error"
Exit Sub
End If
Call stream.Truncate

Dim ws As New NotesUIWorkspace
Dim uiview As NotesUIView
Dim view As NotesView
Set uiview = ws.CurrentView
Set view = uiview.View 'текущее предстовление

'	Dim coll As NotesDocumentCollection
Dim lastDoc As NotesDocument

Set lastDoc = view.GetLastDocument

Dim exporter As NotesDXLExporter
Set exporter = session.CreateDXLExporter

Call exporter.SetInput(lastDoc)
Call exporter.SetOutput(stream)
Call exporter.Process
End Sub

Как обратиться к элементу (например "picture") и не включать его в выводимый файл?
Что добавить в код?

Я предполагаю через NotesDOMNode.NodeType выбирать тип Element и сравнивать с именем...
 
Как обратиться к элементу (например "picture") и не включать его в выводимый файл?
Что добавить в код?
Если конкретно картинки, глянь такие методы NotesDXLExporter:
Код:
OmitItemNames
OmitMiscFileObjects
OmitOLEObjects
OmitRichtextAttachments
OmitRichtextPictures
Но они появились только в 8-м Notes.

Если надо раньше, или иначе, то либо XSLT, либо парсить и писать свой нужный.
 
Как получить значение поля документа?
поле: field_1
документ: view.GetFirstDocument
 
GlooMMy
view.GetFirstDocument.field_1 или view.GetFirstDocument.GetItemValue("field_1"), лучше
Код:
Set doc = view.GetFirstDocument
fieldValue = doc.GetItemValue("field_1")
При этом следует помнить, что всегда возвращается массив значений. Если в поле одно значение, то получать так: doc.GetItemValue("field_1")(0)
 
Как получить значение поля документа?
ну это уже слишком... вроде ещё не пятница? :trash:
Вывел содержимое документа в xml
типа купил джип, а "почему он ездит?" ;)

смотрите методы объекта, который получаете - NotesDocument, там есть, например, GetItemValue....
можно просто
doc=view.getfirstdocument
set var=doc.field_1(0)

ну ка кже так кидаться писать романы не зная азбуки-то? :)
 
Не знал что нужно (0) дописывать, спасибо
 
Два документа:
doc_1
doc_2
У них есть поля doc1_field и doc2_field соответственно.
doc2_field = @GetDocField($Ref; "doc1_field")
При выводе содержимого doc_1 и doc_2 в xml содержимое поля doc1_field выводится, а doc2_field нет.
Что сделать чтобы doc2_field выводился?

вывожу вот так:
Код:
Call exporter.SetInput(Doc)
Call exporter.SetOutput(stream)
Call exporter.Process
 
doc2_field = @GetDocField($Ref; "doc1_field")
Подозреваю, что doc2_field — вычисляемое для отображения (computed for display) поле. Соответственно, его значение не сохраняется в документе. Нужно различать документ (грубо говоря, набор полей, хранящийся в базе) и форму, по которой документ отображается.
 
Да, оно является computed for display.
Можно его как-нибудь привязать к документу, чтобы оно вывелось?
 
А Вам поле надо в документе?
Можно его сделать на форме computed, например. Но на существующих документах оно появится только после сохранения документа по данной форме.
Альтернатива - написать агент, добавляющий это поле в существующие документы.
 
В принципе в самом документе оно не нужно.
Необходимо чтобы оно выводилось вместе с этим документом.
Есть другое поле, которое является computed, оно выводится.
Поставил это поле computed - оно не выводится.
 
Мы в соцсетях:

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