Форум: "Прочее";
Текущий архив: 2013.06.02;
Скачать: [xml.tar.bz2];
ВнизФормат пакета TClientDataSet D7 и XE2 Найти похожие ветки
← →
Медвежонок Пятачок © (2013-01-28 20:49) [0]Ищется элегантный временный костыль.
Реанимируется самопальная трехзвенка десятилетней давности, в которой используется TClientdataset. (D7 -> XE2)
Первым этапом мигрирует апп-сервер, обеспечивая поддержку древних клиентов (их сто триллионов тысяч).
Суть проблемы:
Длинное имя поля клиент-датасета (длиннее чем 16 символов) в семерке:
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD fieldname="очень длинное имя поля датасета" attrname="очень_длинное_имя_поля_датасета" fieldtype="string" WIDTH="50"/>
</FIELDS>
Оно же в XE2
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD fieldname="" attrname="очень_длинное_им�" fieldtype="string" WIDTH="50">
<PARAM Name="FIELDNAME" Value="очень длинное имя поля датасета" Roundtrip="True"/>
</FIELD>
</FIELDS>
Как видно филднейм пустой, аттрнейм обрезан до 16 символов, в конце встален символ нечитаемый парсерами, а нормальное имя переехало в чайлд узел.
Та же картина и в узлах с данными.
Семерочный клиентдатасет такого пакета не понимает.
Засада в том, что добавленный гадский символ не дает мне открыть пакет как xml и пофиксить его перед отправкой старому клиенту.
Вот.
Временно решено с помощью DLL собранной на семерке, которую юзает аппсервер.
← →
DVM © (2013-01-28 23:04) [1]
> Медвежонок Пятачок © (28.01.13 20:49)
> Как видно филднейм пустой, аттрнейм обрезан до 16 символов,
> в конце встален символ нечитаемый парсерами
Какие парсеры пробовал, кроме msxml?
← →
sniknik © (2013-01-29 07:57) [2]это TClientdataset так коверкает данные? замени его на TAdoDataset. функциональности в основном хватает (чего нет, мне встретилось, так это возможности отобрать/фильтровать измененные данные. остальное вроде присутствует).
← →
sniknik © (2013-01-29 08:11) [3]> не дает мне открыть пакет как xml и пофиксить его перед отправкой старому клиенту.
а ты открывай как текст...
и с TAdoDataset тоже придется подгонять формат xml под старого клиента, т.к. отличается, но вот такого как описано не будет. он работает одинаково (т.к. не зависит) на любой версии дельфи.
← →
Медвежонок Пятачок © (2013-01-29 08:55) [4]Заменить клиент датасет не проблема. Но надо чтобы старые клиенты остались рабочими.
Парсер думаю любой обломается, так так там символ BCD1 все остальное - честный utf-8.
В общем пока остановился на двух вариантах.
Сохранить, убрать символ, загрузить в дом, исправить имена.
Или семерочная длл.
← →
sniknik © (2013-01-29 10:07) [5]> Но надо чтобы старые клиенты остались рабочими.
предполагал, что ты подсунешь им xml старого формата... просто для начала вместо -
> Сохранить, убрать символ, загрузить в дом, исправить имена.
будет на шаг меньше, типа с - загрузить в дом, подкорректировать структуру под старое.
хотя сейчас думаю текстом было бы проще символ "выкусить", без сохранения, одним stringreplace. т.к. структуры ADO и Client сильно отличаются.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.06.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c