НоваяКомпонентаСПортала (БСП)

Автор: 1С
ОбщийМодуль.ВнешниеКомпонентыСлужебный
БСП

Новая компонента портала.

Процедура НоваяКомпонентаСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда
		
		Идентификатор = ПараметрыПроцедуры.Идентификатор;
		Версия = ПараметрыПроцедуры.Версия;
		
		ПроверитьДоступностьЗагрузкиСПортала();
		
		МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент");
		
		ОписаниеВнешнихКомпонент  = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент();
		ОписаниеВнешнейКомпоненты = ОписаниеВнешнихКомпонент.Добавить();
		ОписаниеВнешнейКомпоненты.Идентификатор = Идентификатор;
		ОписаниеВнешнейКомпоненты.Версия        = Версия;
		
		Если Не ЗначениеЗаполнено(Версия) Тогда
			РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент);
		Иначе
			РезультатОперации = МодульПолучениеВнешнихКомпонент.ВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент);
		КонецЕсли;
		
		Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда
			ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(),
				РезультатОперации.ИнформацияОбОшибке,
				РезультатОперации.СообщениеОбОшибке);
			ВызватьИсключение ТекстИсключения;
		КонецЕсли;
		
		Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда
			ТекстИсключения = НСтр("ru = 'На Портале 1С:ИТС внешняя компонента не обнаружена.'");
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
					ОбщегоНазначения.КодОсновногоЯзыка()),
				УровеньЖурналаРегистрации.Ошибка,,, ТекстИсключения);
			ВызватьИсключение ТекстИсключения;
		КонецЕсли;
		
		СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; // Фокусировка на первой строке результата.
		
		КодОшибки = СтрокаРезультата.КодОшибки;
		
		Если ЗначениеЗаполнено(КодОшибки) Тогда
			
			ИнформацияОбОшибке = "";
			Если КодОшибки = "ОтсутствуетКомпонента" Тогда 
				ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'");
			ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда
				ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена требуемая версия внешней компоненты'");
			ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда 
				ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'");
			ИначеЕсли КодОшибки = "АктуальнаяВерсия" Тогда
				ИнформацияОбОшибке = 
					НСтр("ru = 'Скорее всего произошла ошибка сервера при загрузке компоненты.
					           |Получен код ошибки: АктуальнаяВерсия, однако в ИБ компоненты не обнаружено.'");
			КонецЕсли;
			
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка:
				           |%2'"),
				ПредставлениеКомпоненты(Идентификатор, Версия),
				ИнформацияОбОшибке);
			
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
				ОбщегоНазначения.КодОсновногоЯзыка()),
				УровеньЖурналаРегистрации.Ошибка,,,
				ТекстОшибки);
			
			ВызватьИсключение ТекстОшибки;
		КонецЕсли;
		
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаРезультата.АдресФайла);
		Информация = ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь);
		
		Если Не Информация.Разобрано Тогда 
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
				ОбщегоНазначения.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка, , , Информация.ОписаниеОшибки);
			ВызватьИсключение Информация.ОписаниеОшибки;
		КонецЕсли;
		
		УстановитьПривилегированныйРежим(Истина);
		
		НачатьТранзакцию();
		Попытка
			// Создание экземпляра компоненты.
			Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент();
			Объект.Заполнить(Неопределено); // Конструктор по умолчанию.
			
			ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста.
			ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата);     // По данным с сайта.
			
			Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"),
				ТекущаяДатаСеанса());
			
			Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные);
			
			Если Не ЗначениеЗаполнено(Версия) Тогда // Если запрос конкретной версии - пропускаем.
				Объект.ОбновлятьСПортала1СИТС = Объект.ЭтоКомпонентаПоследнейВерсии();
			КонецЕсли;
			
			Объект.Записать();
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
				ОбщегоНазначения.КодОсновногоЯзыка()),
				УровеньЖурналаРегистрации.Ошибка,,, 
				ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			ВызватьИсключение;
		КонецПопытки;
		
	Иначе
		ВызватьИсключение 
			НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'");
	КонецЕсли;
	
КонецПроцедуры

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

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

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

ОбновитьКомпонентыСПортала (БСП)

ОбновитьКомпонентыСПорталаПриФормированииРезультата (БСП)

ДоступнаЗагрузкаСПортала (БСП)

ОткрытьСтраницуРегистрацииНовогоПользователя (БСП)

АвтоматическиОбновляемыеКомпоненты (БСП)

URLСтраницыПорталаПоддержки (БСП)

ОткрытьГлавнуюСтраницуПортала (БСП)

ИдентификаторПоставщикаУслугПортал1СИТС (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз