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 файл
Если схема хранится в метаданных Общие->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.Код); КонецЦикла;
КонецПроцедуры
|