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

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

GlooMMy

Как вывести все идентификаторы документов из представления?
Есть наверное какой-то метод у NotesView... может view.GetAllDocumentsByKey, что-то у меня не получилось с ним совладать.
создать коллекцию и обойти ее элементы - как правильно это сделать?
Хотелось бы увидеть пример кода.
Спасибо.
 
K

Klido

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

Note This property is new with Release 5.

Defined in
NotesView

Data type
NotesViewEntryCollection
 
A

Akupaka

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

GlooMMy

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

Dim coll As NotesDocumentCollection
Set coll = ???
 
N

nvyush

как должна быть создана коллекция содержащая все документы из данного представления
Для перебора всех документов в представлении создавать коллекцию не нужно, грубо говоря, представление уже есть коллекция документов:
Set doc = view.GetFirstDocument
Set doc = view.GetNextDocument(doc)
Быстрее перебирать NotesViewEntry как советовали выше. Иногда попадается совет типа создать первую сортированную колонку со значением 1 и получать все документы через view.GetAllDocumentsByKey(1).
 
G

GlooMMy

Вывел содержимое документа в 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 и сравнивать с именем...
 
A

Akupaka

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

Если надо раньше, или иначе, то либо XSLT, либо парсить и писать свой нужный.
 
G

GlooMMy

Как получить значение поля документа?
поле: field_1
документ: view.GetFirstDocument
 
N

nvyush

GlooMMy
view.GetFirstDocument.field_1 или view.GetFirstDocument.GetItemValue("field_1"), лучше
Код:
Set doc = view.GetFirstDocument
fieldValue = doc.GetItemValue("field_1")
При этом следует помнить, что всегда возвращается массив значений. Если в поле одно значение, то получать так: doc.GetItemValue("field_1")(0)
 
K

Klido

Как получить значение поля документа?
ну это уже слишком... вроде ещё не пятница? :trash:
Вывел содержимое документа в xml
типа купил джип, а "почему он ездит?" ;)

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

ну ка кже так кидаться писать романы не зная азбуки-то? :)
 
G

GlooMMy

Не знал что нужно (0) дописывать, спасибо
 
G

GlooMMy

Два документа:
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
 
N

nvyush

doc2_field = @GetDocField($Ref; "doc1_field")
Подозреваю, что doc2_field — вычисляемое для отображения (computed for display) поле. Соответственно, его значение не сохраняется в документе. Нужно различать документ (грубо говоря, набор полей, хранящийся в базе) и форму, по которой документ отображается.
 
G

GlooMMy

Да, оно является computed for display.
Можно его как-нибудь привязать к документу, чтобы оно вывелось?
 
H

hosm

А Вам поле надо в документе?
Можно его сделать на форме computed, например. Но на существующих документах оно появится только после сохранения документа по данной форме.
Альтернатива - написать агент, добавляющий это поле в существующие документы.
 
G

GlooMMy

В принципе в самом документе оно не нужно.
Необходимо чтобы оно выводилось вместе с этим документом.
Есть другое поле, которое является computed, оно выводится.
Поставил это поле computed - оно не выводится.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!