Skip to content

Commit

Permalink
Добавил возможность вывода .xml-диаграммы в draw.io offline (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
thvvmas committed Aug 24, 2021
1 parent 76d4f0b commit 9379efc
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 12 deletions.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,17 @@

Попытка
ЗаписьXML.Закрыть();

ЧтениеТекста = Новый ТекстовыйДокумент;
ЧтениеТекста.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
// Убираем объявление XML
ЧтениеТекста.УдалитьСтроку(1);

ТекстДокумента = ЧтениеТекста.ПолучитьТекст();
ЗаписьТекста = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
ЗаписьТекста.Записать(ТекстДокумента);
ЗаписьТекста.Закрыть();

ПоказатьОповещениеПользователя("Файл успешно записан");
Исключение
Сообщить("Файл не сохранен по причине: " + ОписаниеОшибки());
Expand Down Expand Up @@ -292,7 +303,40 @@
&НаКлиенте
Процедура ЭкспортироватьВDrawIO(Команда)

XMLСтрока = СформироватьERДиаграммуВФайлXML(Истина);

Если ПустаяСтрока(XMLСтрока) Тогда
Возврат;
КонецЕсли;

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");

ЗаписьXML = Новый ЗаписьXML;
ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла, ПараметрыЗаписиXML);

ЗаписьXML.ЗаписатьБезОбработки(XMLСтрока);

ЗаписьXML.Закрыть();

ЧтениеТекста = Новый ТекстовыйДокумент;
ЧтениеТекста.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8);
// Убираем объявление XML
ЧтениеТекста.УдалитьСтроку(1);

ТекстДокумента = ЧтениеТекста.ПолучитьТекст();
ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8);
ЗаписьТекста.Записать(ТекстДокумента);
ЗаписьТекста.Закрыть();

КомандаСтрокой = "draw.io -f xml -u " + ИмяВременногоФайла;
КомандаСистемы(КомандаСтрокой);

Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение

КонецПопытки;

КонецПроцедуры

Expand Down Expand Up @@ -1711,24 +1755,26 @@
#Область РаботаСXML

&НаСервере
Функция СформироватьERДиаграммуВФайлXML()
Функция СформироватьERДиаграммуВФайлXML(OfflineVersion = Ложь)

ИдентификаторЭлемента = 0;

ПараметрыФайла = ПолучитьОбщиеПараметрыФайла(OfflineVersion);

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("mxfile");
ЗаписьXML.ЗаписатьАтрибут("host" , "app.diagrams.net");
ЗаписьXML.ЗаписатьАтрибут("host" , ПараметрыФайла.host);
ЗаписьXML.ЗаписатьАтрибут("modified", ПолучитьДатуВМиллисекундах(ТекущаяДатаСеанса()));
ЗаписьXML.ЗаписатьАтрибут("agent" , "1C: Enterprise");
ЗаписьXML.ЗаписатьАтрибут("version" , "14.9.3");
ЗаписьXML.ЗаписатьАтрибут("version" , ПараметрыФайла.version);
ЗаписьXML.ЗаписатьАтрибут("type" , "device");

ЗаписьXML.ЗаписатьНачалоЭлемента("diagram");
ЗаписьXML.ЗаписатьАтрибут("id", "1");
ЗаписьXML.ЗаписатьАтрибут("name", "Page-1");
ЗаписьXML.ЗаписатьАтрибут("name", ПараметрыФайла.name);

ЗаписьXML.ЗаписатьНачалоЭлемента("mxGraphModel");
ЗаписьXML.ЗаписатьАтрибут("dx" , "946");
Expand Down Expand Up @@ -2412,13 +2458,13 @@
КоординатыПриемника.Вставить("y", YПриемникаСВысотойСтрок);

ЗаписьXML.ЗаписатьНачалоЭлемента("mxCell");
ЗаписьXML.ЗаписатьАтрибут("id" , Строка(ИдентификаторЭлемента));
ЗаписьXML.ЗаписатьАтрибут("id" , Формат(ИдентификаторЭлемента, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("value" , "");
ЗаписьXML.ЗаписатьАтрибут("style" , СтильСвязей);
ЗаписьXML.ЗаписатьАтрибут("edge" , "1");
ЗаписьXML.ЗаписатьАтрибут("parent" , "1");
ЗаписьXML.ЗаписатьАтрибут("source" , Строка(ЭлементКонтейнер.id));
ЗаписьXML.ЗаписатьАтрибут("target" , Строка(ЭлементТаблица.id));
ЗаписьXML.ЗаписатьАтрибут("source" , Формат(ЭлементКонтейнер.id, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("target" , Формат(ЭлементТаблица.id, "ЧГ="));

ЗаписьXML.ЗаписатьНачалоЭлемента("mxGeometry");
ЗаписьXML.ЗаписатьАтрибут("width" , "100");
Expand All @@ -2427,14 +2473,14 @@
ЗаписьXML.ЗаписатьАтрибут("as" , "geometry");

ЗаписьXML.ЗаписатьНачалоЭлемента("mxPoint");
ЗаписьXML.ЗаписатьАтрибут("x" , Строка(КоординатыИсточника.x));
ЗаписьXML.ЗаписатьАтрибут("y" , Строка(КоординатыИсточника.y));
ЗаписьXML.ЗаписатьАтрибут("x" , Формат(КоординатыИсточника.x, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("y" , Формат(КоординатыИсточника.y, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("as" , "sourcePoint");
ЗаписьXML.ЗаписатьКонецЭлемента(); // mxPoint

ЗаписьXML.ЗаписатьНачалоЭлемента("mxPoint");
ЗаписьXML.ЗаписатьАтрибут("x" , Строка(КоординатыПриемника.x));
ЗаписьXML.ЗаписатьАтрибут("y" , Строка(КоординатыПриемника.y));
ЗаписьXML.ЗаписатьАтрибут("x" , Формат(КоординатыПриемника.x, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("y" , Формат(КоординатыПриемника.y, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("as" , "targetPoint");
ЗаписьXML.ЗаписатьКонецЭлемента(); // mxPoint

Expand All @@ -2452,7 +2498,7 @@
Для Каждого ЭлементКВыводу Из ТаблицаЭлементов Цикл

ЗаписьXML.ЗаписатьНачалоЭлемента("mxCell");
ЗаписьXML.ЗаписатьАтрибут("id" , Строка(ЭлементКВыводу.id));
ЗаписьXML.ЗаписатьАтрибут("id" , Формат(ЭлементКВыводу.id, "ЧГ="));
ЗаписьXML.ЗаписатьАтрибут("value" , ЭлементКВыводу.value);
ЗаписьXML.ЗаписатьАтрибут("style" , ЭлементКВыводу.style);

Expand Down Expand Up @@ -2501,6 +2547,24 @@

#Область Прочее

Функция ПолучитьОбщиеПараметрыФайла(OfflineVersion)

СтруктураПараметров = Новый Структура;

СтруктураПараметров.Вставить("version", "14.9.6");

Если OfflineVersion Тогда
СтруктураПараметров.Вставить("host", "Electron");
СтруктураПараметров.Вставить("name", "Страница 1");
Иначе
СтруктураПараметров.Вставить("host", "app.diagrams.net");
СтруктураПараметров.Вставить("name", "Page-1");
КонецЕсли;

Возврат СтруктураПараметров;

КонецФункции

&НаСервере
Функция ПодготовитьТаблицуДляПоказаСвязейОдногоЭлементаМетаданных(ОбъектМетаданных, ИмяРодителя)

Expand Down

0 comments on commit 9379efc

Please sign in to comment.