AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2013, 17:12   #1  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
rst, почитайте эту тему, может что-то полезное найдете. Я так понимаю, что если у вас значение элемента больше 1024 символов, то работать с ним в НАВе проблематично.
Старый 24.10.2013, 19:22   #2  
rst is offline
rst
Участник
 
45 / 10 (1) +
Регистрация: 27.05.2005
Адрес: москва
Цитата:
Сообщение от Constantine Посмотреть сообщение
rst, почитайте эту тему, может что-то полезное найдете. Я так понимаю, что если у вас значение элемента больше 1024 символов, то работать с ним в НАВе проблематично.
Цитата:
Сообщение от Constantine Посмотреть сообщение
InTacto по-моему собаку съел на XML'е, так что вероятнее всего он прав. Ваша переменная Auda может вернуть поток? Может у нее какие-то еще методы есть? Если у вас будет входящий поток с данными, его можно будет потом перегнать в исходящий поток и сохранить на диск.
большое спасибо, 'Constantine', очень полезная ссылка. смотрю у Вас были те же ожидания, что и у меня,
Цитата:
Сообщение от rst
интуитивно хочется некоей функции MSXMLDOM.CreateStream, порождающей требуемый поток
и они не оправдались, Albeit реализовал библиотечку. почитаю побольше про MSXML в соответствии с советами rmv и если не найду, попытаюсь сделать то же самое.
Старый 29.10.2013, 13:33   #3  
rst is offline
rst
Участник
 
45 / 10 (1) +
Регистрация: 27.05.2005
Адрес: москва
Цитата:
Сообщение от 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   #4  
rst is offline
rst
Участник
 
45 / 10 (1) +
Регистрация: 27.05.2005
Адрес: москва
Цитата:
Сообщение от rst Посмотреть сообщение
дело продвигается, победа близка
раз уж взялся писать - хочу отчитаться о проделанной работе
итог таков

для большого текста используем '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 работать должен
для меня на этом тема закрыта

всем участвовавшим в обсуждении - большое спасибо
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:02.