Переобразование Dxl

  • Автор темы StarikStarik2705
  • Дата начала
S

StarikStarik2705

#1
в Rich тексте лежит DXl
<?xml version='1.0' encoding='utf-8' ?>
<database xmlns='http://www.lotus.com/dxl' version='8.5.3'>
<document form='Form'>
<item name='Subject'><text>DXL table</text></item>
<item name='Body'>
<richtext> <table>
<tablecolumn width="5%"/><tablecolumn width="15%"/><tablecolumn width="100%"/><tablecolumn width="80%"/><tablecolumn /><tablecolumn /><tablecolumn /><tablecolumn /><tablecolumn /><tablecolumn /><tablecolumn width="15%"/>
<tablerow>
<tablecell bgcolor='silver'><pardef id='3' align='center'/><par def='3'></par></tablecell>
<tablecell bgcolor='silver'><pardef id='4' align='center'/><par def='4'></par></tablecell>
<tablecell bgcolor='silver'><pardef id='5' align='center'/><par def='5'><run><font size='8pt'/>Вид документа</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='6' align='center'/><par def='6'><run><font size='8pt'/>№ документа LN</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='7' align='center'/><par def='7'><run><font size='8pt'/>Дата документа LN</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='8' align='center'/><par def='8'><run><font size='8pt'/>РќРђР </run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='9' align='center'/><par def='9'><run><font size='8pt'/>№ документа SAP</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='10' align='center'/><par def='10'><run><font size='8pt'/>Дата документа SAP</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='11' align='center'/><par def='11'><run><font size='8pt'/>Контрагент</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='12' align='center'/><par def='12'><run><font size='8pt'/>Кол-во страниц</run></par></tablecell>
<tablecell bgcolor='silver'><pardef id='13' align='center'/><par def='13'><run><font size='8pt'/>в„–</run></par></tablecell>
</tablerow></table>

кто знает есть ли какой способ этот DXL переобразовать в таблицу ?
и какие методы для этого использовать?
 
S

StarikStarik2705

#3
Function AppendAsRT (rtitem As NotesRichTextItem, dxl As String,parent As NotesDocument) As String
On Error Goto processError
'** if no rich text item was given to us, just exit without doing anything

Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim importer As NotesDXLImporter
Dim ws As New NotesUIWorkspace

Set db = session.CurrentDatabase
Set importer = session.CreateDXLImporter(dxl, db)
importer.ReplicaRequiredForReplaceOrUpdate = False
importer.DocumentImportOption = DXLIMPORTOPTION_CREATE
Call importer.Process

Set doc = db.GetDocumentByID(importer.GetFirstImportedNoteId)
Set body = doc.GetFirstItem("Body")
Set rtitem = parent.GetFirstItem("Body")
Call rtitem.AppendRTItem(body)
Call rtitem.Update
Call doc.Save(True,False)
Call parent.ReplaceItemValue("SaveOptions","0")
Call ws.RefreshParentNote



Exit Function
processError:
If (importer.Log <> "") Then
AppendAsRT = importer.Log
Else
AppendAsRT = "Error " & Err & " on line " & Erl & ": " & Error$
End If
Exit Function
End Function

я написал такой код, он из одно рич поля(моего DXL) ложит инфу в другое, но что странно, почему если портянка всего одну страницу, то всё конвертирует, а если скажем страниц 20 то ничего не происходит. Связано ли это с ограничением стрима?
 

savl

Lotus team
28.10.2011
2 131
102
#4
Связано ли это с ограничением стрима
Кажись это связано с ограничением импорта из dxl, в версии 6.5 нельзя было так обновлять большие агенты и библиотеки, как раз примерно страниц 10-15 на формате А4. Видимо далее это не фиксилось.
 
S

StarikStarik2705

#5
Кажись это связано с ограничением импорта из dxl, в версии 6.5 нельзя было так обновлять большие агенты и библиотеки, как раз примерно страниц 10-15 на формате А4. Видимо далее это не фиксилось.
наверно тогда то что я задумал не возможно сделать в связи с этим ограничением, я поиском нашёл 50 доков, и портянка ДХЛ получилась внушительная. И поетому если не фиксилось, то дальше развивать задание наверно безсмысленно
 

savl

Lotus team
28.10.2011
2 131
102
#6
CтарыйStarik
Изначальное требование какое? Что требуется получить? Это связано с hot-spot?
 
S

StarikStarik2705

#7
CтарыйStarik
Изначальное требование какое? Что требуется получить? Это связано с hot-spot?
требование такое, есть форма "поиск", нажимаю "Найти", в колекцию попадает сколько там документов.
результат - в РТ поле нарисована табличка, в
первой колонке которой кубик жёлтый с ссылкой на сам документ
второй ссылка на документ в представлении
третья и дальше информация из полей документа

я начал делать через выгрузку изза того что методы RICHTExt классов не позволяют сделать HotSpot. Да ещё и с тем кодом которым я хочу
вот такое задание
 

savl

Lotus team
28.10.2011
2 131
102
#8
а вот этот параметр обязателен "второй ссылка на документ в представлении" ?
 

