1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-10 04:18:47 +02:00
OpenIntegrations/cli/core/Classes/Приложение.os

335 lines
14 KiB
Plaintext
Raw Normal View History

2024-03-19 12:56:38 +02:00
#Использовать cmdline
#Использовать oint
2024-03-22 09:40:03 +02:00
#Использовать "../../tools"
#Использовать "../../help"
2024-03-19 12:56:38 +02:00
2024-03-22 09:40:03 +02:00
Перем ОбъектОПИ;
Перем Парсер;
2024-03-29 09:25:04 +02:00
Перем Отладка;
2024-04-01 12:36:17 +02:00
Перем Тестирование;
Перем ФайлВывода;
Перем Версия;
2024-03-21 07:48:40 +02:00
#Область СлужебныеПроцедурыИФункции
#Область Основные
2024-03-19 12:56:38 +02:00
Процедура ОсновнойОбработчик()
Отладка = Ложь;
2024-04-01 12:36:17 +02:00
Тестирование = Ложь;
2024-03-26 13:15:13 +02:00
Парсер = Новый ПарсерАргументовКоманднойСтроки();
ОбъектОПИ = Новый СвязьОПИ();
Версия = ОбъектОПИ.ПолучитьВерсию();
2024-03-26 13:15:13 +02:00
Команды = ОбъектОПИ.СоответствиеКомандМодулей;
ДобавитьКомандуСправки();
2024-03-22 09:40:03 +02:00
2024-03-26 13:15:13 +02:00
Для Каждого Команда Из Команды Цикл
СформироватьКоманду(Команда.Ключ, Парсер);
КонецЦикла;
2024-03-22 09:40:03 +02:00
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
2024-03-19 12:56:38 +02:00
ТекущаяКоманда = Результат["Команда"];
2024-04-11 11:51:01 +02:00
2024-03-26 13:15:13 +02:00
2024-03-19 12:56:38 +02:00
Если ТекущаяКоманда = Неопределено Тогда
2024-04-11 11:51:01 +02:00
Справка.ВывестиНачальнуюСтраницу(Команды, Версия);
2024-03-19 12:56:38 +02:00
Иначе
ВыполнитьОбработкуКоманды(Результат);
КонецЕсли;
КонецПроцедуры
2024-03-26 13:15:13 +02:00
Процедура ДобавитьКомандуСправки()
Парсер.ДобавитьПараметр("-h");
Парсер.ДобавитьПараметр("-help");
Парсер.ДобавитьПараметр("--help");
КонецПроцедуры
Процедура СформироватьКоманду(Знач Имя, Парсер)
2024-03-19 12:56:38 +02:00
Команда = Парсер.ОписаниеКоманды(Имя);
2024-03-26 13:15:13 +02:00
ТаблицаПараметров = ОбъектОПИ.СоответствиеТаблицПараметров[Имя];
Если Не ТаблицаПараметров = Неопределено Тогда
ТаблицаПараметров = ТаблицаПараметров.Скопировать();
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
ДобавитьПараметрыКоманды(Парсер, Команда, ТаблицаПараметров);
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--help");
2024-03-29 09:25:04 +02:00
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--debug");
2024-04-01 12:36:17 +02:00
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--test");
2024-04-09 15:35:11 +02:00
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "--out");
2024-03-26 13:15:13 +02:00
Парсер.ДобавитьКоманду(Команда);
Иначе
Справка.ВывестиСообщениеИсключения("Команда");
КонецЕсли;
2024-03-19 12:56:38 +02:00
КонецПроцедуры
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
ТекущаяКоманда = Данные["Команда"];
2024-03-26 13:15:13 +02:00
Параметры = Данные["ЗначенияПараметров"];
2024-03-19 12:56:38 +02:00
Вывод = "";
2024-04-01 12:36:17 +02:00
УстановитьРежимОтладки(Параметры);
УстановитьРежимТеста(Параметры);
УстановитьФайлВывода(Параметры);
2024-04-01 12:36:17 +02:00
Если Отладка Или Тестирование Тогда
Для каждого ВводныйПараметр Из Параметры Цикл
Сообщить(ВводныйПараметр.Ключ + " : " + ВводныйПараметр.Значение);
КонецЦикла;
КонецЕсли;
2024-03-19 12:56:38 +02:00
Попытка
2024-03-26 13:15:13 +02:00
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Параметры);
2024-03-19 12:56:38 +02:00
Если ЗначениеЗаполнено(Вывод) Тогда
2024-03-26 13:15:13 +02:00
ОбработатьВыводJSON(Вывод);
2024-04-10 12:45:45 +02:00
СообщитьРезультат(Вывод, СтатусСообщения.Внимание);
2024-03-19 12:56:38 +02:00
КонецЕсли;
Исключение
2024-04-10 12:11:20 +02:00
Информация = "";
2024-03-19 12:56:38 +02:00
Если ЗначениеЗаполнено(Вывод) Тогда
2024-04-10 12:11:20 +02:00
Если Отладка Или Тестирование Тогда
Информация = ОписаниеОшибки();
КонецЕсли;
2024-04-09 15:35:11 +02:00
СообщитьРезультат(Вывод);
2024-03-19 12:56:38 +02:00
Иначе
2024-04-01 12:36:17 +02:00
Если Отладка Или Тестирование Тогда
Информация = ОписаниеОшибки();
Иначе
Информация = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецЕсли;
2024-03-19 12:56:38 +02:00
КонецЕсли;
2024-04-10 12:11:20 +02:00
Справка.ВывестиСообщениеИсключения(Информация);
2024-03-19 12:56:38 +02:00
КонецПопытки;
КонецПроцедуры
2024-03-26 13:15:13 +02:00
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры)
2024-03-22 09:40:03 +02:00
2024-03-26 13:15:13 +02:00
Модуль = ОбъектОПИ.СоответствиеКомандМодулей[Команда];
2024-03-19 12:56:38 +02:00
Метод = Параметры["Метод"];
2024-03-26 13:15:13 +02:00
Ответ = "Функция вернула пустое значение";
2024-03-19 12:56:38 +02:00
2024-03-26 13:15:13 +02:00
ТаблицаПараметров = ОбъектОПИ.СоответствиеТаблицПараметров[Команда];
2024-03-19 12:56:38 +02:00
2024-03-26 13:15:13 +02:00
Если Не ЗначениеЗаполнено(Метод) Или Метод = "--help" Тогда
2024-03-22 09:40:03 +02:00
Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров);
2024-03-19 12:56:38 +02:00
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
2024-04-01 12:36:17 +02:00
Если Параметры.Количество() = 4 Или Параметры["--help"] Тогда
Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода, Команда);
2024-03-19 12:56:38 +02:00
КонецЕсли;
2024-03-26 13:15:13 +02:00
ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
2024-03-22 10:42:07 +02:00
2024-04-01 12:36:17 +02:00
Если Отладка Или Тестирование Тогда
Сообщить(ТекстВыполнения, СтатусСообщения.Внимание);
КонецЕсли;
Если Не Тестирование Тогда
Выполнить(ТекстВыполнения);
КонецЕсли;
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область Вспомогательные
Процедура ДобавитьПараметрыКоманды(Парсер, Команда, Знач ТаблицаПараметров);
ТаблицаПараметров.Свернуть("Параметр");
МассивПараметров = ТаблицаПараметров.ВыгрузитьКолонку("Параметр");
Для Каждого Параметр Из МассивПараметров Цикл
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
КонецЦикла;
КонецПроцедуры
2024-03-22 09:40:03 +02:00
Процедура ОбработатьВыводJSON(Вывод)
Если ТипЗнч(Вывод) = Тип("Структура")
Или ТипЗнч(Вывод) = Тип("Соответствие")
Или ТипЗнч(Вывод) = Тип("Массив") Тогда
Вывод = OPI_Инструменты.JSONСтрокой(Вывод);
КонецЕсли;
2024-04-10 11:01:41 +02:00
КонецПроцедуры
2024-03-22 09:40:03 +02:00
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод)
ТекстВыполнения = "";
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
2024-03-19 12:56:38 +02:00
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ИмяПараметра = НеобходимыйПараметр.Параметр;
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
2024-03-19 12:56:38 +02:00
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
2024-03-22 09:40:03 +02:00
2024-03-19 12:56:38 +02:00
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
2024-03-22 09:40:03 +02:00
+ ИмяПараметра
+ " = """
2024-04-09 19:55:51 +02:00
+ СтрЗаменить(ЗначениеПараметра, """", """""")
+ """;";
2024-03-19 12:56:38 +02:00
2024-03-22 09:40:03 +02:00
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
2024-03-26 13:15:13 +02:00
2024-03-19 12:56:38 +02:00
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
2024-03-22 09:40:03 +02:00
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
2024-03-22 09:40:03 +02:00
Возврат ТекстВыполнения;
2024-03-21 13:10:44 +02:00
КонецФункции
2024-04-01 12:36:17 +02:00
Процедура УстановитьРежимОтладки(Знач Параметры)
Если Параметры["--debug"] Тогда
Отладка = Истина;
Иначе
Отладка = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьРежимТеста(Знач Параметры)
Если Параметры["--test"] Тогда
Тестирование = Истина;
Иначе
Тестирование = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьФайлВывода(Знач Параметры)
Вывод = Параметры["--out"];
Если ЗначениеЗаполнено(Вывод) Тогда
ФайлВывода = Вывод;
КонецЕсли;
КонецПроцедуры
2024-04-09 15:35:11 +02:00
Процедура СообщитьРезультат(Знач Текст, Знач Статус = "")
Если Не ЗначениеЗаполнено(Статус) Тогда
Статус = СтатусСообщения.БезСтатуса;
КонецЕсли;
Если ЗначениеЗаполнено(ФайлВывода) Тогда
Текст = ЗаписатьЗначениеВФайл(Текст, ФайлВывода);
2024-04-10 12:45:45 +02:00
ИначеЕсли ТипЗнч(Текст) = Тип("ДвоичныеДанные") Тогда
Текст = "Похоже, что в ответе пришли двоичные данные! "
+ "В следующий раз используйте опцию --out для указания пути их сохранения";
Статус = СтатусСообщения.Информация;
Иначе
Текст = Строка(Текст);
КонецЕсли;
2024-04-09 19:27:46 +02:00
Сообщить(Текст, Статус);
2024-04-09 15:35:11 +02:00
КонецПроцедуры
2024-04-09 19:27:46 +02:00
Функция ЗаписатьЗначениеВФайл(Знач Значение, Знач Путь)
СтандартнаяЕдиница = 1024;
ЕдиницаДанных = СтандартнаяЕдиница * СтандартнаяЕдиница;
Значение = ?(ТипЗнч(Значение) = Тип("ДвоичныеДанные"), Значение, Строка(Значение));
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение.Записать(Путь);
Иначе
ВозможныйФайл = Новый Файл(Значение);
Если ВозможныйФайл.Существует() Тогда
Путь = Значение;
Иначе
ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(Значение);
ТекстовыйДокумент.Записать(Путь);
КонецЕсли;
КонецЕсли;
ЗаписанныйФайл = Новый Файл(Путь);
Если ЗаписанныйФайл.Существует() Тогда
Возврат "Файл размера "
2024-04-10 13:05:16 +02:00
+ Строка(Окр(ЗаписанныйФайл.Размер() / ЕдиницаДанных, 3))
+ " МБ был записан в "
+ ЗаписанныйФайл.ПолноеИмя;
Иначе
2024-04-11 15:45:11 +02:00
ВызватьИсключение "Файл не был записан! Используйте флаг --debug для получения дополнительной информации";
КонецЕсли;
КонецФункции
#КонецОбласти
#КонецОбласти
2024-03-19 12:56:38 +02:00
2024-03-26 13:15:13 +02:00
Попытка
2024-03-19 12:56:38 +02:00
ОсновнойОбработчик();
2024-03-26 13:15:13 +02:00
Исключение
2024-03-29 09:25:04 +02:00
2024-04-11 11:51:13 +02:00
Если Отладка Тогда
Информация = ОписаниеОшибки();
2024-03-29 09:25:04 +02:00
Иначе
Информация = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецЕсли;
Справка.ВывестиСообщениеИсключения(Информация);
2024-03-26 13:15:13 +02:00
КонецПопытки;
2024-03-19 12:56:38 +02:00