Механизм XDTO позволяет определять объекты переноса данных, которые могут образовывать строгую иерархию и сериализоваться в/из XML. Эти свойства позволили использовать объекты XDTO в качестве параметров и возвращаемых значений операций Web-сервисов.
Основным понятием, на котором строится механизм XDTO, является фабрика XDTO. Фабрика XDTO содержит описание всех типов, с которыми оперирует система. В частности, при создании новой информационной базы «1С:Предприятия» автоматически создается глобальная фабрика XDTO, которая описывает все типы, используемые в конфигурации. Эта фабрика доступна через свойство глобального контекста ФабрикаXDTO.
Все типы данных XDTO подразделяются на типы-значения и типы-объекты. Типы-значения позволяют определять простые типы, например: строки, числа, даты, булевы значения и т. д. Типы-объекты позволяют определять сложные типы, такие как структуры и массивы.
Инфраструктура XDTO определяет набор предопределенных типов значений XDTO. Имена типов (string, int, date и т. п.) совпадают с именами типов XML Schema и принадлежат URI пространства имен – http://www.w3.org/2001/XMLSchema. Предопределенные типы являются автоматически зарегистрированными в любой фабрике XDTO.
Перед тем как использовать в Web-сервисе собственную структуру данных, необходимо создать пакет XDTO, описывающий тип-объект структуры. Для этого используются средства визуального конструирования, позволяющие добавлять пакеты XDTO в ветку дерева объектов конфигурации Общие > XDTO-пакеты.
Пакет XDTO содержит описание некоторого множества типов, принадлежащих одному пространству имен – пространству имен пакета.
Структуры моделируются типами-объектами. Тип-объект может содержать свойства, которые соответствуют элементам структуры. Каждое свойство характеризуется уникальным именем и типом. Тип свойства может быть как типом-значением, так и типом-объектом.
Новый объект XDTO может быть создан с помощью метода Создать() фабрики XDTO на основе типа объекта XDTO. После этого следует присвоить соответствующие значения свойствам объекта XDTO. Ниже приведен пример создания объекта XDTO с именем Номенклатура и заполнения его свойств: Наименование, ПолноеНаименование, ЗакупочнаяЦена и ШтрихКод (листинг 1.133).
Листинг 1.133. Пример создания объекта структурного типа
// Создать "пустой" объект XDTO.
СтруктурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products", "Номенклатура");
Номенклатура = ФабрикаXDTO.Создать(СтруктурныйТип);
// Заполнить значения свойств объекта XDTO.
ОбъектСправочника = СсылкаНаЭлементСправочника.ПолучитьОбъект();
Номенклатура.Наименование = ОбъектСправочника.Наименование;
Номенклатура.ПолноеНаименование = ОбъектСправочника.ПолноеНаименование;
Номенклатура.ЗакупочнаяЦена = ОбъектСправочника.ЗакупочнаяЦена;
Номенклатура.ШтрихКод = ОбъектСправочника.ШтрихКод;
Массивы моделируются свойствами типов-объектов. Тип массива нельзя создать напрямую, но для определенного свойства типа-объекта можно указать минимальное и максимальное количество элементов массива. Если оба значения равны 1, то это единичное свойство; если максимальное количество больше 1, то множественное свойство; если же максимальное количество равно -1, то количество элементов массива не ограничено.
Например, для создания массива элементов номенклатуры, определенного в свойстве Элементы структуры НоменклатураГруппа, нужно выполнить следующий фрагмент кода (листинг 1.134).
Листинг 1.134. Пример создания массива объектов структурного типа
СтруктурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products", "НоменклатураГруппа");
НоменклатураГруппа = ФабрикаXDTO.Создать(СтруктурныйТип);
НоменклатураГруппа.Элементы.Добавить(Номенклатура);