Обновить внешние компоненты. Выполняет обновление внешних компонент.
// Выполняет обновление внешних компонент.
//
// Параметры:
// ДанныеВнешнихКомпонент - ТаблицаЗначений - таблица обновляемых компонент.
// ** Идентификатор - Строка - идентификатор.
// ** Версия - Строка - версия.
// ** ДатаВерсии - Строка - дата версии.
// ** Наименование - Строка - наименование.
// ** ИмяФайла - Строка - имя файла.
// ** АдресФайла - Строка - адрес файла.
// ** КодОшибки - Строка - код ошибки.
// АдресРезультата - Строка - (необязательный) адрес временного хранилища.
// Если указан, в него будет помещено описание результата операции.
//
Процедура ОбновитьВнешниеКомпоненты(ДанныеВнешнихКомпонент, АдресРезультата = Неопределено) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда
Результат = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнешниеКомпоненты.Ссылка КАК Ссылка,
| ВнешниеКомпоненты.Идентификатор КАК Идентификатор
|ИЗ
| Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты
|ГДЕ
| ВнешниеКомпоненты.Идентификатор В(&Идентификаторы)";
Запрос.УстановитьПараметр("Идентификаторы", ДанныеВнешнихКомпонент.ВыгрузитьКолонку("Идентификатор"));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
// Обход результата запроса.
Для каждого СтрокаРезультата Из ДанныеВнешнихКомпонент Цикл
ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(
СтрокаРезультата.Идентификатор,
СтрокаРезультата.Версия);
КодОшибки = СтрокаРезультата.КодОшибки;
Если ЗначениеЗаполнено(КодОшибки) Тогда
Если КодОшибки = "АктуальнаяВерсия" Тогда
Результат = Результат + ПредставлениеКомпоненты + " - " + НСтр("ru = 'Актуальная версия.'") + Символы.ПС;
Продолжить;
КонецЕсли;
ИнформацияОбОшибке = "";
Если КодОшибки = "ОтсутствуетКомпонента" Тогда
ИнформацияОбОшибке = НСтр("ru = 'В сервисе внешних компонент не обнаружена внешняя компонента'");
ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда
ИнформацияОбОшибке = НСтр("ru = 'При попытке загрузить файл внешней компоненты из сервиса, возникла ошибка'");
КонецЕсли;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При загрузке внешней компоненты %1 возникала ошибка:
|%2'"),
ПредставлениеКомпоненты,
ИнформацияОбОшибке);
Результат = Результат + ПредставлениеКомпоненты + " - " + ИнформацияОбОшибке + Символы.ПС;
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ТекстОшибки);
Продолжить;
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаРезультата.АдресФайла);
Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь);
Если Не Информация.Разобрано Тогда
Результат = Результат + ПредставлениеКомпоненты + " - " + Информация.ОписаниеОшибки + Символы.ПС;
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, Информация.ОписаниеОшибки);
Продолжить;
КонецЕсли;
// Поиск ссылки.
Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор);
Если Выборка.НайтиСледующий(Отбор) Тогда
Объект = Выборка.Ссылка.ПолучитьОбъект();
// Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять.
Если Объект.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста.
ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта.
Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные);
Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"),
ТекущаяДатаСеанса());
Попытка
Объект.Записать();
Результат = Результат
+ ПредставлениеКомпоненты + " - " + НСтр("ru = 'Успешно обновлена.'") + Символы.ПС;
Исключение
Результат = Результат
+ ПредставлениеКомпоненты + " - " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС;
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'",
ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(АдресРезультата) Тогда
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецЕсли;
Иначе
ВызватьИсключение
НСтр("ru = 'Ожидается существование подсистемы ""ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент""'");
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ОбновитьНастройкиПолучениеВнешнихКомпонент (БСП)
ОбновитьКомпонентыСПортала (БСП)
ОбновитьКомпонентыСПорталаПриФормированииРезультата (БСП)
СвойстваВнешнейКомпоненты (БСП)