20.10.2013, 18:42 | #1 |
Участник
|
коллеги, всех приветствую
как экспортировать / импортировать BLOB в / из XML.Attribute ('а) ? (MS XMLDOM) |
|
21.10.2013, 14:16 | #2 |
Участник
|
зайди на форму Excel Templeate, на кнопке "функции глянь"- menu items (код)
можешь по этому подобию сделать форму, на которой будешь выгружать и загружать. |
|
21.10.2013, 17:13 | #3 |
Участник
|
Fierce, в стандартном наве нет этой формы (по крайней мере в 4-ке), возможно это что-то самописное.
rst, вам в BLOB'ы именно отдельные элементы загружать\выгружать надо или весь XML-документ? Если весь документ, то забрать документ можно как-то так: Код: Record.CALCFIELDS(XML); IF Record.XML.HASVALUE THEN BEGIN Record.XML.CREATEINSTREAM(InStream); xmlDoc.load(InStream); END; |
|
21.10.2013, 17:33 | #4 |
Участник
|
Вот, код кнопки (для экспорта)
на он пуше Код: CALCFIELDS(BLOB); IF BLOB.HASVALUE THEN BEGIN BLOBRef.Blob := BLOB; ThreeTierMgt.BLOBExport(BLOBRef,"File Name",TRUE); END; Код: TemplateExists := BLOB.HASVALUE; BLOBRef.Blob := BLOB; Filename := ThreeTierMgt.BLOBImport(BLOBRef,'*.xls',TRUE); IF Filename = '' THEN EXIT; IF TemplateExists THEN IF NOT CONFIRM(Text001,FALSE,TABLECAPTION,Code) THEN EXIT; BLOB := BLOBRef.Blob; WHILE STRPOS(Filename,'\') <> 0 DO Filename := COPYSTR(Filename,STRPOS(Filename,'\') + 1); "File Name" := Filename; CurrForm.SAVERECORD; Мне говорят, что в четверке есть такая функция тоже. сказали, есть в "персонал и зарплата" -> "НАСТРОЙКА" -> "настройка модуля и зарплаты" - >ОКНО - "Т формы" вот fob(forma ексель темплейт) |
|
22.10.2013, 09:00 | #5 |
Участник
|
Fierce, у нас нет модуля Зарплаты, видимо поэтому и не нашел эту форму. Ваш код, на сколько я понимаю, выгружает и загружает BLOB в файл, а не в переменную, как нужно топикстартеру, хотя я может и неправильно его понял.
|
|
22.10.2013, 11:01 | #6 |
Участник
|
Цитата:
что за форма ? (ID) не нашел в моем кронусе 5.0 если форма нестандартная, могли бы Вы выложить ее (или нужную часть кода) сюда, если конечно реальные владельцы интеллектуальной собственности не слишком против |
|
22.10.2013, 11:19 | #7 |
Участник
|
Цитата:
5218 - таблица которая используется. (Human Resources Setup) на форме открываем вкладку "Т формы", идем на лукап любого шаблона, а там уже переход на Ексель темплейт форму 14919 - табла Excel Template 14919 - форма Excel Templates |
|
22.10.2013, 12:53 | #8 |
Участник
|
Цитата:
5233 - форма в кронусе. (Human Resources Setup)
5218 - таблица которая используется. (Human Resources Setup) на форме открываем вкладку "Т формы", идем на лукап любого шаблона, а там уже переход на Ексель темплейт форму 14919 - табла Excel Template 14919 - форма Excel Templates для интересующихся темой: http://www.mibuso.com/forum/viewtopi...283653#p283653 |
|
22.10.2013, 13:02 | #9 |
Участник
|
|
|
22.10.2013, 18:07 | #10 |
Участник
|
Цитата:
IXMLDOMAttribute.value представляет собой тип Navision - Variant и тип COM - VARIANT * http://msdn.microsoft.com/en-us/library/ms757007(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/sak564ww.aspx вопрос в принципе в том и состоит - как создать из Navision потоки InStream OutStream для работы с COM VARIANT * потому что то, что в Navision с любыми строками, большими Text1024 (binary аналогично) надо работать через потоки - априори ясно интуитивно хочется некоей функции MSXMLDOM.CreateStream, порождающей требуемый поток всем интересующимся темой большое спасибо |
|
23.10.2013, 17:12 | #11 |
Участник
|
rst, почитайте эту тему, может что-то полезное найдете. Я так понимаю, что если у вас значение элемента больше 1024 символов, то работать с ним в НАВе проблематично.
|
|
24.10.2013, 19:22 | #12 |
Участник
|
Цитата:
Сообщение от Constantine
rst, почитайте эту тему, может что-то полезное найдете. Я так понимаю, что если у вас значение элемента больше 1024 символов, то работать с ним в НАВе проблематично.
Цитата:
Цитата:
Сообщение от rst
интуитивно хочется некоей функции MSXMLDOM.CreateStream, порождающей требуемый поток
|
|
29.10.2013, 13:33 | #13 |
Участник
|
Цитата:
Сообщение от Constantine
rst, почитайте эту тему, может что-то полезное найдете. Я так понимаю, что если у вас значение элемента больше 1024 символов, то работать с ним в НАВе проблематично.
Цитата:
Сообщение от rmv
Для работы с XML забудьте про writetext b пользуйтесь объектами и методами XML - xmlNode.nodeValue, setAttribute и тп., благо их хватает и для записи и для чтения.
Если уже совсем приспичило и размер значения в узле больше 1024 символов у XMLDOmTextNode есть метод substingData для чтения и appendData для записи. Этот объект кстати можно использовать для обхода ограничений в 1024 при передачи значений между COM объектами, к примеру вызвать sql запрос любой длины через adoConnection.execute(XMLDOmTextNode.nodeValue). дело продвигается, победа близка rmv прав. указанных им методов XMLDOM хватает для решения моей конкретной задачи Использовать нужно тип Navision BigText и потоки выглядит примерно так : ...... IXMLDOMText:=XMLDOMDocument.createTextNode(''); Picture.CREATEINSTREAM(InStream); PictureBigText.READ(InStream); BigText2Node(PictureBigText,IXMLDOMText); //это то, что ниже IXMLDOMElement:=XMLDOMDocument.createElement('Picture'); IXMLDOMElement.appendChild(IXMLDOMText); X.appendChild(IXMLDOMElement); ...... и так : ...... LenIntegerRez:=BigText.GETSUBTEXT(BinaryBuff,PosIntegerPar,LenIntegerPar); ...... IXMLDOMText.appendData(TextPar); ...... есть вопросы к вам, коллеги. про тип BigText и его функцию GETSUBTEXT во-первых, прошу напомнить: она возвращает количество считанных символов. т.е. если мы указали считать 10 (третий параметр), а осталось считать только 2, то вернет 2, второй параметр - стартовая позиция, первый - буфер для считываемого значения. прошу напомнить, потому что в справке отсутствует, на экспериментах хочу сэкономить во-вторых задаю вопрос - КАК будет работать GETSUBTEXT с бинарными данными? в моем коде BinaryBuff - это буфер типа Binary. у меня создалось впечатление, что она некорректно работает на бинарных данных есть ли у кого то опыт или просто мнение? хочу поблагодарить за полезную ссылку, во многом оказавшую помощь по теме http://dynamicsuser.net/forums/p/46262/233885.aspx моего коллегу и одновременно руководителя |
|
30.10.2013, 20:02 | #14 |
Участник
|
раз уж взялся писать - хочу отчитаться о проделанной работе
итог таков для большого текста используем 'Microsoft XML, v6.0'.IXMLDOMText запись выглядит так : MyIXMLDOMText.appendData(MyText); чтение выглядит так : MyBigText.ADDTEXT(MyIXMLDOMText.substringData(FromPosInt,BufLenInt)); для работы с бинарными данными необходимо использовать файлы, методы BigText не работают файлы и BigText сопрягаются потоками как обычно использую Base64 на верхнем уровне : запись : IF SomeRecord.BinData.HASVALUE THEN BEGIN IXMLDOMTextLoc:=XMLDOMDocumentVarPar.createTextNode(''); SomeRecord.BinData.CREATEINSTREAM(InStreamLoc); BinDataBigTextLoc.READ(InStreamLoc); BinDataFileCreatedBooleanLoc:=BinDataFileLoc.CREATETEMPFILE; BinDataFileNameText1024Loc:=BinDataFileLoc.NAME; BinDataFileLoc.CREATEOUTSTREAM(OutStreamLoc); BinDataBigTextLoc.WRITE(OutStreamLoc); EncodeFile2Base64AndWrTextNode(BinDataFileLoc,IXMLDOMTextLoc); BinDataFileLoc.CLOSE; IXMLDOMElementLoc:=XMLDOMDocumentVarPar.createElement('BinData'); IXMLDOMElementLoc.appendChild(IXMLDOMTextLoc); X.appendChild(IXMLDOMElementLoc); END; чтение : GetNodeBigText(X,'BinData',Base64BigTextLoc); IF Base64BigTextLoc.LENGTH>0 THEN BEGIN FileNameText250Loc:=CreateTmpFileName(); //использовать CREATETEMPFILE нельзя BinaryFileLoc.CREATE(FileNameText250Loc); DecodeBase64BigText2File(Base64BigTextLoc,BinaryFileLoc); BinaryFileLoc.CLOSE; SomeRecord.BinData.IMPORT(FileNameText250Loc); ERASE(FileNameText250Loc); END; оптимизация возможна транспорт по HTTP работать должен для меня на этом тема закрыта всем участвовавшим в обсуждении - большое спасибо |
|