3_1_5_208
This commit is contained in:
1 parent
8e46accf22
commit
f3d355688f
117 files changed
+4061
-1442
No files matched your search
@@ -47,15 +47,45 @@
|
||||
|
||||
#Область ВнешниеКомпоненты
|
||||
|
||||
// Контекст подключения компоненты.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - контекст подключения компоненты:
|
||||
// * Оповещение - Неопределено, ОписаниеОповещения - оповещение.
|
||||
// * Идентификатор - Строка - идентификатор объекта компоненты, идентификатор внешней компоненты.
|
||||
// * Версия - Неопределено, Строка - версия компоненты.
|
||||
// * Местоположение - Строка - местоположение макета или ссылка на внешнюю компоненту.
|
||||
// * ИсходноеМестоположение - Строка - местоположение начального вызова, для хранения кэша.
|
||||
// * Кэшировать - Булево - признак сохранения подключенной компоненты в кэше.
|
||||
// * ПредложитьУстановить - Булево - предлагать устанавливать компоненту.
|
||||
// * ПредложитьЗагрузить - Булево - предлагать загружать компоненту с сайта ИТС.
|
||||
// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать.
|
||||
// * ИдентификаторыСозданияОбъектов - Массив -идентификатор создания экземпляра модуля объекта,
|
||||
// используется только для компонент, у которых есть несколько идентификаторов создания объектов,
|
||||
// при задании параметр Идентификатор будет игнорироваться.
|
||||
// * ВыполненПоискНовойВерсии - Булево - поиск новой версии компоненты производился.
|
||||
//
|
||||
Функция КонтекстПодключенияКомпоненты() Экспорт
|
||||
|
||||
Контекст = Новый Структура;
|
||||
Контекст.Вставить("Оповещение", Неопределено);
|
||||
Контекст.Вставить("Идентификатор", Неопределено);
|
||||
Контекст.Вставить("Версия", "");
|
||||
Контекст.Вставить("Местоположение", "");
|
||||
Контекст.Вставить("ИсходноеМестоположение", "");
|
||||
Контекст.Вставить("Кэшировать", Истина);
|
||||
Контекст.Вставить("ПредложитьУстановить", Истина);
|
||||
Контекст.Вставить("ПредложитьЗагрузить", Ложь);
|
||||
Контекст.Вставить("ТекстПояснения", "");
|
||||
Контекст.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив);
|
||||
Контекст.Вставить("ВыполненПоискНовойВерсии", Ложь);
|
||||
|
||||
Возврат Контекст;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Параметры:
|
||||
// Контекст - Структура:
|
||||
// * Оповещение - ОписаниеОповещения
|
||||
// * Идентификатор - Строка
|
||||
// * Местоположение - Строка
|
||||
// * Кэшировать - Булево
|
||||
// * ПредложитьУстановить - Булево
|
||||
// * ТекстПояснения - Строка
|
||||
// * ИдентификаторыСозданияОбъектов - Массив из Строка
|
||||
// Контекст - см. КонтекстПодключенияКомпоненты.
|
||||
//
|
||||
Процедура ПодключитьКомпоненту(Контекст) Экспорт
|
||||
|
||||
@@ -64,10 +94,9 @@
|
||||
|
||||
Если КомпонентаСодержитЕдинственныйКлассОбъектов Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Не удалось подключить внешнюю компоненту на клиенте
|
||||
|%1
|
||||
НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" в клиентском приложении
|
||||
|по причине:
|
||||
|Не допустимо одновременно не указывать Идентификатор и ИдентификаторыСозданияОбъектов'"),
|
||||
|Недопустимо одновременно не указывать Идентификатор и ИдентификаторыСозданияОбъектов.'"),
|
||||
Контекст.Местоположение);
|
||||
Иначе
|
||||
// В случае, когда в компоненте есть несколько классов объектов
|
||||
@@ -77,51 +106,64 @@
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте
|
||||
|по причине:
|
||||
|указано некорректное местоположение внешней компоненты
|
||||
|%2'"),
|
||||
Контекст.Идентификатор,
|
||||
Контекст.Местоположение);
|
||||
КонецЕсли;
|
||||
ПроверитьМестоположениеКомпоненты(Контекст.Идентификатор, Контекст.Местоположение);
|
||||
|
||||
Если Контекст.Кэшировать Тогда
|
||||
|
||||
ПодключаемыйМодуль = ПолучитьОбъектКомпонентыИзКэша(Контекст.Местоположение);
|
||||
Если ПодключаемыйМодуль <> Неопределено Тогда
|
||||
ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст);
|
||||
Если Не Контекст.ВыполненПоискНовойВерсии Тогда
|
||||
Если Контекст.Кэшировать Тогда
|
||||
ПодключаемыйМодуль = ПолучитьОбъектКомпонентыИзКэша(Контекст.Местоположение);
|
||||
Если ПодключаемыйМодуль <> Неопределено Тогда
|
||||
ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
|
||||
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
|
||||
|
||||
Если СимволическоеИмя <> Неопределено Тогда
|
||||
// Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась.
|
||||
Подключено = Истина;
|
||||
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
|
||||
ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
// Поиск более свежей версии компоненты в макетах и справочнике.
|
||||
Если ЭтоМакет(Контекст.Местоположение) Тогда
|
||||
Контекст.ИсходноеМестоположение = Контекст.Местоположение;
|
||||
Оповещение = Новый ОписаниеОповещения("ПодключитьПослеПоискаВнешнейКомпоненты", ЭтотОбъект, Контекст);
|
||||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда
|
||||
МодульВнешниеКомпонентыСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
|
||||
"ВнешниеКомпонентыСлужебныйКлиент");
|
||||
|
||||
КонтекстПроверкиКомпоненты = КонтекстПодключенияКомпоненты();
|
||||
КонтекстПроверкиКомпоненты.Идентификатор = Контекст.Идентификатор;
|
||||
КонтекстПроверкиКомпоненты.Версия = Неопределено;
|
||||
КонтекстПроверкиКомпоненты.ПредложитьУстановить = Контекст.ПредложитьУстановить;
|
||||
КонтекстПроверкиКомпоненты.ПредложитьЗагрузить = Контекст.ПредложитьЗагрузить;
|
||||
КонтекстПроверкиКомпоненты.ТекстПояснения = Контекст.ТекстПояснения;
|
||||
КонтекстПроверкиКомпоненты.ИсходноеМестоположение = Контекст.ИсходноеМестоположение;
|
||||
КонтекстПроверкиКомпоненты.ИдентификаторыСозданияОбъектов = Контекст.ИдентификаторыСозданияОбъектов;
|
||||
|
||||
МодульВнешниеКомпонентыСлужебныйКлиент.ПроверитьДоступностьКомпоненты(Оповещение,
|
||||
КонтекстПроверкиКомпоненты);
|
||||
Иначе
|
||||
ВыполнитьОбработкуОповещения(Оповещение, Неопределено);
|
||||
КонецЕсли;
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
|
||||
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
|
||||
// Генерация уникального имени.
|
||||
СимволическоеИмя = "С" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
|
||||
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
|
||||
|
||||
Если СимволическоеИмя = Неопределено Тогда
|
||||
|
||||
// Генерация уникального имени.
|
||||
СимволическоеИмя = "С" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
|
||||
|
||||
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
|
||||
|
||||
Оповещение = Новый ОписаниеОповещения(
|
||||
"ПодключитьКомпонентуПослеПопыткиПодключения", ЭтотОбъект, Контекст,
|
||||
"ПодключитьКомпонентуПриОбработкеОшибки", ЭтотОбъект);
|
||||
|
||||
НачатьПодключениеВнешнейКомпоненты(Оповещение, Контекст.Местоположение, СимволическоеИмя);
|
||||
|
||||
Иначе
|
||||
|
||||
// Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась.
|
||||
Подключено = Истина;
|
||||
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
|
||||
ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст);
|
||||
|
||||
КонецЕсли;
|
||||
Оповещение = Новый ОписаниеОповещения(
|
||||
"ПодключитьКомпонентуПослеПопыткиПодключения", ЭтотОбъект, Контекст,
|
||||
"ПодключитьКомпонентуПриОбработкеОшибки", ЭтотОбъект);
|
||||
|
||||
НачатьПодключениеВнешнейКомпоненты(Оповещение, Контекст.Местоположение, СимволическоеИмя);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Продолжение процедуры ПодключитьКомпоненту.
|
||||
@@ -155,18 +197,11 @@
|
||||
// * Оповещение - ОписаниеОповещения
|
||||
// * Местоположение - Строка
|
||||
// * ТекстПояснения - Строка
|
||||
// * Идентификатор - Строка
|
||||
//
|
||||
Процедура УстановитьКомпоненту(Контекст) Экспорт
|
||||
|
||||
Если Не МестоположениеКомпонентыКорректно(Контекст.Местоположение) Тогда
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте
|
||||
|%2
|
||||
|по причине:
|
||||
|Не допустимо устанавливать компоненты из указанного местоположения.'"),
|
||||
Контекст.Идентификатор,
|
||||
Контекст.Местоположение);
|
||||
КонецЕсли;
|
||||
ПроверитьМестоположениеКомпоненты(Контекст.Идентификатор, Контекст.Местоположение);
|
||||
|
||||
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
|
||||
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
|
||||
@@ -492,13 +527,39 @@
|
||||
|
||||
#Область ВнешниеКомпоненты
|
||||
|
||||
// Продолжение процедуры ПодключитьКомпоненту.
|
||||
//
|
||||
// Параметры:
|
||||
// Результат - см. ВнешниеКомпонентыСлужебныйКлиент.РезультатДоступностиКомпоненты
|
||||
// Контекст - см. ОбщегоНазначенияСлужебныйКлиент.КонтекстПодключенияКомпоненты
|
||||
//
|
||||
Процедура ПодключитьПослеПоискаВнешнейКомпоненты(Результат, Контекст) Экспорт
|
||||
|
||||
Контекст.ВыполненПоискНовойВерсии = Истина;
|
||||
Если Результат.КомпонентаПоследнейВерсии = Неопределено Тогда
|
||||
КомпонентаПоследнейВерсии = СтандартныеПодсистемыВызовСервера.КомпонентаПоследнейВерсии(
|
||||
Контекст.Идентификатор, Контекст.ИсходноеМестоположение, Результат);
|
||||
Иначе
|
||||
КомпонентаПоследнейВерсии = Результат.КомпонентаПоследнейВерсии;
|
||||
КонецЕсли;
|
||||
|
||||
Контекст.Местоположение = КомпонентаПоследнейВерсии.Местоположение;
|
||||
Контекст.Версия = КомпонентаПоследнейВерсии.Версия;
|
||||
ПодключитьКомпоненту(Контекст);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Продолжение процедуры ПодключитьКомпоненту.
|
||||
Процедура ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст) Экспорт
|
||||
|
||||
Если Подключено Тогда
|
||||
|
||||
// Сохранение факта подключения внешней компоненты к этому сеансу.
|
||||
ЗаписатьСимволическоеИмяКомпонентыВКэш(Контекст.Местоположение, Контекст.СимволическоеИмя);
|
||||
|
||||
ИсходноеМестоположение = ?(ЗначениеЗаполнено(Контекст.ИсходноеМестоположение),
|
||||
Контекст.ИсходноеМестоположение, Контекст.Местоположение);
|
||||
|
||||
ЗаписатьСимволическоеИмяКомпонентыВКэш(ИсходноеМестоположение, Контекст.СимволическоеИмя);
|
||||
|
||||
ПодключаемыйМодуль = Неопределено;
|
||||
|
||||
@@ -512,7 +573,7 @@
|
||||
КонецПопытки;
|
||||
|
||||
Если Контекст.Кэшировать Тогда
|
||||
ЗаписатьОбъектКомпонентыВКэш(Контекст.Местоположение, ПодключаемыйМодуль)
|
||||
ЗаписатьОбъектКомпонентыВКэш(ИсходноеМестоположение, ПодключаемыйМодуль)
|
||||
КонецЕсли;
|
||||
|
||||
ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст);
|
||||
@@ -565,6 +626,7 @@
|
||||
КонтекстУстановки.Вставить("Оповещение", Оповещение);
|
||||
КонтекстУстановки.Вставить("Местоположение", Контекст.Местоположение);
|
||||
КонтекстУстановки.Вставить("ТекстПояснения", Контекст.ТекстПояснения);
|
||||
КонтекстУстановки.Вставить("Идентификатор", Контекст.Идентификатор);
|
||||
|
||||
УстановитьКомпоненту(КонтекстУстановки);
|
||||
|
||||
@@ -768,18 +830,25 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция МестоположениеКомпонентыКорректно(Местоположение)
|
||||
Процедура ПроверитьМестоположениеКомпоненты(Идентификатор, Местоположение)
|
||||
|
||||
Если ЭтоМакет(Местоположение) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда
|
||||
МодульВнешниеКомпонентыСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВнешниеКомпонентыСлужебныйКлиент");
|
||||
Если МодульВнешниеКомпонентыСлужебныйКлиент.ЭтоКомпонентаИзХранилища(Местоположение) Тогда
|
||||
Возврат Истина;
|
||||
КонецЕсли;
|
||||
МодульВнешниеКомпонентыСлужебныйКлиент.ПроверитьМестоположениеКомпоненты(Идентификатор, Местоположение);
|
||||
Иначе
|
||||
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" в клиентском приложении
|
||||
|по причине:
|
||||
|указано некорректное местоположение внешней компоненты
|
||||
|%2'"),
|
||||
Идентификатор, Местоположение);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЭтоМакет(Местоположение);
|
||||
|
||||
КонецФункции
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЭтоМакет(Местоположение)
|
||||
|
||||
|
||||
Reference in new issue
Block a user