Создание ФабрикиXDTO по НаборуСхемXML

1. DemetrKlim 178 07.09.22 17:52 Сейчас в теме
Создаю внешнюю обработку. Предполагается отправка и получение HTTP запросов, содержащих XML-текст. Есть файл шаблона (XSD).
Понятно, что можно файл шаблона загнать в макет двоичными данными и создавать Фабрику по создаваемому внешнему файлу. Это все опробовано и вполне работает если сам шаблон - корректен.
Решил попробовать обойтись без временного файла. Почему бы не взять пустой объект "СхемаXML" (создать его по пустому ДокументDOM), программными средствами заполнить и по такой заполненной схеме создать Фабрику.
Помучился - сделал. Сразу скажу, что по объекту "СхемаXML" совсем мало информации, применительно к программному созданию и заполнению. Поэтому - помучился изрядно. Итогом получаю схему. Создаю Фабрику - есть! Фабрика находит в корневых свойствах то, что мне нужно (хоть тип, хоть свойство), а вот дальше (ниже) не видит ни одного содержимого.
Для контроля вывожу схему в виде файла XML. Файл, что говорится, "красивый". Этот файл импортирую в пакетXDTO и уже по этому пакету создаю фабрику - работает! По той же СхемеXML напрямую пытаюсь создать Фабрику - не работает! Причем, ошибок никаких не выдается - все "проглатывается". Но Фабрика, созданная из СхемыXML, видит только содержимое корневого каталога этой схемы. Информация ниже в Схеме не определяется. Кажется, перепробовал все - итог неудачный.
В этой связи вопрос - кто-то пробовал программными средствами создать СхемуXML для дальнейшего создании Фабрики по ней?
(конечно же СхемаXML помещалась в НаборСхемXML перед созданием Фабрики)
Спасибо за ответы!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 07.09.22 18:20 Сейчас в теме
(1)
В этой связи вопрос - кто-то пробовал программными средствами создать СхемуXML для дальнейшего создании Фабрики по ней?

Такое используется в БГУ при загрузке бюджетной классификации.

ЧтениеXML = Новый ЧтениеXML;
 ЧтениеXML.УстановитьСтроку(ПолучитьМакет(ИмяМакета).ПолучитьТекст());
 
 ПостроительDOM = Новый ПостроительDOM;
 ДокументСхемыDOM = ПостроительDOM.Прочитать(ЧтениеXML);
 
 ПостроительСхемы = Новый ПостроительСхемXML;
 СхемаXML = ПостроительСхемы.СоздатьСхемуXML(ДокументСхемыDOM);

 НаборСхем = Новый НаборСхемXML;
  НаборСхем.Добавить(СхемаXML);
  
  Фабрика = Новый ФабрикаXDTO(НаборСхем);
  СвойстваКлассификатораXDTO = Фабрика.ПрочитатьXML(ЧтениеXMLСвойств,
   Фабрика.Тип("urn:schemas-1c-ru:budget:classification/2011/properties", "ClassifierProperties"));
Показать
3. DemetrKlim 178 07.09.22 18:28 Сейчас в теме
(2) Спасибо! Прямо сейчас попробую!
У меня была мысль вообще обойтись без макетов, но это уже всяко лучше, чем создавать временный файл.
8. DemetrKlim 178 07.09.22 19:54 Сейчас в теме
(2) Итак, решение состоялось - спасибо за идею, без которой я уже не двинулся бы дальше (устал уже!). Я обошелся-таки БЕЗ макета!
И вот как это выглядит.
1. Создаю СхемуXML из пустого ДокументаDOM, который имеет только соответствия пространств имен и значения атрибутов для корневого элемента "xs:shema"
2. Заполняю объект СхемаXML его методами. Это работает.
3. В заполненном СхемаXML выполняю метод "ОбновитьЭлементDOM()".
4. Из значения свойства "СхемаXML.ДокументDOM" беру ДокументDOM и на его основе заново создаю СхемуXML.
После выполнения этого "обряда" на базе полученной таким образом схемы создается работоспособная Фабрика.
Почему не создается Фабрика сразу - я так и не понял, хотя ДокументDOM, описывающий схему XSD, берется из этой же СхемыXML и он "дает жизнь" уже работоспособной схеме. Что-то не так в консерватории)
Еще раз спасибо!
Sashares; +1 Ответить
6. Sashares 35 07.09.22 19:07 Сейчас в теме
(1)
Этот файл импортирую в пакетXDTO и уже по этому пакету создаю фабрику - работает!

Еще вариант - выгрузить модель XDTO в макет и использовать ее.
подробнее про данный способ тут - https://infostart.ru/1c/articles/171019/
7. DemetrKlim 178 07.09.22 19:41 Сейчас в теме
(6) Весь нюанс в том, что обработка - внешняя. ПакетXDTO решил бы все проблемы, если бы я мог впихнуть его в конфигурацию. Увы, не могу.
9. Sashares 35 07.09.22 20:24 Сейчас в теме
(7) Вы посмотрите статью - создается пустая конфигурация, в нее загружается пакет xdto, он выгружается как модель в макет и макет используется во внешней обработке.
10. DemetrKlim 178 07.09.22 20:28 Сейчас в теме
(9) Было интересно обойтись без макетов)
4. DemetrKlim 178 07.09.22 18:30 Сейчас в теме
Хотя "творческий зуд" остался) Ведь есть же объект "СхемаXML", почему же не работать с ним? До ума не довели, что ли?....
5. DemetrKlim 178 07.09.22 19:06 Сейчас в теме
(2) Да, такой вариант работает - спасибо! В этой связи пришла мысль попробовать еще один вариант, чтобы окончательно исчерпать тему. Позже отпишу о результате.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот