Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Чтение
Дальше: Смешанная техника работы

Десериализация прикладных типов с помощью функции восстановления

При десериализации, так же как и в случае с примитивными типами и коллекциями, есть возможность изменить получаемые данные. Для этого можно использовать функцию восстановления.

Например, при переносе элемента справочники Сотрудники из одной базы в другую требуется каким-то образом изменить его код. Пусть сформированный JSON-документ имеет следующий вид (листинг 1.51).

Листинг 1.51. Содержимое JSON-документа

{

"#type": "jcfg:CatalogObject.Сотрудники",

"#value": {

"Ref": "9575f8ed-369f-11e9-8bb2-642737df2048",

"DeletionMark": false,

"Code": "000000001",

"Description": "Алексеев Сергей Иванович",

"ДатаРождения": "1980-12-10T00:00:00",

"КоличествоДетей": 1,

"Работает": true,

"Стаж": "10.05.01",

"Должность": "88d54406-36a1-11e9-8bb2-642737df2048"

}

}

Для этого в метод ПрочитатьJSON() мы передаем имя функции восстановления и массив имен свойств, для которых она должна вызываться (листинг 1.52).

Листинг 1.52. Пример десериализации элемента справочника с функцией восстановления

&НаСервере

Процедура ВосстановлениеПриДесериализацииХДТОНаСервере()

 

// Создать объект чтения и открыть файл, из которого будет выполняться чтение.

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл("c:\temp\SerialisationXDTO_3.json");

 

// Заполнить массив имен реквизитов для восстановления.

РеквизитыДляВосстановления = Новый Массив;

РеквизитыДляВосстановления.Добавить("Code");

 

// Выполнить чтение данных в структуру Данные с помощью объекта чтения (Чтение).

Данные = СериализаторXDTO.ПрочитатьJSON(Чтение, , "ФункцияВосстановленияЧтенияXDTO", ЭтотОбъект, , , РеквизитыДляВосстановления);

 

// Завершить работу с файлом.

Чтение.Закрыть();

 

// Вывести результат чтения в сообщение.

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Код: " + Данные.Code + ", ФИО: " + Данные.Description + ", ДР: "+ Данные.ДатаРождения +

", Детей: " + Данные.КоличествоДетей + ", Работает: " + Данные.Работает + ", Стаж: " + Данные.Стаж +

", Должность: " + Данные.Должность;

Сообщение.Сообщить();

 

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

Функцию восстановления заполним следующим образом (листинг 1.53).

Листинг 1.53. Функция восстановления

&НаСервере

Функция ФункцияВосстановленияЧтенияXDTO(Свойство, Тип, Значение, ДополнительныеПараметры) Экспорт

 

Если Свойство = "Code" Тогда

КодОбмена = "НМК-" + Прав(Значение.Значение, 5);

ТипXDTOКод = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string");

Возврат ФабрикаXDTO.Создать(ТипXDTOКод, КодОбмена);

КонецЕсли;

 

КонецФункции

В функции восстановления в параметре Значение будет содержаться объект XDTO. Его значение (Значение.Значение) мы изменяем нужным образом и возвращаем в метод ПрочитатьJSON().

Результат чтения JSON-документа, содержимое которого показано в листинге 1.51, будет выглядеть следующим образом (рис. 1.10).

Рис. 1.10. Чтение элемента справочника из JSON-документа с функцией восстановления

Назад: Чтение
Дальше: Смешанная техника работы