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

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

  1. GlooMMy

    GlooMMy Гость

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

    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
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Что-то не получилось совладать с описаной задачей ))
    Что это значит?
    Этот метод возвращает документы в представлении по ключу, состоящему из значений сортированных столбцов представления.
     
  4. GlooMMy

    GlooMMy Гость

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

    Dim coll As NotesDocumentCollection
    Set coll = ???
     
  5. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    NotesView.AllEntries
     
  6. nvyush

    nvyush Lotus team
    Lotus team

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

    GlooMMy Гость

    Вывел содержимое документа в xml:
    Код (Text):
    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 и сравнивать с именем...
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    мб так:
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если "налету", то глядеть в сторону xslt.
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Если конкретно картинки, глянь такие методы NotesDXLExporter:
    Код (Text):
    OmitItemNames
    OmitMiscFileObjects
    OmitOLEObjects
    OmitRichtextAttachments
    OmitRichtextPictures
    Но они появились только в 8-м Notes.

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

    GlooMMy Гость

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    GlooMMy
    view.GetFirstDocument.field_1 или view.GetFirstDocument.GetItemValue("field_1"), лучше
    Код (LotusScript):
    Set doc = view.GetFirstDocument
    fieldValue = doc.GetItemValue("field_1")
    При этом следует помнить, что всегда возвращается массив значений. Если в поле одно значение, то получать так: doc.GetItemValue("field_1")(0)
     
  13. Klido

    Klido Гость

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

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

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

    GlooMMy Гость

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

    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 выводился?

    вывожу вот так:
    Код (Text):
    Call exporter.SetInput(Doc)
    Call exporter.SetOutput(stream)
    Call exporter.Process
     
  16. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А doc2_field - не computed for display случайно?
     
  17. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Подозреваю, что doc2_field — вычисляемое для отображения (computed for display) поле. Соответственно, его значение не сохраняется в документе. Нужно различать документ (грубо говоря, набор полей, хранящийся в базе) и форму, по которой документ отображается.
     
  18. GlooMMy

    GlooMMy Гость

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А Вам поле надо в документе?
    Можно его сделать на форме computed, например. Но на существующих документах оно появится только после сохранения документа по данной форме.
    Альтернатива - написать агент, добавляющий это поле в существующие документы.
     
  20. GlooMMy

    GlooMMy Гость

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

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