Тоже так подумал. Перед импортом делаю delete doc. - те же яйца...Может ей мешает док in-memory?
Гм...вот какую-то инфу трогать низя в ДХЛ (удалять), может она и пропала?
workaround: импортировать в отдельно стоящую пустую БД. сразу после импорта получать этот свежий док, писать (скриптом) поверх исходного и убиватьЕсли-б знать все folder-ы, где письмо лежит, workaround сделал-бы. Впрочем, и тут засада: как в общем случае найти свежесозданный док-т?
Для этого есть совершенно гениальные методы, которые наконец-то стали работать с 8.5.1...:Задачка-то бытовая: почикать аттачи и картинки из письма.
Т.е. <item name='$FILE'> + из <richtext> выкусить <attachmentref> и просто <picture>. Всё делается на 1-2-3.
Sub Click(Source As Button)
Dim Session As New NotesSession
Dim Wsp As New NotesUIWorkspace
Dim db As NotesDatabase
Dim Stream As NotesStream
Dim DXLImporter As NotesDXLImporter
filename$ = "D:\Картинки\" + Wsp.Prompt(PROMPT_OKCANCELEDIT,_
"Введите имя файла из которого импортировать DXL",_
"D:\Картинки\", "Picture_надо.xml" )
Set Db = Session.CurrentDatabase
Set Stream = Session.CreateStream
If Not Stream.Open(filename$) Then
Messagebox "Невозможно открыть файл " & filename$,, "Ошибка"
Exit Sub
End If
Set DXLImporter = Session.CreateDXLImporter(stream, Db)
DXLImporter.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
DXLImporter.Process
Msgbox "Готово! Документ " & filename$ & " импортирован."
End Sub
Да, это они отстойно сделали:Воюю дальше - с кодировками: если пром.Stream-ы на файлах, всё Ok. А если "в уме" - не работает. Импортёр ругается на кодировку
Натыкался на это, когда надо было передавать данные в реляционку, но пока забросил, т.к. чудесным образом кодировка совпала. Да и есть там возможность перекодировки в LCField и LCStream.Read-only. Character set used by the external data source.
To get: charset$ = notesStream.Charset
Usage
Specify the character set for a stream with Open.
This property is Unicode for a new NotesStream object.
Про кодировку: наступал на грабли с кодировкой стримов при использовании xsltransformer-a. Оно ругаеца, если не совпадает кодировка исходного потока, потока c xslt и таргета. Решал принудительной установкой кодировки в UTF-8.Воюю дальше - с кодировками: если пром.Stream-ы на файлах, всё Ok. А если "в уме" - не работает. Импортёр ругается на кодировку
Function getStreamUTF8() As NotesStream
Dim session As New NotesSession
Dim tmpDoc As New NotesDocument( session.CurrentDatabase )
Dim stream As NotesStream
Set stream = session.CreateStream
Dim exporter As NotesDXLExporter
Set exporter = session.CreateDXLExporter
Call exporter.SetInput( tmpDoc )
Call exporter.SetOutput( stream )
Call exporter.Process
Call stream.Truncate
Set getStreamUTF8 = stream
End Function
вот этого в том посте и не хваталоВот такой вот workaround был обнаружен: экспортер всегда вываливает результат в utf-8
вот этого в том посте и не хватало![]()
так что не совсем это workaroundRead-only. Character set used by the external data source.
To get: charset$ = notesStream.Charset
Usage
Specify the character set for a stream with Open.
This property is Unicode for a new NotesStream object.
Э нет. Это тот самый workaround. unicode != utf-8. Иначе бы не плясал с созданием документа и выгрузки его в in-memory stream и последующим truncate.так что не совсем это workaround
Фиг вам...Вот такой вот workaround был обнаружен: экспортер всегда вываливает результат в utf-8. грех было не воспользоваца. c r6 работает - до сих пор не сломали.
Если это делает агент на сервере, то может ли Charset зависеть от того, что указано в настройках конфигурации сервера?НО при первом-же обращении к нему SAXParser-а оно превращается в Charset=x-lnmbcs
...
Если-же поток in-memory, то Charset=x-lnmbcs (SAX затаптывает и unicode, и принудительный UTF-8). Что при этом в содержимом - х.з.
Импортировать в темповую базу(лучше на локале) и потом new NotesDocument , copyAllItems, ws.EditDocument ?Чтоб не плодить темы.. вопрос: можно каким-то образом не загружать в базу док из XML, а получить объект несохранённого дока по этому XML?
Надо, чтобы юзер щёлкнул на кнопку, ему открылся док (не сохранённый/ по аналогии с новым), а юзер уже сам принимал решение подходит оно ему (сохранять) или нет. Не хочется плодить доки..
На этой строке был вот такие артефакты:<?xml version='1.0'?>
<DXLImporterLog>
<error source='NotesInputSource' line='146' column='3'>Required attribute 'name' was not provided</error>
<error source='NotesInputSource' line='145' column='80' id='6920'>parstyle element must have name attribute</error>
<error>DXL importer operation failed</error>
</DXLImporterLog>
<pardef id='13' leftmargin='0.0104in' keepwithnext='true' keeptogether='true'><parstyle
/></pardef>
<pardef id='13' leftmargin='0.0104in' keepwithnext='true' keeptogether='true'><parstyle/></pardef>
и всё заработало.<pardef id='13' leftmargin='0.0104in' keepwithnext='true' keeptogether='true'/>