Сериализация XDTO #747308


#0 by mrpink
Добрый день! Имеется файл xml с данными об изделии из pdm системы, файл достаточно объемный, в нем множество различной мнформации, всё это дело нужно правильно разобрать и создать в УПП в разных справочниках(спецификации, текарты, техоперации, номенклатура). Вданный момент я довольно коряво читаю этот файл через объектxdto, это позволяет мне хотя-бы не парсить файл, а обращаться к свойствам через точку. Но вот я думаю, а нельзя-ли ещё больше упростить с помощью сериализации? Вот есть у меня простая структура - ОбъектХДТО c тремя свойствами и спискомХДТО,  а можно-ли создать в конфигурации подобный объект, (может быть справочник с тремя реквизитами и табчастью, может быть просто структуру) и сериализовать данные из файла прямо в этот объект? Насколько я понимаю сложность в именах и количестве реквизитов? Как считаете взлетит? Поделитесь опытом пожалуйста
#1 by mrpink
Ну ни у кого ни каких мыслей
#2 by Лефмихалыч
Это все равно, что голову под фуражку подгонять. У тебя есть система А и система Б, из А в Б идет сообщение, Б это сообщение читает и какие-то внутри себя выводы делает. Зачем для этого в Б дублировать архитектуру А?
#3 by vicof
А xsd схемы нет?
#4 by Лефмихалыч
можно поставить между ними третью систему, которая будет сторожить очередь сообщений, гарантировать доставку осуществлять трансляцию объектов А в объекты Б. Такая система называется сервисная шина предприятия (ESB), но даже в ней для этого архитектуру ни под А, ни под Б нет смысла подгонять
#5 by Лефмихалыч
у него уже вроде есть пакет-XDTO, так что схема ни чего нового не даст
#6 by Лефмихалыч
ESB, к слову сказать, как раз можен на основании сообщений А выдавать xlm-ки, содержащие сериализацию родных объектов Б. Это повысит независимость двух систем и надежность всей архитектуры предприятия. Но это надо работу работать в ощутимых объемах даже, если использовать какую-нить опенсорсную готовую ESB
#7 by Матадор
Можно написать набор XSL файлов, которе будут трансформировать исходный xml прямо в сериализованные объекты твоей конфигурации, останетсятолько пара строк кода, чтобы их записать. Но следить за актуальностью преобразований нужно будет самостоятельно. если вдруг что-то в метаданнх поменяется.
#8 by mrpink
Ну правильно, но меня же интересует общий случай - дальше, если возможна такая сериализация, я думал двинуть в сторону как из элемента xml с помощью сериализации создавать типы данных нужные мне...ну тоесть упрощенно - в УПП техопреация имеет 10 реквизитов, в файле 15, вот думал с помощь схем как-то настроить, чтобы из элемента xml формировалася мой тип, хотя уже чувствую что больно многого захотел))
#9 by mrpink
xdto пакеты я импортировал из схем
#10 by mrpink
вот-вот вот об этом я и думал, только я хотел без xsl
#11 by Матадор
Зачем без xsl? Его именно для этого придумали и используют.
#12 by sapphire
Xpath проще нежели XDTO
#13 by Матадор
Xpath проще, XSLT мощнее - разные инструменты, для разных случаев.
#14 by Лефмихалыч
общий случай - это ESB. А там, чем ты будешь это делать, абсолютно наплевать.
#15 by mrpink
Подскажите, ЧЯДНТ, вот есть код     ТипНабор = ФабрикаXDTO.Тип(";, "Набор");     ТипЗапись = ФабрикаXDTO.Тип(";, "Запись");
#16 by mrpink
а теперь я хочу без ЗаолнитьЗначенияСвойств создать ОбъектXDTO на основе строки, пробую
#17 by mrpink
вылетает ошибка
#18 by mrpink
я хочу: Вариант синтаксиса: Создание значения из значения Синтаксис: Создать(<Тип>, <Значение>) Параметры: Тип: ТипЗначенияXDTO. Тип, значение которого необходимо создать. Тип: Произвольный. Произвольное значение, на основе которого должно быть создано значение XDTO. Описание варианта метода: Создает значение XDTO по произвольному значению.
#19 by Лефмихалыч
текст ошибки надо угадать?
#20 by mrpink
получаю: {Обработка.XDTO.Форма.Форма.Форма}: Ошибка при вызове метода контекста (Создать)         НоваяЗапись = ФабрикаXDTO.Создать(ТипЗапись, стр); по причине: Несоответствие типов (параметр номер '2')
#21 by mrpink
нет))
#22 by Лефмихалыч
"стр" - это что за значение?
#23 by mrpink
строка из табличной части
#24 by mrpink
я предполагаю что такое сработает если ТипЗапись будет ЗначениеXDTO а у меня ОбъектXDTO
#25 by Лефмихалыч
откуда у тебя информация, что СтркоаТабличнойЧасти поддерживает сериализацию?
#26 by Лефмихалыч
даже табличная часть целиком не поддерживает сериализацию отдельно от объекта
#27 by mrpink
...ну-ууу, я наивно предполагал, что если объект не может быть сериализован, то нужно просто описать схему
#28 by Лефмихалыч
не, если объект не может быть сериализован, то платформа не предоставляет волшебных методов, с помощью которых из объекта одним вызовом можно xml-ку сделать. Перебирай кодом атрибуты, стряпай xml "руками". Ты даже можешь назвать функцию для этого СериализоватьСтрокуТабличнойЧасти - видал, какая гибкость?
#29 by mrpink
дак так, оно но мне кажется логичным ожидать от платформы если я ей подсунул тип значения, типы всех свойств у неё есть, создать мне объект с полями такого-же типа и заполнить их сразу...в конце-концов если я не указываю, параметр он создает объект с нужными полями, только тип у них неопределено, после заполнить свойства у этих полей сразу свойства появляются... не пойму я чего-то
#30 by Serginio1
В старых релизах для AnyRef ЗаполнитьЗначенияСвойств не работало. Приходилось вручную устанавливать значение
#31 by Лефмихалыч
сегодня день долбанутых ожиданий. Во второй ветке подряд поциенты ожидают от платформы странного...
#32 by mrpink
а как описать в схеме элемент которого может не быть? ну тоесть есть свойсво объекта, которое по сути коллекция, но в конкретном файле в ней может элементов не быть, и ругается что не соответствует схеме
#33 by France
брось позицию Шухарда. У тебя очень адекватные посты бывают - не снижай уровень троллингом))
#34 by mrpink
с этим разобрался
#35 by Лодырь
А использовать готовый продукт для связи УППхи и PDM? наверняка форматы стандартизированы и уже учтены.
#36 by mrpink
например?
#37 by Лодырь
посмотреть в сторону
#38 by mrpink
не ну это вообще не вариант, смотрели конечно - 1с pdm в разы хуже специализированных, да и вообще есть куча отделов которые работают с одной системой, а тут ты такой не, давайте лучше 1с:pdm поставим, чтобы мне в упп ваши данные удобнее выгружать было
#39 by Лодырь
Ну, хз если поковыряться и посмотреть тамошние импорты-экспорты вдруг что-то полезное можно найти?
#40 by mrpink
Пожалуй. Вообще, задача то решена - всё чот нужно у меня грузится, просто в процессе возникло то чувство когда понимаешь что работает, но работает коряво, повод разобраться с XDTO. Я сегодня уже больше склоняюсь к спасибо ребятам))
#41 by mrpink
Всё-таки осталась одна проблема - в читаемом файле нет упоминания про пространство имен, я в пакете описал типы содержащиеся в файле, но когда читаю файл, с параметром тип, он его не узнает, не знаю что делать - хоть дописывать пространство в файл перед его прочтением. Может кто подскажет? Я так понимаю что нужно описываемые мною типы привязать к некому пространству имен по-умолчанию, или вообще его не указывать
#42 by Serginio1
Посмотри КД3
#43 by Serginio1
#44 by mrpink
спасибо конечно, но это к чему? Вопрос в следующем, есть файл xml, есть xdto схема этого файла, но в пакете определено пространство имен, а в файле нет, поэтому если я пытаюсь сказать фабрике чтобы она читая файл получала определенный тип данных она ругается, так как не узнает типа файла по имени(по имени без пространства имен) ,соответственно если в файл добавить этот параметр - указать xmlns="; то фабрика сразу начинает понимать тип... вот вопрос как зделать чобы она не обращала внимание на пространство имен
#45 by Serginio1
Это к  преобразоварнию данных из одного объекта в другой. Так измени схему, либо измени файл. Но по моему в 1С нет возможности иметь схему без пространства имен. Попробуй.
#46 by Serginio1
Можешь иметь два Фабрики. Фабрика = СоздатьФабрикуXDTO(ПутьКСхеме.xsd);
#47 by mrpink
я и так пробовал создавать свою фабрику, мне кажется если можно как-то повлиять на эти пространства имен в которых он ищет указанные типы, то это именно в своей фабрике а не в глобальной...но как пока не нашёл
#48 by Serginio1
Каждый пакет привязан к своему пространству имен. Это является его идентификатором. Что бы ограничить использование пакетов создавай фабрику на основании пакетом.
#49 by mrpink
Не совсем понял Вас. Я создаю фабрику, другим конструктором, с одним параметром на основе набора схем XML, а что мне даст Ваш способ?
#50 by Serginio1
То есть пакеты у тебя в конфигураторе не прописаны? У тебя для чтения XML должна быть своя фабрика содержащие пакеты с пространствами имен содержащимися в твоем XML. Если в XML другие пространства, то и считываться они не будут
#51 by Serginio1
Тебе проще создавать фабрику через 46
#52 by mrpink
Нет, изначально я импортировал пакеты из xsd в конфигурацию, они(типы) стали доступны из глобальной фабрики, после этого я создавал свою фабрику, загружая схему из файла, тогда мои типы были в созданной фабрике, не помогло
#53 by Serginio1
Так убери targetNamespace из XSD или задай ему ""
#54 by Лефмихалыч
бросил. Спасибо.
#55 by Serginio1
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="; elementFormDefault="qualified" attributeFormDefault="unqualified">
#56 by Serginio1
Специально проверил например описание такой схемы <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="; elementFormDefault="qualified" attributeFormDefault="unqualified" version="0.3"> прекрасно читает такой файл
#57 by Serginio1
Правда при этом такой XSD в конфигурацию не подгружается
#58 by Serginio1
Сейчас проверил и прошу прощения. Не использует она фабрику при чтении. Все значения строковые.
#59 by Serginio1
На C# прекрасно используется правда для семерки.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С