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

seoman2

Lotus team
17.02.2010
458
1
#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

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#2
что пытаетесь сделать?
то что написали выше - это (мягко говоря) некорректно впринципе
 

seoman2

Lotus team
17.02.2010
458
1
#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
4
#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

Lotus team
17.02.2010
458
1
#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 260
5
#7
Надо использовать класс NotesRichTextItem. И, таким способом, получите только текст, без картинок, вложений и т.д.
Вложения можно перегнать в Base64, но получится "шило на мыло".
 

seoman2

Lotus team
17.02.2010
458
1
#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

Lotus team
28.10.2011
2 131
102
#9
Код:
Set rtitem = doc.GetFirstItem("ПРИЛОЖЕНИЯ_")
' plainText$ = notesRichTextItem.GetUnformattedText( )
 

seoman2

Lotus team
17.02.2010
458
1
#10
Мне не текст с поля надо, а содержимое rtitem.EmbeddedObjects(0)
Выгружать в файл
Call rtitem.ExtractFile( "c:\samples\" & o.Source )
, а потом его как текст в xml загонять?
 

savl

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

seoman2

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

garrick

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

garrick

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

savl

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

garrick

Lotus team
26.10.2009
894
61
#17
garrick

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

seoman2

Lotus team
17.02.2010
458
1
#18
Вот к примеру есть у меня
obj = rtitem.EmbeddedObjects(0)
И я хочу obj загнать в текстовую переменную как BASE64.
ка кподключать функцию notesStreamToBase64(obj) ?