Created
January 9, 2018 13:29
-
-
Save VladFrost/6ef97350b1f23744383c23b909d8d5ce to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Использовать v8runner | |
Перем Лог; | |
Процедура ПодготовитьОкружение() | |
Лог = Логирование.ПолучитьЛог("service-agent"); | |
Лог.Отладка("Текущий каталог ""%1""", ТекущийКаталог()); | |
Лог.Отладка("Удаляется каталог ""%1""", ИмяКаталогаСборки()); | |
УдалитьФайлы(ИмяКаталогаСборки()); | |
Лог.Отладка("Создается каталог ""%1""", ИмяКаталогаСборки()); | |
СоздатьКаталог(ИмяКаталогаСборки()); | |
Для Каждого ТекИмя Из ИменаСобираемыхОбработок() Цикл | |
СкопироватьИТрансформироватьФайлыОбработки(ТекИмя, ИмяКаталогаСборки()); | |
КонвертироватьФайлыВОбработки(ТекИмя, ИмяКаталогаСборки()); | |
КонецЦикла | |
КонецПроцедуры | |
Функция ИмяКаталогаСборки() | |
Возврат "build"; | |
КонецФункции | |
Функция ИменаСобираемыхОбработок() | |
Результат = Новый Массив; | |
Результат.Добавить("ПроверкаКонфигурации"); | |
Результат.Добавить("ИдентификаторыМетаданных"); | |
Результат.Добавить("ИсточникОтчетаПотеряДанных"); | |
Возврат Результат; | |
КонецФункции | |
// Копирует файлы обработки из каталога с исходниками в каталог сборки | |
// | |
// Параметры: | |
// ИмяОбработки - Строка - имя обработки без расширения | |
// ИмяКаталога - Строка - имя каталога сборки относительно каталога проекта | |
// | |
Процедура СкопироватьИТрансформироватьФайлыОбработки(ИмяОбработки, ИмяКаталога) | |
Лог.Отладка("Создается каталог ""%1""", КаталогИсходныхФайловОбработки(ИмяОбработки)); | |
СоздатьКаталог(КаталогДляСборкиОбработки(ИмяОбработки, ИмяКаталога)); | |
ТрансформироватьКорневойФайлВыгрузки(ИмяОбработки, ИмяКаталога); | |
НайденныеФайлы = НайтиФайлы(КаталогИсходныхФайловОбработки(ИмяОбработки), ПолучитьМаскуВсеФайлы()); | |
Для Каждого ТекФайл Из НайденныеФайлы Цикл | |
СкопироватьИТрансформироватьРекурсивно(ТекФайл, КаталогДляСборкиОбработки(ИмяОбработки, ИмяКаталога), ИмяОбработки); | |
КонецЦикла; | |
КонецПроцедуры | |
Функция КаталогИсходныхФайловОбработки(ИмяОбработки) | |
КаталогОбработок = ОбъединитьПути("src", "DataProcessors"); | |
Возврат ОбъединитьПути(КаталогОбработок, ИмяОбработки); | |
КонецФункции | |
Функция КаталогДляСборкиОбработки(ИмяОбработки, ИмяКаталога) | |
Возврат ОбъединитьПути(ИмяКаталога, ИмяОбработки); | |
КонецФункции | |
Процедура СкопироватьИТрансформироватьРекурсивно(Знач Файл, Знач Подкаталог, Знач ИмяОбработки) | |
Если Файл.ЭтоКаталог() Тогда | |
Подкаталог = ОбъединитьПути(Подкаталог, Файл.Имя); | |
Лог.Отладка(СтрШаблон("Создается каталог ""%1""", Подкаталог)); | |
СоздатьКаталог(Подкаталог); | |
НайденныеФайлы = НайтиФайлы(Файл.ПолноеИмя, ПолучитьМаскуВсеФайлы()); | |
Для Каждого ТекФайл Из НайденныеФайлы Цикл | |
СкопироватьИТрансформироватьРекурсивно(ТекФайл, Подкаталог, ИмяОбработки); | |
КонецЦикла; | |
Иначе | |
КопироватьТрансформироватьФайл(Файл, Подкаталог); | |
КонецЕсли | |
КонецПроцедуры | |
Процедура ТрансформироватьКорневойФайлВыгрузки(ИмяОбработки, ИмяКаталога) | |
Источник = Новый Файл(СтрШаблон("%1.xml", КаталогИсходныхФайловОбработки(ИмяОбработки))); | |
Назначение = Новый Файл(СтрШаблон("%1.xml", КаталогДляСборкиОбработки(ИмяОбработки, ИмяКаталога))); | |
Лог.Отладка(СтрШаблон("Трансформируется ""%1"" -> ""%2""", Источник.ПолноеИмя, Назначение.ПолноеИмя)); | |
ЧтениеXML = Новый ЧтениеXML; | |
ЧтениеXML.ОткрытьФайл(Источник.ПолноеИмя); | |
ЗаписьXML = Новый ЗаписьXML; | |
ЗаписьXML.ОткрытьФайл(Назначение.ПолноеИмя); | |
ЗаписьXML.ЗаписатьОбъявлениеXML(); | |
Пока ЧтениеXML.Прочитать() Цикл | |
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда | |
Если ЧтениеXML.Имя = "DataProcessor" Тогда | |
ЗаписьXML.ЗаписатьНачалоЭлемента("ExternalDataProcessor"); | |
ИначеЕсли ЧтениеXML.Имя = ИмяКонтейнераВнутренняяИнформация() Тогда | |
ЗаписатьВнутреннююИнформацию(ЧтениеXML, ЗаписьXML, ИмяОбработки); | |
Продолжить; | |
ИначеЕсли ЧтениеXML.Имя = "DefaultForm" Тогда | |
ЗаписатьИмяФормы(ЧтениеXML, ЗаписьXML); | |
Продолжить; | |
ИначеЕсли СледуетИсключитьКонтейнер(ЧтениеXML.Имя) Тогда | |
ПромотатьККонцуЭлемента(ЧтениеXML, ЧтениеXML.Имя); | |
Продолжить; | |
Иначе | |
ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); | |
КонецЕсли; | |
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл | |
Если ЧтениеXML.Имя = "version" И ЧтениеXML.Значение = "2.6" Тогда | |
ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, "2.4"); | |
ИначеЕсли ЧтениеXML.Имя = "uuid" Тогда | |
ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, Новый УникальныйИдентификатор); | |
Иначе | |
ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, ЧтениеXML.Значение); | |
КонецЕсли | |
КонецЦикла; | |
КонецЕсли; | |
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда | |
ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение); | |
КонецЕсли; | |
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
КонецЕсли; | |
КонецЦикла; | |
ЧтениеXML.Закрыть(); | |
ЗаписьXML.Закрыть(); | |
КонецПроцедуры | |
Процедура КопироватьТрансформироватьФайл(Файл, Подкаталог) | |
Если Файл.Расширение = ".xml" Тогда | |
ТрансформироватьФайлФормы(Файл, Подкаталог); | |
Иначе | |
Лог.Отладка(СтрШаблон("Копируется ""%1"" -> ""%2""", Файл.ПолноеИмя, ОбъединитьПути(Подкаталог, Файл.Имя))); | |
КопироватьФайл(Файл.ПолноеИмя, ОбъединитьПути(Подкаталог, Файл.Имя)); | |
КонецЕсли | |
КонецПроцедуры | |
Процедура ТрансформироватьФайлФормы(Файл, Подкаталог) | |
Лог.Отладка(СтрШаблон("Трансформируется ""%1"" -> ""%2""", Файл.ПолноеИмя, ОбъединитьПути(Подкаталог, Файл.Имя))); | |
ЧтениеXML = Новый ЧтениеXML; | |
ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя); | |
ЗаписьXML = Новый ЗаписьXML; | |
ЗаписьXML.ОткрытьФайл(ОбъединитьПути(Подкаталог, Файл.Имя)); | |
ЗаписьXML.ЗаписатьОбъявлениеXML(); | |
Пока ЧтениеXML.Прочитать() Цикл | |
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда | |
Если ЧтениеXML.Имя = "v8:Type" Тогда | |
ЗаписатьСсылкуНаОбработку(ЧтениеXML, ЗаписьXML); | |
Продолжить; | |
Иначе | |
ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); | |
КонецЕсли; | |
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл | |
Если ЧтениеXML.Имя = "version" И ЧтениеXML.Значение = "2.6" Тогда | |
ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, "2.4"); | |
ИначеЕсли ЧтениеXML.Имя = "uuid" Тогда | |
ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, Новый УникальныйИдентификатор); | |
Иначе | |
ЗаписьXML.ЗаписатьАтрибут(ЧтениеXML.Имя, ЧтениеXML.Значение); | |
КонецЕсли | |
КонецЦикла; | |
КонецЕсли; | |
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда | |
ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение); | |
КонецЕсли; | |
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
КонецЕсли; | |
КонецЦикла; | |
ЧтениеXML.Закрыть(); | |
ЗаписьXML.Закрыть(); | |
КонецПроцедуры | |
Процедура ЗаписатьВнутреннююИнформацию(ЧтениеXML, ЗаписьXML, ИмяОбработки) | |
ПромотатьККонцуЭлемента(ЧтениеXML, ИмяКонтейнераВнутренняяИнформация()); | |
ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяКонтейнераВнутренняяИнформация()); | |
ЗаписьXML.ЗаписатьНачалоЭлемента("xr:ContainedObject"); | |
ЗаписьXML.ЗаписатьНачалоЭлемента("xr:ClassId"); | |
ЗаписьXML.ЗаписатьТекст("c3831ec8-d8d5-4f93-8a22-f9bfae07327f"); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
ЗаписьXML.ЗаписатьНачалоЭлемента("xr:ObjectId"); | |
ЗаписьXML.ЗаписатьТекст(Новый УникальныйИдентификатор); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); // "xr:ContainedObject | |
ЗаписьXML.ЗаписатьНачалоЭлемента("xr:GeneratedType"); | |
ЗаписьXML.ЗаписатьАтрибут("name", СтрШаблон("ExternalDataProcessorObject.%1", ИмяОбработки)); | |
ЗаписьXML.ЗаписатьАтрибут("category", "Object"); | |
ЗаписьXML.ЗаписатьНачалоЭлемента("xr:TypeId"); | |
ЗаписьXML.ЗаписатьТекст(Новый УникальныйИдентификатор); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
ЗаписьXML.ЗаписатьНачалоЭлемента("xr:ValueId"); | |
ЗаписьXML.ЗаписатьТекст(Новый УникальныйИдентификатор); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); // xr:GeneratedType | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
КонецПроцедуры | |
Функция ИмяКонтейнераВнутренняяИнформация() | |
Возврат "InternalInfo"; | |
КонецФункции | |
Процедура ЗаписатьИмяФормы(ЧтениеXML, ЗаписьXML) | |
ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); | |
ЧтениеXML.Прочитать(); | |
ЗаписьXML.ЗаписатьТекст(СтрШаблон("External%1", ЧтениеXML.Значение)); | |
ЧтениеXML.Прочитать(); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
КонецПроцедуры | |
Процедура ЗаписатьСсылкуНаОбработку(ЧтениеXML, ЗаписьXML) | |
ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); | |
ЧтениеXML.Прочитать(); | |
Если СтрНачинаетсяС(ЧтениеXML.Значение, "cfg:DataProcessorObject") Тогда | |
ЗаписьXML.ЗаписатьТекст(СтрЗаменить(ЧтениеXML.Значение, "cfg:DataProcessorObject", "cfg:ExternalDataProcessorObject")); | |
Иначе | |
ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение); | |
КонецЕсли; | |
ЧтениеXML.Прочитать(); | |
ЗаписьXML.ЗаписатьКонецЭлемента(); | |
КонецПроцедуры | |
Функция СледуетИсключитьКонтейнер(ИмяЭлемента) | |
Возврат ИмяЭлемента = "UseStandardCommands" | |
Или ИмяЭлемента = "IncludeHelpInContents" | |
Или ИмяЭлемента = "ExtendedPresentation" | |
Или ИмяЭлемента = "Explanation"; | |
КонецФункции | |
Процедура ПромотатьККонцуЭлемента(ЧтениеXML, ИмяЭлемента) | |
Пока ЧтениеXML.Прочитать() Цикл | |
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Тогда | |
Продолжить; | |
КонецЕсли; | |
Если ЧтениеXML.Имя <> ИмяЭлемента Тогда | |
Продолжить; | |
КонецЕсли; | |
Прервать; | |
КонецЦикла; | |
КонецПроцедуры | |
Процедура КонвертироватьФайлыВОбработки(ИмяОбработки, ИмяКаталога) | |
ФайлОбработки = Новый Файл(СтрШаблон("%1.epf", КаталогДляСборкиОбработки(ИмяОбработки, ИмяКаталога))); | |
Лог.Информация("Выполняется сборка ""%1""", ФайлОбработки.Имя); | |
КаталогСборки = Новый Файл(ИмяКаталогаСборки()); | |
Конфигуратор = Новый УправлениеКонфигуратором; | |
Конфигуратор.УстановитьКонтекст(СтрШаблон("/F%1", ОбъединитьПути(КаталогСборки.ПолноеИмя, "ib")), "", ""); | |
ПараметрыЗапуска = Конфигуратор.ПолучитьПараметрыЗапуска(); | |
ПараметрыЗапуска.Добавить( | |
СтрШаблон("/LoadExternalDataProcessorOrReportFromFiles %1.xml %1.epf", | |
КаталогДляСборкиОбработки(ИмяОбработки, ИмяКаталога))); | |
Попытка | |
Конфигуратор.ВыполнитьКоманду(ПараметрыЗапуска); | |
Исключение | |
Сообщить(Конфигуратор.ВыводКоманды()); | |
КонецПопытки; | |
Ожидаем.Что(ФайлОбработки.Существует(), СтрШаблон("Файл ""%1"" должен существовать", ФайлОбработки.ПолноеИмя)).ЭтоИстина(); | |
КонецПроцедуры | |
ПодготовитьОкружение() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment