1CLenta.ru  

XDTO - выгрузка загрузка данных

Программирование системы     25.10.2016 10:19     33058

XDTO-пакет - это объект метаданных, который хранит схему данных. Аббревиатура расшифровывается как XML Data Transfer Objects. Схему данных можно описать в xml файле, а затем подгрузить в созданный XDTO-пакет. Для программной работы с пакетами-xdto предназначен объект глобального контекста ФабрикаXDTO.

Текст схемы


<xs:schema xmlns:tns="Выгрузка" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="Выгрузка" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="Список">
<xs:sequence>
<xs:element name="Номенклатура" type="tns:Номенклатура" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Номенклатура">
<xs:sequence>
<xs:element name="ГУИД" type="xs:string" minOccurs="0"/>
<xs:element name="Наименование" type="xs:string" minOccurs="0"/>
<xs:element name="Код" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

ФабрикаXDTO с использованием XDTO-пакетов


ФабрикаXDTO содержит xml-схемы всех XDTO-пакетов, которые есть в конфигурации, и обладает набором методов для работы с данными. Для того чтобы схема стала доступна в объекте ФабрикаXDTO, её необходимо добавить в дереве метаданных в ветку с названием "XDTO-пакеты". Добавить можно двумя способами, либо загрузить из файла с расширением (*.xsd), либо добавить вручную узлы пакета.

Импорт схемы XML

Редактор схемы XML

Выгрузка данных в XML файл

Если схема хранится в метаданных Общие->XDTO-пакеты, то обращение к ней возможно только на сервере.
&НаСервере
Процедура ВыгрузитьДанные()

//Создание ОбъектаXDTO с типом Список
ТипЗначенияXDTO = ФабрикаXDTO.Тип("Выгрузка", "Список");
СписокXDTO = ФабрикаXDTO.Создать(ТипЗначенияXDTO);

//Создание ОбъектаXDTO с типом Номенклатура
ТипЗначенияXDTO = ФабрикаXDTO.Тип("Выгрузка", "Номенклатура");
НоменклатураXDTO = ФабрикаXDTO.Создать(ТипЗначенияXDTO);

НоменклатураXDTO.ГУИД = "00000000-0000-0000-0000-000000000000";
НоменклатураXDTO.Наименование = "Корзинка";
НоменклатураXDTO.Код = "00000001";

СписокXDTO.Номенклатура.Добавить(НоменклатураXDTO);

//Запись в XML файл
ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
ЗаписьXML.ОткрытьФайл("C://Выгрузка.xml", ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, СписокXDTO);
ЗаписьXML.Закрыть();

КонецПроцедуры


Загрузка данных из XML файла

Процедура ЗагрузитьДанные()

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("C://Выгрузка.xml");
ТипЗначенияXDTO = ФабрикаXDTO.Тип("Выгрузка", "Список");
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипЗначенияXDTO);

Для каждого ЗначениеXDTO Из ОбъектXDTO.Номенклатура Цикл
Сообщить(ЗначениеXDTO.ГУИД);
Сообщить(ЗначениеXDTO.Наименование);
Сообщить(ЗначениеXDTO.Код);
КонецЦикла;

КонецПроцедуры


ФабрикаXDTO с использованием схемы из файла


Создать объект ФабрикаXDTO на основании файла схемы. Для этого существует глобальный метод СоздатьФабрикуXDTO(<Путь>, <Пакеты>). Если работа с ФабрикойXDTO происходит во внешней обработке, то схему можно хранить в макете с типом "Текстовый документ". Но для создания объекта ФабрикиXDTO все равно необходимо чтобы схема лежала во внешнем файле. Для этого можно создать временный файл и поместить в него содержимое макета.

Выгрузка данных в XML файл

Процедура ВыгрузитьДанные()

ФайлСхемы = Новый Файл(КаталогВременныхФайлов() + "Scheme.xsd");
Если ФайлСхемы.Существует() Тогда
УдалитьФайлы(ФайлСхемы.ПолноеИмя);
КонецЕсли;

Макет = Получитьмакет("ТекстовыйДокумент");
Макет.Записать(ФайлСхемы.ПолноеИмя);

НоваяФабрикаXDTO = СоздатьФабрикуXDTO(ФайлСхемы.ПолноеИмя);

//Создание ОбъектаXDTO с типом Список
ТипЗначенияXDTO = НоваяФабрикаXDTO.Тип("Выгрузка", "Список");
СписокXDTO = НоваяФабрикаXDTO.Создать(ТипЗначенияXDTO);

//Создание ОбъектаXDTO с типом Номенклатура
ТипЗначенияXDTO = НоваяФабрикаXDTO.Тип("Выгрузка", "Номенклатура");
НоменклатураXDTO = НоваяФабрикаXDTO.Создать(ТипЗначенияXDTO);

НоменклатураXDTO.ГУИД = "00000000-0000-0000-0000-000000000000";
НоменклатураXDTO.Наименование = "Корзинка";
НоменклатураXDTO.Код = "00000001";

СписокXDTO.Номенклатура.Добавить(НоменклатураXDTO);

//Запись в XML файл
ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
ЗаписьXML.ОткрытьФайл("C://Выгрузка.xml", ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьОбъявлениеXML();
НоваяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, СписокXDTO);
ЗаписьXML.Закрыть();

КонецПроцедуры


Загрузка данных из XML файла

Процедура ЗагрузитьДанные()

ФайлСхемы = Новый Файл(КаталогВременныхФайлов() + "Scheme.xsd");
Если ФайлСхемы.Существует() Тогда
УдалитьФайлы(ФайлСхемы.ПолноеИмя);
КонецЕсли;

Макет = Получитьмакет("ТекстовыйДокумент");
Макет.Записать(ФайлСхемы.ПолноеИмя);

НоваяФабрикаXDTO = СоздатьФабрикуXDTO(ФайлСхемы.ПолноеИмя);

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("C://Выгрузка.xml");
ТипЗначенияXDTO = НоваяФабрикаXDTO.Тип("Выгрузка", "Список");
ОбъектXDTO = НоваяФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипЗначенияXDTO);

Для каждого ЗначениеXDTO Из ОбъектXDTO.Номенклатура Цикл
Сообщить(ЗначениеXDTO.ГУИД);
Сообщить(ЗначениеXDTO.Наименование);
Сообщить(ЗначениеXDTO.Код);
КонецЦикла;

КонецПроцедуры

Комментарии (0)