savl

Lotus team
28.10.2011
2 131
102
#10
хм...теперь даже интересно как это сделать...
любой документ найти в другом представлении из текущего: клик на документ, Ctrl + клик мышью на нужном представлении.
Можно было бы кидать результаты в личную папку и объяснить им как переходить.

Если уж продолжать тему dxl. Пока в голову приходит только попробовать загрузить dxl через java, может она сможет обработать такой объем.
Либо разделить результаты и загружать по частям. Типа в одном dxl только 10 документов, если документов 50, то 5 dxl разных.
Загружаем последовательно все dxl в базу, создаем временные доки, затем обращаясь к rt-полю каждого дока добавляем его в наш документ-результат, методом AppendRTItem. Но это изврат.

А ошибок при импорте "протыни" нет?
 
A

alexas

#11
требование такое, есть форма "поиск", нажимаю "Найти", в колекцию попадает сколько там документов.
результат - в РТ поле нарисована табличка ...
доки грузите в приватную папку,
результат - вместо РТ таблички, папка с доками, можно оформить так, что практически не будет отличаться от РТ таблицы.
... в первой колонке которой кубик жёлтый с ссылкой на сам документ...
- в первой колонке размещаете картинку "кубик желтый", переход на документ - код в InViewEdit папки (для первой колонки)
...второй ссылка на документ в представлении...
так-же в InViewEdit (для второй колонки или для всех, кроме первой) запоминаете UNID этого дока, открываете нужный View, по запомненному UNID позиционируютесь на документ.
Т.о. логика и дизайн соответствуют заданию плюс бонус - скролинг в таблице. Так-же, в этом случае, можно на форме разместить прогресс-бар и кнопку прекращения поиска, если нужный юзеру док уже в папке (для этого грузить доки в папку в фоновом режиме и при загрузке очередных 10-20 штук доков - рефрешить папку).
Я бы делал так.
 

swyatogor

Lotus team
24.02.2014
478
10
#12
я тут смотрю только я наверное в DXL не ковырялся никогда..
Вопрос.. подскажите как in-line image откорретировать по размеру отображения))
Как выгрузить документ в файл xml я понял, вроде получается.. нашел глазами по тегам где лежит такая картинка.. а как её програмно отредактировать и вернуть обратно документ?
в частности вот такую строку:
Код:
<par def='2'><picture width='1366px' height='728px'><gif>
изменить ширину и высоту..
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#13
@swyatogor "эти" параметры не поменяю саму картинку...
картинку надо взять и отресайзить, она там в base64, код по выдергиванию всего, чего не попало, из дока - я выкладывал (на java)
ресайз - тоже где-то, здесь, валяется
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#14
алгоритм: doc->SAX->files + DXL->resize gif->replace DXL part (м.б. какой удобно инструмент)->import DXL (с заменой дока)
 

swyatogor

Lotus team
24.02.2014
478
10
#15
@lmike, а мне ее физически ресайзить (т.е. менять ее физические размеры, переконвертировать) и не нужно.. мне нужно чтобы она отображалась меньше по масштабу- т.е. влазила по ширине куда нужно))..
 

swyatogor

Lotus team
24.02.2014
478
10
#16
оказывается просто нужно "дописать" параметры отображения
Код:
<par def='2'><picture width='1366px' height='728px' scaledheight='3.5833in'
scaledwidth='7.1146in'><gif>
вот последние два это как раз таки масштабирование..

хотя можно не париться и менять просто ширину и высоту)
 
Последнее редактирование:

swyatogor

Lotus team
24.02.2014
478
10
#17
Другой вопрос.. а как заставить экспортера сохранять файл в формате UTF-8.. а то он по умолчанию его сохраняет как cp1251.. а импортер его потом не понимает((
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#18
Другой вопрос.. а как заставить экспортера сохранять файл в формате UTF-8.. а то он по умолчанию его сохраняет как cp1251.. а импортер его потом не понимает((
дык стриму прописать кодировку
 
Симпатии: Понравилось magistr

swyatogor

Lotus team
24.02.2014
478
10
#19
Добрый лень..

Ктонить сталкивался с задачей - удалить отдельно взятый child у ноды?..
Как ни пробую не получается.. или пишел ошибка Дом, или просто клиент виснет и вываливается((
Вот так ошибка при попытке удалить:
Код:
                        Set childs = node.GetElementsByTagName("tablecolumn")
                        Print "Детей получили" + Cstr(childs.NumberOfEntries)
                        For q =1 To childs.NumberOfEntries
                            Set child = childs.GetItem(q)
                            Set child =  node.RemoveChild(child)
                        Next
Вот так зависание клиента при попытке взять следующий child:
Код:
                        Do Until Isnull(nodeChild)
                          If nodeChild.NodeName="tablecolumn" Then
                              Set child =  elt.RemoveChild(nodeChild)  
                              Print "Удалили"
                          End If
                          Print "Берем следующий"
                          Set nodeChild = elt.NextSibling
                        Loop