DXL: экспорт части документа

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

Статус темы:
Закрыта.
  1. oleg7

    oleg7 Гость

    помогите
    есть кнопка:
    я сохраняю письмо на локальную машину:
    Код (Text):
        Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim strm As NotesStream
    Dim doc As NotesDocument
    Dim col As Notesdocumentcollection
    Dim i As Integer
    Dim ex As NotesDXLExporter
    i = 0
    Set db = session.CurrentDatabase
    Set col=db.UnprocessedDocuments
    Set doc = col.GetFirstDocument
    While i < db.UnprocessedDocuments.Count
    name="C:\text\1" & ".txt"
    Call strm.Open(name)
    Call strm.Truncate
    Set ex = session.CreateDXLExporter(doc ,strm)
    i = i + 1
    Call ex.Process
    Call strm.Close
    Set doc=col.GetNextDocument(doc)
    Wend
    документ сохранен. А как его перенести не весь, а лишь несколько определенных строк?
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    oleg7
    вЫрезАть ;)
     
  3. oleg7

    oleg7 Гость

    а можно хоть какой-то пример....
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Гы... а какие именно строки надо?
    Берешь нужное поле... ищешь в нем то что тебе надо.. а потом записываешь
    Call strm.WriteText( то что тебе надо , EOL_CRLF)
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Код (LotusScript):
        Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim strm As NotesStream
    Dim doc As NotesDocument
    Dim col As Notesdocumentcollection
    Dim DXLExporter As NotesDXLExporter
    Dim XSLTransformer As NotesXSLTransformer
    Dim ssheet As NotesStream
    Set db = session.CurrentDatabase
    Set col = db.UnprocessedDocuments
    Set ssheet = ThisSession.CreateStream()
    Call ssheet.Open("xsl_Name")
    Set DXLExporter = session.CreateDXLExporter()
    Set XSLTransformer = session.CreateXSLTransformer()
    Call XSLTransformer.SetStylesheet(ssheet)
    Call XSLTransformer.SetInput(DXLExporter)
    Set doc = col.GetFirstDocument
    Do Until doc Is Nothing
    name="C:\text\" & doc.UniversalID & ".txt"
    Call strm.Open(name)
    Call strm.Truncate
    Call DXLExporter.SetInput(doc)
    Call XSLTransformer.SetOutput(strm)            
    DXLExporter.Process
    Call strm.Close
    Set doc = col.GetNextDocument(doc)
    Loop
     
  6. oleg7

    oleg7 Гость

    nvy
    спасибо большое за предоставленный код, сохраняется на комп документ
    Но все же так и не справилься...
    как можно не весь документ сохранять, а только например ФИО, того кто отправил, Тему сообщения, и т.д...
    Код (Text):
            file="C:\test\Docum" & ".txt"
    Call strm.Open(file)
    ' если правильно понимаю, то здесь надо из doc взять Subject  и SendTO          
    Call strm.Truncate
    а как потом вообще надо указать, что не все записать в документ, а только взятые части из doc?
     
  7. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Call ssheet.Open("xsl_Name") - здесь открывается файл xsl-преобразования. В принципе можно взять и из настроечного документа (да откуда угодно). Учите/гуглите xsl. На затравку:
    Код (Text):
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ldn="http://www.lotus.com/dxl">
    <xsl:output method="html"/>
    <xsl:template match="/">
    <xsl:element name="tr">
    <xsl:element name="td">
    <xsl:value-of select="//ldn:item[@name='Form']"/>
    </xsl:element>
    <xsl:element name="td">
    <xsl:value-of select="//ldn:item[@name='$ConflictAction']"/>
    </xsl:element>
    </xsl:element>
    </xsl:template>
    </xsl:stylesheet>
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    nvy почему бы не выгрузить всю коллекцию - и её парсить, а не каждый док?
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    lmike
    От задачи зависит. Если коллекция большая, может в памяти не уместиться.
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну да... берешь значение поля/полей собираешь в строку и записываешь

    Добавлено: lmike, nvy
    Не понимаю... зачем такие сложности?
    Или по вашему возиться с xml, который может не работать на всех машинах (зависит конечно от задачи), писать xsl-шаблон... потом перебирать результат (если вдруг понадобится) проще чем перебирать доки и сразу записывать то что надо? :what?:
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    -не нужен программист на LDN
    -язык прост
    -универсальность (не тока DXL обрабатывать)
     
  12. azat20

    azat20 Well-Known Member

    Регистрация:
    22 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    Set exporter = session.CreateDXLExporter
    exporter.RestrictToItemNames = "Subject"
     
Загрузка...
Статус темы:
Закрыта.

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