151 lines
9.1 KiB
Plaintext
151 lines
9.1 KiB
Plaintext
#Область ПрограммныйИнтерфейс
|
||
|
||
Функция АктуальнаяВерсияКонфигурации(Конфигурация, ВерсияКонфигурации, ВерсияПлатформы = Неопределено) Экспорт
|
||
|
||
АдресРесурса = АдресРесурсаПоИмениМетода("info");
|
||
ТелоЗапроса = Новый Структура("programName", Конфигурация.Имя);
|
||
ТелоЗапроса.Вставить("versionNumber", ВерсияКонфигурации);
|
||
ТелоЗапроса.Вставить("updateType", "NewConfigurationAndOrPlatform");
|
||
|
||
Если ВерсияПлатформы <> Неопределено Тогда
|
||
ТелоЗапроса.Вставить("platformVersion", ВерсияПлатформы);
|
||
Иначе
|
||
ТелоЗапроса.Вставить("platformVersion", "1.1.1.1");
|
||
КонецЕсли;
|
||
|
||
Соединение = Новый HTTPСоединение("update-api.1c.ru",443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
|
||
|
||
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(Соединение, АдресРесурса, , ТелоЗапроса);
|
||
|
||
КонецФункции
|
||
|
||
Функция КонфигурацииИзПодписки(ИдЧата) Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Наименование КАК КонфигурацияНаименование,
|
||
| ОтслеживаниеВерсийКонфигураций.Конфигурация.Имя КАК КонфигурацияИмя,
|
||
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
|
||
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|
||
|ИЗ
|
||
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций
|
||
|ГДЕ
|
||
| ОтслеживаниеВерсийКонфигураций.ИдЧата = &ИдЧата";
|
||
|
||
Запрос.УстановитьПараметр("ИдЧата", ИдЧата);
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||
|
||
МассивКонфигураций = Новый Массив;
|
||
|
||
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||
Конфигурация = Новый Структура("Наименование, Имя, ТекущаяВерсия, АктуальнаяВерсия",
|
||
ВыборкаДетальныеЗаписи.КонфигурацияНаименование,ВыборкаДетальныеЗаписи.КонфигурацияИмя,
|
||
ВыборкаДетальныеЗаписи.ТекущаяВерсия, ВыборкаДетальныеЗаписи.АктуальнаяВерсия);
|
||
МассивКонфигураций.Добавить(Конфигурация);
|
||
КонецЦикла;
|
||
|
||
Возврат МассивКонфигураций;
|
||
|
||
КонецФункции
|
||
|
||
|
||
Функция АктуализироватьВерсииКонфигураций()Экспорт
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст =
|
||
"ВЫБРАТЬ
|
||
| ОтслеживаниеВерсийКонфигураций.Конфигурация КАК Конфигурация,
|
||
| ОтслеживаниеВерсийКонфигураций.ИдЧата КАК ИдЧата,
|
||
| ОтслеживаниеВерсийКонфигураций.ТекущаяВерсия КАК ТекущаяВерсия,
|
||
| ОтслеживаниеВерсийКонфигураций.АктуальнаяВерсия КАК АктуальнаяВерсия
|
||
|ИЗ
|
||
| РегистрСведений.ОтслеживаниеВерсийКонфигураций КАК ОтслеживаниеВерсийКонфигураций";
|
||
|
||
РезультатЗапроса = Запрос.Выполнить();
|
||
|
||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||
|
||
КэшАктуальныхВерсий = РезультатЗапроса.Выгрузить().СкопироватьКолонки();
|
||
КэшАктуальныхВерсий.Колонки.Удалить("ИдЧата");
|
||
ОбработаноЗаписей = 0;
|
||
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||
Конфигурация = ВыборкаДетальныеЗаписи.Конфигурация;
|
||
ТекущаяВерсия = ВыборкаДетальныеЗаписи.ТекущаяВерсия;
|
||
ИдЧата = ВыборкаДетальныеЗаписи.ИдЧата;
|
||
|
||
АктуальнаяВерсия = ПолучитьИзКэшаАктуальнуюВерсию(КэшАктуальныхВерсий, Конфигурация, ТекущаяВерсия);
|
||
|
||
Если АктуальнаяВерсия = Неопределено Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
Если АктуальнаяВерсия = ВыборкаДетальныеЗаписи.АктуальнаяВерсия Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
|
||
МенеджерЗаписи = РегистрыСведений.ОтслеживаниеВерсийКонфигураций.СоздатьМенеджерЗаписи();
|
||
МенеджерЗаписи.Конфигурация = Конфигурация;
|
||
МенеджерЗаписи.ИдЧата = ИдЧата;
|
||
МенеджерЗаписи.ТекущаяВерсия = ТекущаяВерсия;
|
||
МенеджерЗаписи.АктуальнаяВерсия = АктуальнаяВерсия;
|
||
|
||
МенеджерЗаписи.Записать();
|
||
ОбработаноЗаписей = ОбработаноЗаписей + 1;
|
||
КонецЦикла;
|
||
|
||
Возврат ОбработаноЗаписей;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
Функция БазовыйАдрес()
|
||
|
||
Возврат "update-platform/programs/update";
|
||
|
||
КонецФункции
|
||
|
||
Функция АдресРесурсаПоИмениМетода(ИмяМетода)
|
||
|
||
Возврат СтрШаблон("%1/%2", БазовыйАдрес(), ИмяМетода);
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьИзКэшаАктуальнуюВерсию(Кэш, Конфигурация, ТекущаяВерсия)
|
||
|
||
СтруктураОтбора = Новый Структура("Конфигурация, ТекущаяВерсия", Конфигурация, ТекущаяВерсия);
|
||
МассивСтрок = Кэш.НайтиСтроки(СтруктураОтбора);
|
||
Если МассивСтрок.Количество() <> 0 Тогда
|
||
Возврат МассивСтрок[0].АктуальнаяВерсия;
|
||
КонецЕсли;
|
||
|
||
Ответ = АктуальнаяВерсияКонфигурации(Конфигурация, ТекущаяВерсия);
|
||
|
||
Если Ответ.Успех Тогда
|
||
АктуальнаяВерсияССервера = Ответ["Тело"]["configurationUpdateResponse"]["configurationVersion"];
|
||
Если АктуальнаяВерсияССервера = Неопределено Тогда
|
||
//Если запрос выполнен без ошибок и в запросе была передана актуальная версия - с сервера обновлений приходит null.
|
||
// Дополнительно проверим версию платформы, если что-то пришло, значит текущая версия существует
|
||
// и её назначаем актуальной. Таким образом отличаем некорректную версию текущей конфигурации от совпадения текущей и актуальной.
|
||
АктуальнаяВерсияПлатформы = Ответ["Тело"]["platformUpdateResponse"]["platformVersion"];
|
||
Если АктуальнаяВерсияПлатформы <> Неопределено Тогда
|
||
АктуальнаяВерсияССервера = ТекущаяВерсия;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
НоваяСтрока = Кэш.Добавить();
|
||
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураОтбора);
|
||
НоваяСтрока.АктуальнаяВерсия = АктуальнаяВерсияССервера;
|
||
Возврат АктуальнаяВерсияССервера;
|
||
КонецЕсли;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти |