КонтактнаяИнформацияИзJSONВXML (БСП)

Автор: 1С
ОбщийМодуль.УправлениеКонтактнойИнформациейСлужебный
БСП

Контактная информация из json xml.

Функция КонтактнаяИнформацияИзJSONВXML(Знач КонтактнаяИнформация, ОжидаемыйТип = Неопределено) Экспорт
	
	Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
		КонтактнаяИнформация = JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, ОжидаемыйТип);
	КонецЕсли;
	
	Если ОжидаемыйТип = Неопределено Тогда
		
		Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") И КонтактнаяИнформация.Свойство("Type") Тогда
			
			ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации[КонтактнаяИнформация.Type];
			
		ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
			КонтактнаяИнформацияXML = ПривестиКонтактнуюИнформациюXML(КонтактнаяИнформация);
			ОжидаемыйТип = КонтактнаяИнформацияXML.ТипКонтактнойИнформации;
		Иначе
			ТекстОшибки = НСтр("ru='Ошибка конвертации контактной информации из формата JSON в XML.'");
			ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), 
				УровеньЖурналаРегистрации.Ошибка,,,
				ТекстОшибки + Символы.ПС + Строка(КонтактнаяИнформация));
			ВызватьИсключение НСтр("ru='Не удалось определить тип контактной информации. Подробнее см. в журнале регистрации.'");
		КонецЕсли;
		
	КонецЕсли;
	
	ПространствоИмен = ПространствоИмен();

	ЭтоНовый = ПустаяСтрока(КонтактнаяИнформация);
	Представление = "";
	
	Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация"));
	
	// Разбор
	Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"));
		Иначе
			Результат = КонвертироватьАдресИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип);
		КонецЕсли;
		
	ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"));
		Иначе
			Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип)
		КонецЕсли;
		
	ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"));
		Иначе
			Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип)
		КонецЕсли;
		
	ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта"));
		Иначе
			Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип)
		КонецЕсли;
	ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype"));
		Иначе
			Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип)
		КонецЕсли;
	ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт"));
		Иначе
			Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип)
		КонецЕсли;
		
	ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
		Если ЭтоНовый Тогда
			Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее"));
		Иначе
			Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип)
		КонецЕсли;
		
	Иначе
		ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены,
								|т.к. обязательное поле тип не заполнено.'");
		ТекстОшибки =  СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйТип), """" + СокрЛП(ОжидаемыйТип) + """", ""));
	КонецЕсли;
	
	Возврат КонтактнаяИнформацияXDTOВXML(Результат);
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

УстановитьКонтактнуюИнформациюОбъекта (БСП)

JSONВКонтактнуюИнформациюПоПолям (БСП)

НоваяКонтактнаяИнформация (БСП)

КонтактнаяИнформацияВXML (БСП)

ТипКонтактнойИнформации (БСП)

КомментарийКонтактнойИнформации (БСП)

РазличияКонтактнойИнформации (БСП)

ПроверитьКонтактнуюИнформацию (БСП)

ВидыКонтактнойИнформацияОбъекта (БСП)

1С Менеджер конфигураций