1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-12-12 11:15:07 +02:00
OpenIntegrations/cli/tools/Modules/Дженва.os

143 lines
6.1 KiB
Plaintext
Raw Normal View History

2024-04-09 15:35:11 +02:00
Перем МаксимальнаяВложенность;
#Область СлужебныйПрограммныйИнтерфейс
Процедура ЗаполнитьПараметрыОкружения(Знач JSON, Знач МаксимальныйУровеньВложенности = 0, Знач Префикс = "jenva") Экспорт
МаксимальнаяВложенность = МаксимальныйУровеньВложенности;
Префикс = Префикс + "_";
Если ТипЗнч(JSON) = Тип("Строка") Тогда
НормализоватьТекстовыйВвод(JSON);
КонецЕсли;
ПолучитьКоллекцию(JSON);
Если Не ТипЗнч(JSON) = Тип("Соответствие") Тогда
ВызватьИсключение "Ошибка преобразовани данных параметра JSON";
КонецЕсли;
ПрисвоитьЗначенияРекурсивно(JSON, Префикс);
КонецПроцедуры
#КонецОбласти
Процедура ПрисвоитьЗначенияРекурсивно(Знач JSON, Знач Префикс, Знач ТекущаяВложенность = 1)
Для Каждого Пара Из JSON Цикл
Значение = Пара.Значение;
Ключ = Строка(Пара.Ключ);
2024-04-09 16:15:17 +02:00
ЭтоКоллекция = ТипЗнч(Значение) = Тип("Соответствие") Или ТипЗнч(Значение) = Тип("Структура");
2024-04-09 15:35:11 +02:00
СледующаяВложенность = ТекущаяВложенность + 1;
СледующаяВложенностьДоступна = МаксимальнаяВложенность = 0 Или СледующаяВложенность <= МаксимальнаяВложенность;
Если Не ЭтоКоллекция Или Не СледующаяВложенностьДоступна Тогда
ПеременнаяСреды = Префикс + Ключ;
ПолучитьСтроку(Значение);
2024-04-09 18:26:26 +02:00
УстановитьПеременнуюСреды(ПеременнаяСреды, Значение, РасположениеПеременнойСреды.Пользователь);
2024-04-09 17:49:33 +02:00
Сообщить("$" + ПеременнаяСреды + " = " + Значение, СтатусСообщения.Информация);
2024-04-09 15:35:11 +02:00
Иначе
НовыйПрефикс = Префикс + Ключ + "_";
ПрисвоитьЗначенияРекурсивно(Значение, НовыйПрефикс, СледующаяВложенность);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПолучитьСтроку(Значение)
ЭтоКоллекция = ТипЗнч(Значение) = Тип("Соответствие") Или ТипЗнч(Значение) = Тип("Структура") Или ТипЗнч(Значение) = Тип("Массив");
Если ЭтоКоллекция Тогда
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Windows
, " "
, Истина
, Истина
, Ложь
, Ложь
, Ложь
, Ложь);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Значение);
Значение = ЗаписьJSON.Закрыть();
Иначе
Значение = Строка(Значение);
КонецЕсли;
КонецПроцедуры
Процедура ПолучитьКоллекцию(Значение)
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
ИсходноеЗначение = Значение;
Если ЭтоКоллекция(Значение) Тогда
Возврат;
Иначе
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе
Значение = Строка(Значение);
КонецЕсли;
Файл = Новый Файл(Значение);
ЧтениеJSON = Новый ЧтениеJSON;
Если Файл.Существует() Тогда
ЧтениеJSON.ОткрытьФайл(Значение);
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
ИВФ = ПолучитьИмяВременногоФайла();
КопироватьФайл(Значение, ИВФ);
ЧтениеJSON.ОткрытьФайл(ИВФ);
ЧтениеJSON.Прочитать();
УдалитьФайлы(ИВФ);
Иначе
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
КонецЕсли;
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
ЧтениеJSON.Закрыть();
КонецЕсли;
КонецПроцедуры
Процедура НормализоватьТекстовыйВвод(Знач Текст)
НачальнаяФигурная = СтрНайти(Текст, "{");
ПоследняяФигурная = СтрНайти(Текст, "}", НаправлениеПоиска.СКонца);
2024-04-09 15:53:50 +02:00
Если НачальнаяФигурная = 0 Или ПоследняяФигурная = 0 Тогда
2024-04-09 15:35:11 +02:00
Возврат;
КонецЕсли;
2024-04-09 15:53:50 +02:00
Текст = Сред(Текст, НачальнаяФигурная, ПоследняяФигурная - НачальнаяФигурная + 1);
2024-04-09 15:35:11 +02:00
КонецПроцедуры
Функция ЭтоКоллекция(Знач Значение)
Возврат ТипЗнч(Значение) = Тип("Массив")
Или ТипЗнч(Значение) = Тип("Структура")
Или ТипЗнч(Значение) = Тип("Соответствие");
2024-04-09 16:26:20 +02:00
КонецФункции