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

seoman2

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

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#2
что пытаетесь сделать?
то что написали выше - это (мягко говоря) некорректно впринципе
 

seoman2

Well-Known Member
Lotus team
#3
Хочу в переменную xml загнать содержимое поля "ПРИЛОЖЕНИЯ_" типа Rich Text, чтобы потом сохранить переменную xml в файл с расширением xml.
Сделать что то аналогичное выгрузке CreateDXLExporter.
 

Eugen

Well-Known Member
22.03.2012
177
0
Москва
#4
Попробуйте так. Это готовый вариант по выгрузке в dxl текущего документа вместе с вложением для вашей базы.

Код:
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
 

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
Москва
#5
Хочу в переменную xml загнать содержимое поля "ПРИЛОЖЕНИЯ_" типа Rich Text, чтобы потом сохранить переменную xml в файл с расширением xml.
Сделать что то аналогичное выгрузке CreateDXLExporter.
можно создать свой хмл, например так
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()

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

seoman2

Well-Known Member
Lotus team
#6
Eugen - выложите Ваш svg2gfx-simple.xsl и Ваш рабочий код с CreateXSLTransformer, не с поста 1.

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

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
Киев (Русь)
#7
Надо использовать класс NotesRichTextItem. И, таким способом, получите только текст, без картинок, вложений и т.д.
Вложения можно перегнать в Base64, но получится "шило на мыло".
 

seoman2

Well-Known Member
Lotus team
#8
Не получается выгрузить в текстовую строку поле "ПРИЛОЖЕНИЯ_" типа 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)
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#9
Код:
Set rtitem = doc.GetFirstItem("ПРИЛОЖЕНИЯ_")
' plainText$ = notesRichTextItem.GetUnformattedText( )
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#11
вот и добрались до сути.
Вы хелп про EmbeddedObjects property для notesRichTextItem читали?
Там операции с объектами: аттачменты(файлы), встроенное OLE и ссылки.
Так просто, с ходу, это не получить.
Что конкретно вам нужно из вашего RT поля?
Список файлов? Это просто.
Содержимое файлов? Тут сложнее, особенно с картинками и PDF и кучей всего другого.
Список ссылок? Относительно просто, вопрос что нужно.
 

seoman2

Well-Known Member
Lotus team
#12
Задача, выгружать (потом загружать) в XML (определенного формата) документ у которого в RT поле ПРИЛОЖЕНИЯ_ могут быть различные вложения - doc, pdf.
Понятно, что можно с CreateXSLTransformer все сделать, но пока отрабатываю вариант с записью полей в переменную.
 

garrick

Well-Known Member
Lotus team
26.10.2009
866
68
Москва
#13
Задача, выгружать (потом загружать) в XML (определенного формата) документ у которого в RT поле ПРИЛОЖЕНИЯ_ могут быть различные вложения - doc, pdf.
Понятно, что можно с CreateXSLTransformer все сделать, но пока отрабатываю вариант с записью полей в переменную.
Ну, допустим в этом поле есть вложение - файл Microsoft Word. Как вы хотите увидеть его внутри XML файла? В каком виде?
 

garrick

Well-Known Member
Lotus team
26.10.2009
866
68
Москва
#15
В виде аналогичном как делает выгрузку CreateDXLExporter.
Если вас не устраивают штатные средства (DXLExporter) или по каким-то причинам вы не можете ими воспользоваться, то вам надо изучать такие вещи, как MIME, BASE64 и т.к. вложение может быть сжатым (зависит от настроек клиента, где было сделано вложение), то ещё и LZ1.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#16
garrick
вложение может быть сжатым (зависит от настроек клиента, где было сделано вложение)
Немного оффтоп, но если файл крепился от пользователя с клиентом 8+, то файл сжимается всегда, даже если LZ1 в базе выключено.
Если файл крепился от сервера, то тут уже настройки работают для базы.
 

garrick

Well-Known Member
Lotus team
26.10.2009
866
68
Москва
#17
garrick

Немного оффтоп, но если файл крепился от пользователя с клиентом 8+, то файл сжимается всегда, даже если LZ1 в базе выключено.
Если файл крепился от сервера, то тут уже настройки работают для базы.
Согласен. Но, я думаю, что если выгрузить файл вложения на диск, то Lotus Notes сам должен "разжать" его в исходное состояние, если это необходимо. Потом этот файл перекодировать в BASE64 и то, что получится вставить в XML. Ну, и не забыть после этого удалить временный файл вложения.