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

187 lines
7.8 KiB
Plaintext
Raw Normal View History

2024-03-19 13:56:38 +03:00
#Использовать cmdline
#Использовать oint
2024-03-22 10:40:03 +03:00
#Использовать "../../tools"
#Использовать "../../help"
2024-03-19 13:56:38 +03:00
2024-03-22 10:40:03 +03:00
Перем ОбъектОПИ;
Перем Парсер;
2024-03-21 08:48:40 +03:00
2024-03-22 10:40:03 +03:00
Процедура ПриСозданииОбъекта()
ОбъектОПИ = Новый СвязьОПИ;
КонецПроцедуры
2024-03-21 08:48:40 +03:00
#Область СлужебныеПроцедурыИФункции
#Область Основные
2024-03-19 13:56:38 +03:00
Процедура ОсновнойОбработчик()
Парсер = Новый ПарсерАргументовКоманднойСтроки();
2024-03-22 10:40:03 +03:00
Для Каждого Команда Из ОбъектОПИ.ПолучитьИмяМодуля() Цикл
СформироватьКоманду(Команда.Ключ, Парсер);
КонецЦикла;
2024-03-22 10:40:03 +03:00
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
2024-03-19 13:56:38 +03:00
ТекущаяКоманда = Результат["Команда"];
Если ТекущаяКоманда = Неопределено Тогда
2024-03-22 10:40:03 +03:00
Справка.ВывестиНачальнуюСтраницу();
2024-03-19 13:56:38 +03:00
Иначе
ВыполнитьОбработкуКоманды(Результат);
КонецЕсли;
КонецПроцедуры
Процедура СформироватьКоманду(Знач Имя, Парсер)
2024-03-19 13:56:38 +03:00
Команда = Парсер.ОписаниеКоманды(Имя);
2024-03-22 10:40:03 +03:00
ТаблицаПараметров = ОбъектОПИ.ПолучитьТаблицуПараметров(Имя).Скопировать();
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
2024-03-19 13:56:38 +03:00
ДобавитьПараметрыКоманды(Парсер, Команда, ТаблицаПараметров);
2024-03-19 13:56:38 +03:00
Парсер.ДобавитьКоманду(Команда);
2024-03-19 13:56:38 +03:00
КонецПроцедуры
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
ТекущаяКоманда = Данные["Команда"];
Вывод = "";
Попытка
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Данные);
ОбработатьВыводJSON(Вывод);
2024-03-19 13:56:38 +03:00
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Символы.ПС + Вывод + Символы.ПС, СтатусСообщения.Внимание);
2024-03-19 13:56:38 +03:00
КонецЕсли;
Исключение
Если ЗначениеЗаполнено(Вывод) Тогда
Сообщить(Вывод);
Иначе
Сообщить(ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
Сообщить(Символы.ПС);
КонецЕсли;
КонецПопытки;
КонецПроцедуры
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Данные)
2024-03-22 10:40:03 +03:00
Модуль = ОбъектОПИ.ПолучитьИмяМодуля(Команда);
2024-03-19 13:56:38 +03:00
Параметры = Данные["ЗначенияПараметров"];
Метод = Параметры["Метод"];
Ответ = "<пустой возврат>";
2024-03-22 10:40:03 +03:00
ТаблицаПараметров = ОбъектОПИ.ПолучитьТаблицуПараметров(Команда);
2024-03-19 13:56:38 +03:00
Если Не ЗначениеЗаполнено(Метод) Тогда
2024-03-22 10:40:03 +03:00
Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров);
2024-03-19 13:56:38 +03:00
Возврат "";
КонецЕсли;
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
Если Параметры.Количество() = 1 Тогда
2024-03-22 10:40:03 +03:00
Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода);
2024-03-19 13:56:38 +03:00
Возврат "";
КонецЕсли;
2024-03-22 10:40:03 +03:00
ТекстВыполнения = СформироватьСтрокуВызоваМетода(Параметры, ПараметрыМетода, Модуль, Метод);
Выполнить(ТекстВыполнения);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область Вспомогательные
Процедура ДобавитьПараметрыКоманды(Парсер, Команда, Знач ТаблицаПараметров);
ТаблицаПараметров.Свернуть("Параметр");
МассивПараметров = ТаблицаПараметров.ВыгрузитьКолонку("Параметр");
Для Каждого Параметр Из МассивПараметров Цикл
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
КонецЦикла;
КонецПроцедуры
2024-03-22 10:40:03 +03:00
Процедура ОбработатьВыводJSON(Вывод)
Если ТипЗнч(Вывод) = Тип("Структура")
Или ТипЗнч(Вывод) = Тип("Соответствие")
Или ТипЗнч(Вывод) = Тип("Массив") Тогда
Вывод = OPI_Инструменты.JSONСтрокой(Вывод);
КонецЕсли;
КонецПроцедуры
2024-03-22 10:40:03 +03:00
Функция СформироватьСтрокуВызоваМетода(Знач ПереданныеПараметры, Знач ПараметрыМетода, Знач Модуль, Знач Метод)
ТекстВыполнения = "";
СтрокаВызова = Модуль + "." + Метод + "(";
Счетчик = 0;
2024-03-19 13:56:38 +03:00
Для Каждого НеобходимыйПараметр Из ПараметрыМетода Цикл
ЗначениеПараметра = ПереданныеПараметры.Получить(НеобходимыйПараметр.Параметр);
2024-03-19 13:56:38 +03:00
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
2024-03-22 10:40:03 +03:00
ИмяПараметра = "Параметра" + Строка(Счетчик);
2024-03-19 13:56:38 +03:00
ТекстВыполнения = ТекстВыполнения
+ Символы.ПС
2024-03-22 10:40:03 +03:00
+ ИмяПараметра
+ " = ОбработатьВходящийПараметр("""
2024-03-19 13:56:38 +03:00
+ ЗначениеПараметра
+ """, """
+ НеобходимыйПараметр.ВариантОбработки
+ """);";
2024-03-19 13:56:38 +03:00
2024-03-22 10:40:03 +03:00
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
Счетчик = Счетчик + 1;
2024-03-19 13:56:38 +03:00
Иначе
СтрокаВызова = СтрокаВызова + " , ";
КонецЕсли;
КонецЦикла;
2024-03-22 10:40:03 +03:00
ЛишниеСимволы = 2;
СтрокаВызова = Лев(СтрокаВызова, СтрДлина(СтрокаВызова) - ЛишниеСимволы);
СтрокаВызова = СтрокаВызова + ");";
СтрокаВызова = "Ответ = " + СтрокаВызова;
ТекстВыполнения = ТекстВыполнения + Символы.ПС + СтрокаВызова;
2024-03-22 10:40:03 +03:00
Возврат ТекстВыполнения;
2024-03-21 14:10:44 +03:00
КонецФункции
#КонецОбласти
#КонецОбласти
2024-03-19 13:56:38 +03:00
Попытка
2024-03-22 10:40:03 +03:00
ПриСозданииОбъекта();
2024-03-19 13:56:38 +03:00
ОсновнойОбработчик();
Исключение
Сообщить(Символы.ПС + "!!! ОШИБКА: Проверьте корректность введенных данных" + Символы.ПС, СтатусСообщения.ОченьВажное);
Сообщить(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + Символы.ПС, СтатусСообщения.Важное);
КонецПопытки;