1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Рефакторинг вызова команд CLI

This commit is contained in:
Anton Titovets
2025-02-02 11:38:15 +03:00
parent 6a626419bc
commit ed4901f8fa
3 changed files with 195 additions and 164 deletions

View File

@@ -103,18 +103,17 @@
Процедура ЗаписатьВспомогательныеФункции()
МодульСоставаОПИ.ДобавитьСтроку("
|
|Функция ПолучитьСостав(Знач Команда) Экспорт
| ТекущийСостав = Новый(Команда);
| Возврат ТекущийСостав.ПолучитьСостав();
|КонецФункции
|
|Функция ПолучитьПолныйСостав() Экспорт
|
|
| ОбщаяТаблица = Неопределено;
|
|
| Для Каждого Команда Из ПолучитьСоответствиеКомандМодулей() Цикл
|
|
| ТекущаяТаблица = ПолучитьСостав(Команда.Ключ);
|
| Если ОбщаяТаблица = Неопределено Тогда
@@ -124,75 +123,88 @@
| ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы);
| КонецЦикла;
| КонецЕсли;
|
|
| КонецЦикла;
|
|
| Возврат ОбщаяТаблица;
|
|
|КонецФункции
|
|Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод) Экспорт
|
| ТекстВыполнения = """";
| СтрокаВызова = Модуль + ""."" + Метод + ""("";
| Счетчик = 0;
|
| Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
|
| ИмяПараметра = НеобходимыйПараметр.Параметр;
| ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
|
| Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
|
| ИмяПараметра = ""Параметр"" + СтрЗаменить(ИмяПараметра, ""--"", ""_"");
|
| ТекстВыполнения = ТекстВыполнения
| + Символы.ПС
| + ИмяПараметра
| + "" = """"""
| + СтрЗаменить(ЗначениеПараметра, """""""", """""""""""")
| + """""";"";
|
|Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач Команда, Знач Метод) Экспорт
|
| Модуль = СоответствиеКоманд.Получить(Команда);
|
| Если Не ЗначениеЗаполнено(Модуль) Тогда
| Возврат Новый Структура(""Ошибка,Результат"", Истина, ""Команда"");
| КонецЕсли;
|
| ОтборКоманды = Новый Структура(""МетодПоиска"", вРег(Метод));
| ПараметрыМетода = ПолучитьСостав(Команда).НайтиСтроки(ОтборКоманды);
|
| Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
| Возврат Новый Структура(""Ошибка,Результат"", Истина, ""Метод"");
| КонецЕсли;
|
| ТекстВыполнения = """";
| СтрокаВызова = Модуль + ""."" + Метод + ""("";
| Счетчик = 0;
|
| Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
|
| ИмяПараметра = НеобходимыйПараметр.Параметр;
| ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
|
| Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
|
| ИмяПараметра = ""Параметр"" + СтрЗаменить(ИмяПараметра, ""--"", ""_"");
|
| ТекстВыполнения = ТекстВыполнения
| + Символы.ПС
| + ИмяПараметра
| + "" = """"""
| + СтрЗаменить(ЗначениеПараметра, """""""", """""""""""")
| + """""";"";
|
| Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
|
| ТекстВыполнения = ТекстВыполнения + ""
| |OPI_Инструменты.ЗаменитьУправляющиеПоследовательности("" + ИмяПараметра + "");
| |"";
|
| КонецЕсли;
|
| СтрокаВызова = СтрокаВызова + ИмяПараметра + "", "";
|
| ТекстВыполнения = ТекстВыполнения + ""
| |OPI_Инструменты.ЗаменитьУправляющиеПоследовательности("" + ИмяПараметра + "");
| |"";
|
| КонецЕсли;
|
| СтрокаВызова = СтрокаВызова + ИмяПараметра + "", "";
| Счетчик = Счетчик + 1;
|
| Иначе
| СтрокаВызова = СтрокаВызова + "" , "";
| КонецЕсли;
|
| КонецЦикла;
|
| ЛишниеСимволы = 2;
| СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
| СтрокаВызова = СтрокаВызова + "");"";
| СтрокаВызова = ""Ответ = "" + СтрокаВызова;
| ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
|
| Возврат ТекстВыполнения;
|
|
| Иначе
| СтрокаВызова = СтрокаВызова + "" , "";
| КонецЕсли;
|
| КонецЦикла;
|
| ЛишниеСимволы = 2;
| СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
| СтрокаВызова = СтрокаВызова + "");"";
| СтрокаВызова = ""Ответ = "" + СтрокаВызова;
| ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
|
| Возврат Новый Структура(""Ошибка,Результат"", Ложь, ТекстВыполнения);
|
|КонецФункции
|
|Функция ТребуетсяОбработкаУправляющихПоследовательностей(Знач ИмяПараметра, Знач ЗначениеПараметра)
|
| ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
| ФайлПараметра = Новый Файл(ЗначениеПараметраСокр);
|
| Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, ""{"")
| И Не СтрНачинаетсяС(ЗначениеПараметраСокр, ""["")
| И Не ФайлПараметра.Существует()
| И Не ИмяПараметра = ""Параметр_out"";
|
|
| ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
| ФайлПараметра = Новый Файл(ЗначениеПараметраСокр);
|
| Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, ""{"")
| И Не СтрНачинаетсяС(ЗначениеПараметраСокр, ""["")
| И Не ФайлПараметра.Существует()
| И Не ИмяПараметра = ""Параметр_out"";
|
|КонецФункции
|");
КонецПроцедуры
Процедура ЗаполнитьТаблицыСостава()

View File

@@ -105,7 +105,6 @@
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры)
Модуль = Команды[Команда];
Метод = Параметры["Метод"];
Ответ = "Функция вернула пустое значение";
@@ -115,18 +114,25 @@
Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров);
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
Справка.ВывестиСообщениеИсключения("Метод", ФайлВывода);
КонецЕсли;
Если Параметры.Количество() = ЧислоСтандартныхПараметров Или Параметры["--help"] Тогда
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
Справка.ВывестиСообщениеИсключения("Метод", ФайлВывода);
КонецЕсли;
Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода);
КонецЕсли;
ТекстВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
СтруктураВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(Параметры, Команда, Метод);
Если СтруктураВыполнения["Ошибка"] Тогда
Справка.ВывестиСообщениеИсключения(СтруктураВыполнения["Результат"], ФайлВывода);
Иначе
ТекстВыполнения = СтруктураВыполнения["Результат"];
КонецЕсли;
Если Отладка Или Тестирование Тогда
Сообщить(ТекстВыполнения, СтатусСообщения.Внимание);

