Как файл в текст загонять?

Тема в разделе "Lotus - Программирование", создана пользователем seoman2, 14 ноя 2013.

  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    У кого-то получалось вариантом
    Код (Text):
    xml = xml + {<prilojenie>} + doc.getItemValue("ПРИЛОЖЕНИЯ_")(0) + {</prilojenie>} + Chr(13)
    записывать в файл вложения из поля ПРИЛОЖЕНИЯ_ типа Rich Text?

    Вариант
    Код (Text):
    pril = doc.GetItemValue( "ПРИЛОЖЕНИЯ_" )
    Forall m In pril
    total = total + m
    End Forall
    xml = xml + {<prilojenie>} + total + {</prilojenie>} + Chr(13)
    pril всегда пустое почему то....
     
  2. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    что пытаетесь сделать?
    то что написали выше - это (мягко говоря) некорректно впринципе
     
  3. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Хочу в переменную xml загнать содержимое поля "ПРИЛОЖЕНИЯ_" типа Rich Text, чтобы потом сохранить переменную xml в файл с расширением xml.
    Сделать что то аналогичное выгрузке CreateDXLExporter.
     
  4. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Попробуйте так. Это готовый вариант по выгрузке в dxl текущего документа вместе с вложением для вашей базы.

    Код (LotusScript):
    Sub Click(Source As Button)
    On Error Goto errh
    Dim w As New NotesUIWorkspace
    Dim s As New NotesSession
    Dim doc As NotesDocument
    Dim stream As NotesStream
    Dim exporter As NotesDXLExporter
    Dim dt As New NotesDateTime(Today)
    Dim filePath As String
    Dim fileName As String
    Dim xmlTxt As String
    Dim file As Integer
    file = Freefile

    Set doc = w.CurrentDocument.Document
    filePath = "C:\text\"
    fileName = "выгрузка от "+dt.DateOnly+{.xml}
    Set stream = s.CreateStream
    Call stream.Truncate
    Set exporter = s.CreateDXLExporter(doc, stream)

    Call exporter.Process

    Open filePath+fileName For Output As file
    Write #file, stream.ReadText
    Close file

    Goto endSub
    errh:
    Print {Error: "} & Error & {" in line } & Erl & {.}
    Resume endSub
    endSub:
    End Sub
     
  5. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    можно создать свой хмл, например так
    Dim ses As New NotesSession
    Dim parser As NotesDOMParser
    Dim dom As NotesDOMDocumentNode
    Dim instrNode As NotesDOMProcessingInstructionNode
    Dim rootElement As NotesDOMElementNode
    Dim child As NotesDOMElementNode
    Dim stream As NotesStream

    Set parser = ses.Createdomparser
    Set dom = parser.Document

    Set rootElement = dom.Createelementnode( "root_tag" )
    Set instrNode = dom.CreateProcessingInstructionNode( {xml}, {version=1.0 encoding=Windows-1251})
    Call rootElement.AppendChild( instrNode )

    Set child = dom.Createelementnode( "xml_tag" )
    Call child.Appendchild( dom.Createtextnode( "Здесь значение, полученное из поля" ) )
    Call rootElement.Appendchild( child )

    Set stream = ses.Createstream()
    Call stream.open( "c:\test.xml", "Windows-1251" )
    Call stream.truncate()
    Call parser.Setoutput( stream )
    Call parser.Serialize()
    Call stream.Close()

    писал сходу работоспособность не проверял.. должно работать
     
  6. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Eugen - выложите Ваш svg2gfx-simple.xsl и Ваш рабочий код с CreateXSLTransformer, не с поста 1.

    Проблема сделать проблема сделать валидный .xsl для обработки XML.
    Пример:
    XML содержит:
    <item name='ЗАГОЛОВОК'><text>текст заголовка</text></item>
    xsl содержит:
    <xsl:value-of select="ЗАГОЛОВОК"/>
    но на выходе CreateXSLTransformer хмлка содержит строку:
    xsl:value-of select="ЗАГОЛОВОК"/>
     
  7. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Надо использовать класс NotesRichTextItem. И, таким способом, получите только текст, без картинок, вложений и т.д.
    Вложения можно перегнать в Base64, но получится "шило на мыло".
     
  8. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Не получается выгрузить в текстовую строку поле "ПРИЛОЖЕНИЯ_" типа RichText.

    Dim rtitem As NotesRichTextItem
    Set rtitem = New NotesRichTextItem ( doc, "ПРИЛОЖЕНИЯ_")
    Forall m In rtitem.values
    total = total + m
    End Forall

    xml = xml + {<prilojenie>} + total + {</prilojenie>} + Chr(13)
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Код (LotusScript):
    Set rtitem = doc.GetFirstItem("ПРИЛОЖЕНИЯ_")
    ' plainText$ = notesRichTextItem.GetUnformattedText( )
     
  10. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Мне не текст с поля надо, а содержимое rtitem.EmbeddedObjects(0)
    Выгружать в файл
    Call rtitem.ExtractFile( "c:\samples\" & o.Source )
    , а потом его как текст в xml загонять?
     
  11. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    вот и добрались до сути.
    Вы хелп про EmbeddedObjects property для notesRichTextItem читали?
    Там операции с объектами: аттачменты(файлы), встроенное OLE и ссылки.
    Так просто, с ходу, это не получить.
    Что конкретно вам нужно из вашего RT поля?
    Список файлов? Это просто.
    Содержимое файлов? Тут сложнее, особенно с картинками и PDF и кучей всего другого.
    Список ссылок? Относительно просто, вопрос что нужно.
     
  12. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Задача, выгружать (потом загружать) в XML (определенного формата) документ у которого в RT поле ПРИЛОЖЕНИЯ_ могут быть различные вложения - doc, pdf.
    Понятно, что можно с CreateXSLTransformer все сделать, но пока отрабатываю вариант с записью полей в переменную.
     
  13. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Ну, допустим в этом поле есть вложение - файл Microsoft Word. Как вы хотите увидеть его внутри XML файла? В каком виде?
     
  14. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    В виде аналогичном как делает выгрузку CreateDXLExporter.
     
  15. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Если вас не устраивают штатные средства (DXLExporter) или по каким-то причинам вы не можете ими воспользоваться, то вам надо изучать такие вещи, как MIME, BASE64 и т.к. вложение может быть сжатым (зависит от настроек клиента, где было сделано вложение), то ещё и LZ1.
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    garrick
    Немного оффтоп, но если файл крепился от пользователя с клиентом 8+, то файл сжимается всегда, даже если LZ1 в базе выключено.
    Если файл крепился от сервера, то тут уже настройки работают для базы.
     
  17. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Согласен. Но, я думаю, что если выгрузить файл вложения на диск, то Lotus Notes сам должен "разжать" его в исходное состояние, если это необходимо. Потом этот файл перекодировать в BASE64 и то, что получится вставить в XML. Ну, и не забыть после этого удалить временный файл вложения.
     
  18. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Вот к примеру есть у меня
    obj = rtitem.EmbeddedObjects(0)
    И я хочу obj загнать в текстовую переменную как BASE64.
    ка кподключать функцию notesStreamToBase64(obj) ?
     
  19. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    http://codeby.net/lofiversion/index.php?t37327.html
     
Загрузка...

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