1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Запись Данных в Eplan из сценария

Сценарии / Модули API

Модератор: специалисты Eplan

Ответить
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

Попытался записывать XML в Eplan при помощи команды XMActionDCImport.

если путь к проекту содержит кириллицу, то команда не работает. Eplan выдаёт сообщение "Указанное имя проекта отсутствует!".
если использую латиницу, то всё работает.

Пробовал перекодировку utf16 в utf8 - не помогло.

Eplan 2.6 сборка 10395

string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPathUtf8 + " /DataConfigurationFile:c:\\Testing\\Connections.xml";
oCLI.Execute(sCommXMLImport);

Подскажите, поддерживает ли eplan кириллицу?
Eplan 2.6 сборка 10395
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Запись Данных в Eplan из сценария

Сообщение aranea »

дайте полный текст скрипта, sProjectPathUtf8 чему равно?
Изображение
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

Код: Выделить всё

public class RegisterScriptMenu
    {
        private CommandLineInterpreter oCLI = new CommandLineInterpreter();
        // командная строка экспорта XML файла из Eplan 
        private string sCommXMLExport = "XMExportConnectionsAction /ConfigScheme:Connections /CompleteProject:1 /Language:ru_RU /Destination:c:\\Testing\\Connections.xml /ExecutionMode:0";

        [DeclareAction("MyScriptActionWithMenu")]
        public void MyFunctionAsAction()
        {
            new Decider().Decide(EnumDecisionType.eOkDecision, "MyFunctionAsAction was called!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
            
                // Экcпорт соединений из Eplan
                oCLI.Execute(sCommXMLExport);
                new Decider().Decide(EnumDecisionType.eOkDecision, "Export complete!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
                // читаю XML файл
                XmlDocument conInXML = new XmlDocument();
                String FileInXML = "c:\\Testing\\Connections.xml";
                conInXML.Load(FileInXML);
                //читаю путь к проекту
                string sProjectPath = "";
                XmlNodeList ProjectPathNode = conInXML.GetElementsByTagName("EplanPxfRoot");
                XmlNode ProjectRoot = conInXML.DocumentElement;

                foreach (XmlNode ProjectNode in ProjectPathNode)
                {

                    sProjectPath = ProjectNode.Attributes["SourceProject"].Value.ToString();

                }
          
              new Decider().Decide(EnumDecisionType.eOkDecision, sProjectPath, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);


            // Импорт соединений в Eplan
            // командная строка импорта XML файла в Eplan
            //Подготовка sProjectPath
            string sProjectPathUtf8= Utf16ToUtf.Utf16ToUtf8(sProjectPath);
            
            // выводим результат перекодировки
            new Decider().Decide(EnumDecisionType.eOkDecision, sProjectPathUtf8, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);

            string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPathUtf8 + " /DataConfigurationFile:c:\\Testing\\Connections.xml";
                oCLI.Execute(sCommXMLImport);
                new Decider().Decide(EnumDecisionType.eOkDecision, sCommXMLImport, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
            
                // Импорт соединений в Eplan
            oCLI.Execute(sCommXMLImport);
            new Decider().Decide(EnumDecisionType.eOkDecision, "Import complete!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
            return;
        }

        [DeclareMenu]
        public void MenuFunction()
        {
            Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
            oMenu.AddMenuItem("Connections", "MyScriptActionWithMenu");
        }
    }

    public class Utf16ToUtf
    {

        public static string Utf16ToUtf8(string utf16String)
        {
            /**************************************************************
             * Every .NET string will store text with the UTF16 encoding, *
             * known as Encoding.Unicode. Other encodings may exist as    *
             * Byte-Array or incorrectly stored with the UTF16 encoding.  *
             *                                                            *
             * UTF8 = 1 bytes per char                                    *
             *    ["100" for the ansi 'd']                                *
             *    ["206" and "186" for the russian 'κ']                   *
             *                                                            *
             * UTF16 = 2 bytes per char                                   *
             *    ["100, 0" for the ansi 'd']                             *
             *    ["186, 3" for the russian 'κ']                          *
             *                                                            *
             * UTF8 inside UTF16                                          *
             *    ["100, 0" for the ansi 'd']                             *
             *    ["206, 0" and "186, 0" for the russian 'κ']             *
             *                                                            *
             * We can use the convert encoding function to convert an     *
             * UTF16 Byte-Array to an UTF8 Byte-Array. When we use UTF8   *
             * encoding to string method now, we will get a UTF16 string. *
             *                                                            *
             * So we imitate UTF16 by filling the second byte of a char   *
             * with a 0 byte (binary 0) while creating the string.        *
             **************************************************************/

            // Storage for the UTF8 string
            string utf8String = String.Empty;

            // Get UTF16 bytes and convert UTF16 bytes to UTF8 bytes
            byte[] utf16Bytes = Encoding.Unicode.GetBytes(utf16String);
            byte[] utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, utf16Bytes);

            // Fill UTF8 bytes inside UTF8 string
            for (int i = 0; i < utf8Bytes.Length; i++)
            {
                // Because char always saves 2 bytes, fill char with 0
                byte[] utf8Container = new byte[2] { utf8Bytes[i], 0 };
                utf8String += BitConverter.ToChar(utf8Container, 0);
            }

            // Return UTF8
            return utf8String;
        }
    }
Последний раз редактировалось aranea 20 сен 2018, 17:56, всего редактировалось 1 раз.
Причина: для кода используйте тег [code][/code]
Eplan 2.6 сборка 10395
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Запись Данных в Eplan из сценария

Сообщение aranea »

чему в вашем случае равна sProjectPath?))
Изображение
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

C:\Users\Public\EPLAN\Data\Проекты\Company name\Сборный проект.elk - до кодировки.

После кодировки вместо русских букв кракозябры.

Для проверки использовал код, который дал Satyr. В окошко вводил команду
XMActionDCImport /ProjectLink:C:\\Users\\Public\\EPLAN\\Data\\Проекты\\Company name\\Сборный проект.elk /DataConfigurationFile:c:\\Testing\\Connections.xml
Получил такое же сообщение
Eplan 2.6 сборка 10395

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Запись Данных в Eplan из сценария

Сообщение Madwolf »

А двойные слэши зачем? Это имеет смысл если строка в студии пишется для компилятора, т.к. это литерал, для вызова они не нужны.
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

Попробовал без двойных слешей - результат аналогичный. Если не использовать кириллицу, то работает.
Eplan 2.6 сборка 10395

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 1457
Зарегистрирован: 17 окт 2012, 11:24
Имя: Виталий
Страна: Беларусь
город/регион: Минск
Благодарил (а): 61 раз
Поблагодарили: 182 раза

Запись Данных в Eplan из сценария

Сообщение Madwolf »

Возможно это баг 2.6, помню не мог импортировать макрос, если путь содержал кириллицу.

MVekb
знаток Eplan
знаток Eplan
Сообщения: 304
Зарегистрирован: 07 окт 2016, 07:31
Имя: Михаил
Страна: Россия
город/регион: Екатеринбург
Благодарил (а): 133 раза
Поблагодарили: 89 раз

Запись Данных в Eplan из сценария

Сообщение MVekb »

Madwolf писал(а): 30 сен 2018, 17:28 Возможно это баг 2.6
Тогда Александру остаётся попробовать установить HF4 для Еплан 2.6, номер сборки станет 10713
Eplan 2.6 HF4
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

Проблему решил. Не должно быть пробелов в пути. В моём случае это Company<пробел>Name. Тут парсер функции видел конец строки и сообщал, что пути такого нет.

Всем :thankyou:

Отправлено спустя 30 минут 52 секунды:
Итоговый скрипт

Имя проекта не должно содержать пробелов
Имя папки не должно содержать пробелов
На вашем диске должна присутствовать папка C:\Testing


Код: Выделить всё

using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Eplan.EplApi.Gui;

namespace XmlConnection
{
    public class RegisterScriptMenu
    {
        private CommandLineInterpreter oCLI = new CommandLineInterpreter();
        // командная строка экспорта XML файла из Eplan 
        private string sCommXMLExport = "XMExportConnectionsAction /ConfigScheme:Connections /CompleteProject:1 /Language:ru_RU /Destination:c:\\Testing\\Connections.xml /ExecutionMode:0";

        [DeclareAction("MyScriptActionWithMenu")]
        public void MyFunctionAsAction()
        {
            new Decider().Decide(EnumDecisionType.eOkDecision, "MyFunctionAsAction was called!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
            
                // Экcпорт соединений из Eplan
                oCLI.Execute(sCommXMLExport);
                new Decider().Decide(EnumDecisionType.eOkDecision, "Export complete!", "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
                // читаю XML файл
                XmlDocument conInXML = new XmlDocument();
                String FileInXML = "c:\\Testing\\Connections.xml";
                conInXML.Load(FileInXML);
                //читаю путь к проекту
                string sProjectPath = "";
                XmlNodeList ProjectPathNode = conInXML.GetElementsByTagName("EplanPxfRoot");
                XmlNode ProjectRoot = conInXML.DocumentElement;

                foreach (XmlNode ProjectNode in ProjectPathNode)
                {

                    sProjectPath = ProjectNode.Attributes["SourceProject"].Value.ToString();

                }
          
              new Decider().Decide(EnumDecisionType.eOkDecision, sProjectPath, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);


            // Импорт соединений в Eplan
            // командная строка импорта XML файла в Eplan
          
            
		// Импорт соединений в Eplan
            
            string sCommXMLImport = "XMActionDCImport /ProjectLink:" + sProjectPath + " /DataConfigurationFile:c:\\Testing\\Connections.edc";
                oCLI.Execute(sCommXMLImport);
                new Decider().Decide(EnumDecisionType.eOkDecision, sCommXMLImport, "RegisterScriptMenu", EnumDecisionReturn.eOK, EnumDecisionReturn.eOK);
            
                
            
            return;
        }

        [DeclareMenu]
        public void MenuFunction()
        {
            Eplan.EplApi.Gui.Menu oMenu = new Eplan.EplApi.Gui.Menu();
            oMenu.AddMenuItem("Connections", "MyScriptActionWithMenu");
        }
    }

    
}
    
Последний раз редактировалось Alexander_Pavlov 01 окт 2018, 18:31, всего редактировалось 1 раз.
Eplan 2.6 сборка 10395
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Запись Данных в Eplan из сценария

Сообщение aranea »

Alexander_Pavlov, опишите кратенько, пожалуйста, назначение скрипта и где смотреть результат

зы. зачем 2 раза делать oCLI.Execute(sCommXMLImport); (48 и 52 строка)?
Изображение
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

Это заготовка для дальнейших проектов. Руководство не хочет покупать лицензию API вот и выкручиваюсь).

:ges_slap: Дублирование пропустил, спасибо. Поправлю код.
Eplan 2.6 сборка 10395
Аватара пользователя

Автор темы
Alexander_Pavlov
знаток Eplan
знаток Eplan
Сообщения: 97
Зарегистрирован: 09 апр 2014, 09:55
Имя: Александр Павлов
Страна: РФ
город/регион: Санкт Петербург
Благодарил (а): 12 раз
Поблагодарили: 6 раз

Запись Данных в Eplan из сценария

Сообщение Alexander_Pavlov »

Мне тут подсказали. Работает и с пробелами, если путь заключить в двойные кавычки.
Eplan 2.6 сборка 10395
Ответить

Вернуться в «Eplan API»