View File

@@ -3,42 +3,42 @@
Перем СоответствиеКоманд;
Процедура ПриСозданииОбъекта()
СоответствиеКоманд = Новый Соответствие();
СоответствиеКоманд.Вставить("tools", "Утилиты");
СоответствиеКоманд.Вставить("airtable", "OPI_Airtable");
СоответствиеКоманд.Вставить("bitrix24", "OPI_Bitrix24");
СоответствиеКоманд.Вставить("cdek", "OPI_CDEK");
СоответствиеКоманд.Вставить("dropbox", "OPI_Dropbox");
СоответствиеКоманд.Вставить("gcalendar", "OPI_GoogleCalendar");
СоответствиеКоманд.Вставить("gdrive", "OPI_GoogleDrive");
СоответствиеКоманд.Вставить("gsheets", "OPI_GoogleSheets");
СоответствиеКоманд.Вставить("google", "OPI_GoogleWorkspace");
СоответствиеКоманд.Вставить("mongodb", "OPI_MongoDB");
СоответствиеКоманд.Вставить("neocities", "OPI_Neocities");
СоответствиеКоманд.Вставить("notion", "OPI_Notion");
СоответствиеКоманд.Вставить("ozon", "OPI_Ozon");
СоответствиеКоманд.Вставить("s3", "OPI_S3");
СоответствиеКоманд.Вставить("slack", "OPI_Slack");
СоответствиеКоманд.Вставить("sqlite", "OPI_SQLite");
СоответствиеКоманд.Вставить("tcp", "OPI_TCP");
СоответствиеКоманд.Вставить("telegram", "OPI_Telegram");
СоответствиеКоманд.Вставить("twitter", "OPI_Twitter");
СоответствиеКоманд.Вставить("viber", "OPI_Viber");
СоответствиеКоманд.Вставить("vk", "OPI_VK");
СоответствиеКоманд.Вставить("vkteams", "OPI_VKTeams");
СоответствиеКоманд.Вставить("yadisk", "OPI_YandexDisk");
СоответствиеКоманд.Вставить("yandex", "OPI_YandexID");
СоответствиеКоманд.Вставить("yamarket", "OPI_YandexMarket");
СоответствиеКоманд.Вставить("metrika", "OPI_YandexMetrika");
СоответствиеКоманд.Вставить("proxy", "OPI_ПроксиИнтеграций");
СоответствиеКоманд = Новый Соответствие();
СоответствиеКоманд.Вставить("tools", "Утилиты");
СоответствиеКоманд.Вставить("airtable", "OPI_Airtable");
СоответствиеКоманд.Вставить("bitrix24", "OPI_Bitrix24");
СоответствиеКоманд.Вставить("cdek", "OPI_CDEK");
СоответствиеКоманд.Вставить("dropbox", "OPI_Dropbox");
СоответствиеКоманд.Вставить("gcalendar", "OPI_GoogleCalendar");
СоответствиеКоманд.Вставить("gdrive", "OPI_GoogleDrive");
СоответствиеКоманд.Вставить("gsheets", "OPI_GoogleSheets");
СоответствиеКоманд.Вставить("google", "OPI_GoogleWorkspace");
СоответствиеКоманд.Вставить("mongodb", "OPI_MongoDB");
СоответствиеКоманд.Вставить("neocities", "OPI_Neocities");
СоответствиеКоманд.Вставить("notion", "OPI_Notion");
СоответствиеКоманд.Вставить("ozon", "OPI_Ozon");
СоответствиеКоманд.Вставить("s3", "OPI_S3");
СоответствиеКоманд.Вставить("slack", "OPI_Slack");
СоответствиеКоманд.Вставить("sqlite", "OPI_SQLite");
СоответствиеКоманд.Вставить("tcp", "OPI_TCP");
СоответствиеКоманд.Вставить("telegram", "OPI_Telegram");
СоответствиеКоманд.Вставить("twitter", "OPI_Twitter");
СоответствиеКоманд.Вставить("viber", "OPI_Viber");
СоответствиеКоманд.Вставить("vk", "OPI_VK");
СоответствиеКоманд.Вставить("vkteams", "OPI_VKTeams");
СоответствиеКоманд.Вставить("yadisk", "OPI_YandexDisk");
СоответствиеКоманд.Вставить("yandex", "OPI_YandexID");
СоответствиеКоманд.Вставить("yamarket", "OPI_YandexMarket");
СоответствиеКоманд.Вставить("metrika", "OPI_YandexMetrika");
СоответствиеКоманд.Вставить("proxy", "OPI_ПроксиИнтеграций");
КонецПроцедуры
Функция ПолучитьВерсию() Экспорт
Возврат "1.18.0";
Возврат "1.18.0";
КонецФункции
Функция ПолучитьСоответствиеКомандМодулей() Экспорт
Возврат СоответствиеКоманд;
Возврат СоответствиеКоманд;
КонецФункции
@@ -49,11 +49,11 @@
КонецФункции
Функция ПолучитьПолныйСостав() Экспорт
ОбщаяТаблица = Неопределено;
Для Каждого Команда Из ПолучитьСоответствиеКомандМодулей() Цикл
ТекущаяТаблица = ПолучитьСостав(Команда.Ключ);
Если ОбщаяТаблица = Неопределено Тогда
@@ -63,70 +63,83 @@
ЗаполнитьЗначенияСвойств(ОбщаяТаблица.Добавить(), СтрокаТаблицы);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ОбщаяТаблица;
КонецФункции
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод) Экспорт
ТекстВыполнения = "";
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ИмяПараметра = НеобходимыйПараметр.Параметр;
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ ИмяПараметра
+ " = """
+ СтрЗаменить(ЗначениеПараметра, """", """""")
+ """;";
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач Команда, Знач Метод) Экспорт
Модуль = СоответствиеКоманд.Получить(Команда);
Если Не ЗначениеЗаполнено(Модуль) Тогда
Возврат Новый Структура("Ошибка,Результат", Истина, "Команда");
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ПолучитьСостав(Команда).НайтиСтроки(ОтборКоманды);
Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
Возврат Новый Структура("Ошибка,Результат", Истина, "Метод");
КонецЕсли;
ТекстВыполнения = "";
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ИмяПараметра = НеобходимыйПараметр.Параметр;
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
+ ИмяПараметра
+ " = """
+ СтрЗаменить(ЗначениеПараметра, """", """""")
+ """;";
Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
ТекстВыполнения = ТекстВыполнения + "
|OPI_Инструменты.ЗаменитьУправляющиеПоследовательности(" + ИмяПараметра + ");
|";
КонецЕсли;
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
ТекстВыполнения = ТекстВыполнения + "
|OPI_Инструменты.ЗаменитьУправляющиеПоследовательности(" + ИмяПараметра + ");
|";
КонецЕсли;
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
Возврат ТекстВыполнения;
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
Возврат Новый Структура("Ошибка,Результат", Ложь, ТекстВыполнения);
КонецФункции
Функция ТребуетсяОбработкаУправляющихПоследовательностей(Знач ИмяПараметра, Знач ЗначениеПараметра)
ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
ФайлПараметра = Новый Файл(ЗначениеПараметраСокр);
Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, "{")
И Не СтрНачинаетсяС(ЗначениеПараметраСокр, "[")
И Не ФайлПараметра.Существует()
И Не ИмяПараметра = "Параметр_out";
ЗначениеПараметраСокр = СокрЛП(ЗначениеПараметра);
ФайлПараметра = Новый Файл(ЗначениеПараметраСокр);
Возврат Не СтрНачинаетсяС(ЗначениеПараметраСокр, "{")
И Не СтрНачинаетсяС(ЗначениеПараметраСокр, "[")
И Не ФайлПараметра.Существует()
И Не ИмяПараметра = "Параметр_out";
КонецФункции