1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-25 21:39:21 +02:00

RC5 для Linux

This commit is contained in:
Anton 2024-10-27 20:57:58 +03:00
parent 6a99135061
commit 1d3a97a9b1

View File

@ -106,6 +106,9 @@
КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "src", "Модули"));
КаталогиМодулей.Добавить(ОбъединитьПути(Путь, "src", "Modules"));
КаталогиВК = Новый Массив;
КаталогиВК.Добавить(ОбъединитьПути(Путь, "Components"));
КаталогиВК.Добавить(ОбъединитьПути(Путь, "Компоненты"));
Для Каждого мКаталог Из КаталогиКлассов Цикл
@ -118,6 +121,12 @@
ОбработатьКаталогМодулей(мКаталог, СтандартнаяОбработка, Отказ);
КонецЦикла;
Для Каждого мКаталог Из КаталогиВК Цикл
ОбработатьКаталогВК(мКаталог, СтандартнаяОбработка, Отказ);
КонецЦикла;
КонецПроцедуры
@ -161,6 +170,75 @@
КонецПроцедуры
// По соглашению ВК должны лежать в подпапках, названных, как значения перечисления ТипПлатформы.
// Имя файла, являющегося внешней компонентой должно иметь префикс 1script_
// Components
// net4 (фреймворк .net48
// 1script_barcode.dll
// dotnet (.net современных версий, он же netcore)
// 1script_barcode.dll
// NativeApi
// Windows_x86
// 1script_barcode.dll
// Windows_x86_64
// 1script_barcode.dll
// Linux_x86_64
// 1script_barcode.so
// остальные не поддерживаются (ЖВПР)
//
Процедура ОбработатьКаталогВК(Знач Путь, СтандартнаяОбработка, Отказ)
СИ = Новый СистемнаяИнформация();
МажорнаяВерсия = Лев(СИ.Версия,1);
Если МажорнаяВерсия = "1" Тогда
ОбработатьБиблиотекиCLR(ОбъединитьПути(Путь, "net4"));
ИначеЕсли МажорнаяВерсия = "2" Тогда
ОбработатьБиблиотекиCLR(ОбъединитьПути(Путь, "dotnet"));
Иначе
Вывести("Неизвестная мажорная версия системы: " + МажорнаяВерсия);
КонецЕсли;
ОбработатьКомпонентыNativeApi(Путь);
КонецПроцедуры
Процедура ОбработатьБиблиотекиCLR(Путь)
КандидатыВКомпоненты = НайтиФайлы(Путь, "1script_*.dll");
Для Каждого Кандидат Из КандидатыВКомпоненты Цикл
Если Не Кандидат.ЭтоФайл() Тогда
Продолжить;
КонецЕсли;
Вывести("Загружаю файл " + Кандидат.Имя);
ЗагрузитьБиблиотеку(Кандидат.ПолноеИмя);
КонецЦикла;
КонецПроцедуры
Процедура ОбработатьКомпонентыNativeApi(Путь)
СИ = Новый СистемнаяИнформация;
ИмяПодкаталога = ОбъединитьПути(Путь, Строка(СИ.ТипПлатформы));
Вывести("Ищу внешние компоненты в каталоге " + Путь);
#Если Windows Тогда
Расширение = ".dll";
#Иначе
Расширение = ".so";
#КонецЕсли
КандидатыВКомпоненты = НайтиФайлы(ИмяПодкаталога, "1script_*"+Расширение);
Для Каждого Кандидат Из КандидатыВКомпоненты Цикл
Если Не Кандидат.ЭтоФайл() Тогда
Продолжить;
КонецЕсли;
Вывести("Загружаю файл " + Кандидат.Имя);
ПодключитьВнешнююКомпоненту(Кандидат.ПолноеИмя, Кандидат.Имя, ТипВнешнейКомпоненты.Native);
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьКлассЕслиРанееНеДобавляли(ПутьФайла, ИмяКласса)
Вывести("Добавляю класс, если ранее не добавляли " + ИмяКласса);
Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда
@ -171,13 +249,14 @@
КлассУжеЕсть = Ложь;
Попытка
Объект = Новый(ИмяКласса);
КлассУжеЕсть = Истина;
Исключение
СообщениеОшибки = ОписаниеОшибки();
ИскомаяОшибка = СтрШаблон("Конструктор не найден (%1)", ИмяКласса);
КлассУжеЕсть = СтрНайти(СообщениеОшибки, ИскомаяОшибка) = 0;
КонецПопытки;
ИзвестныйТип = Тип(ИмяКласса);
КлассУжеЕсть = Истина;
Исключение
СообщениеОшибки = ОписаниеОшибки();
ШаблонОшибки = НСтр("ru = 'Тип не зарегистрирован (%1)';en = 'Type is not registered (%1)'");
ИскомаяОшибка = СтрШаблон(ШаблонОшибки, ИмяКласса);
КлассУжеЕсть = СтрНайти(СообщениеОшибки, ИскомаяОшибка) = 0;
КонецПопытки;
Если Не КлассУжеЕсть Тогда
Вывести("Добавляю класс, т.к. он не найден - " + ИмяКласса);