Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

Скрипты и API

Обсуждение и решение проблем в работе с Eplan.

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


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Скрипты и API

Сообщение ids » 15 апр 2016, 19:24

Просто нужен вывод в специфическом формате - в виде скрипта Lua.


Stas
знаток Eplan
знаток Eplan
Сообщения: 26
Зарегистрирован: 14 май 2014, 11:22
Ф.И.О.: Станиславский Станислав Леонидович

Скрипты и API

Сообщение Stas » 06 июл 2016, 15:07

Доброго времени суток уважаемое сообщество!
Недавно возникла необходимость воспользоваться скриптом опубликованным Satyr-ом в начале этой темы
Satyr писал(а):Источник цитаты
[+] Код
using System.IO;


public class SimpleEventHandler
{
[Start]
[DeclareEventHandler("onActionStart.String.*")]
public long MyEventHandlerFunction2(IEventParameter iEventParameter)
{

try
{
//File.Create(@"C:\События.txt"); ..Создание файла
EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
String strActionName = oEventParameterString.String;
StreamWriter sw;
FileInfo fi = new FileInfo(@"C:\События.txt");
sw = fi.AppendText();
sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
sw.Close();

}

catch (System.InvalidCastException exc)
{

String strExc = exc.Message;

System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");

}



return 0;

}

}


данный скрипт записывает в лог действия которые выполняются EPLAN-ом.
Но к моему сожалению этот скрипт не работает в версии 2.5 (в версии 2.4 работает).
При загрузке данного скрипта появляется сообщение об ошибке Функция 'MyEventHandlerFunction2' привела к возникновению ошибки. Адресат вызова создал исключение.
Подскажите пожалуйста, с чем может быть связана эта ошибка и что нужно изменить что бы этот весьма полезный скрипт работал в версии 2.5 :ges_help:


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Скрипты и API

Сообщение ids » 07 июл 2016, 08:53

Stas писал(а):Источник цитаты Доброго времени суток уважаемое сообщество!
Недавно возникла необходимость воспользоваться скриптом опубликованным Satyr-ом в начале этой темы данный скрипт записывает в лог действия которые выполняются EPLAN-ом.
Но к моему сожалению этот скрипт не работает в версии 2.5 (в версии 2.4 работает).
При загрузке данного скрипта появляется сообщение об ошибке Функция 'MyEventHandlerFunction2' привела к возникновению ошибки. Адресат вызова создал исключение.
Подскажите пожалуйста, с чем может быть связана эта ошибка и что нужно изменить что бы этот весьма полезный скрипт работал в версии 2.5 :ges_help:


Добрый день,

видно в версии 2.5 немного изменили объектную модель, но сам не могу глянуть что не так из-за отсутствии таковой. Предлагаю так - закомментируй вначале все тело функции, проверь, загружается ли он нормально. Далее по одной строчке убирай комментарий и найди строку, которая приводит к ошибке. А потом посмотрим, как ее исправить.


Stas
знаток Eplan
знаток Eplan
Сообщения: 26
Зарегистрирован: 14 май 2014, 11:22
Ф.И.О.: Станиславский Станислав Леонидович

Скрипты и API

Сообщение Stas » 07 июл 2016, 11:54

Всем доброго времени суток!
Следуя Вашему совету, начал разбирать код скрипта и пришел к следующим выводам.
1. Проблема в Win10, а не в Eplan 2.5. Скрипт Satyr-а нормально работает и в версии 2.5 под Win7.
2. При работе с Win10 (насколько я понял) происходят какие то недоразумения с правами доступа и скрипт банально не может что либо писать в файл...

Исходя из вышеописанного решил заменить вывод в txt файл на использование MessageBox.Show

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
      try
      {
         EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
         String strActionName = oEventParameterString.String;
         
         System.Windows.Forms.MessageBox.Show("Now action is " + strActionName);
      }

      catch (System.InvalidCastException exc)
      {
         String strExc = exc.Message;
         System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
      }
      return 0;
   }
}


ids
знаток Eplan
знаток Eplan
Сообщения: 14
Зарегистрирован: 17 сен 2015, 09:25
Ф.И.О.: Иванюк Дмитрий Сергеевич

Скрипты и API

Сообщение ids » 07 июл 2016, 12:43

Добрый день,

да - просто так писать в файл в корне диска С не очень правильно, лучше писать в свой пользовательский каталог. Например, попробуйте так

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

File.Create(@"%userprofile%\Documents\События.txt"); ..Создание файла


Stas
знаток Eplan
знаток Eplan
Сообщения: 26
Зарегистрирован: 14 май 2014, 11:22
Ф.И.О.: Станиславский Станислав Леонидович

Скрипты и API

Сообщение Stas » 07 июл 2016, 13:21

Спасибо. Ваше замечание уместно и оно помогло.
Возникла следующая проблема. Если файл существует, то запись лога начинается без проблем, а если файла нет, то он создается но запись в него не происходит до перезагрузки скрипта.
Попытался создать условие, но результат то же...

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [Start]
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
      if (File.Exists(@"C:\Users\USERNAME\Documents\События.txt"))
      {
         try
         {
            EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
            String strActionName = oEventParameterString.String;
            StreamWriter sw;
            FileInfo fi = new FileInfo(@"C:\Users\USERNAME\Documents\События.txt");
            sw = fi.AppendText();
            sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
            sw.Close();
         }

         catch (System.InvalidCastException exc)
         {

            String strExc = exc.Message;

            System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");

         }
      }
      else
      {
         File.Create(@"C:\Users\USERNAME\Documents\События.txt"); //..Создание файла создавать файл
      }
      return 0;
   }

}


В чем может быть проблема?


Dotarev
знаток Eplan
знаток Eplan
Сообщения: 115
Зарегистрирован: 12 июн 2014, 05:17
Ф.И.О.: Мишкин Иван
Благодарил (а): 11 раз
Поблагодарили: 20 раз

Скрипты и API

Сообщение Dotarev » 07 июл 2016, 13:35

Попробуй так:

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [Start]
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
         try
         {
            if (!File.Exists(@"C:\Users\USERNAME\Documents\События.txt"))
                 File.Create(@"C:\Users\USERNAME\Documents\События.txt"); //..Создание файла создавать файл
            EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
            String strActionName = oEventParameterString.String;
            StreamWriter sw;
            FileInfo fi = new FileInfo(@"C:\Users\USERNAME\Documents\События.txt");
            sw = fi.AppendText();
            sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
            sw.Close();
         }

         catch (System.InvalidCastException exc)
         {
            String strExc = exc.Message;
            System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
         }
      }
     
      return 0;
   }


Stas
знаток Eplan
знаток Eplan
Сообщения: 26
Зарегистрирован: 14 май 2014, 11:22
Ф.И.О.: Станиславский Станислав Леонидович

Скрипты и API

Сообщение Stas » 07 июл 2016, 13:51

Результат аналогичен.
Stas писал(а):Источник цитаты Если файл существует, то запись лога начинается без проблем, а если файла нет, то он создается но запись в него не происходит до перезагрузки скрипта.


Dotarev
знаток Eplan
знаток Eplan
Сообщения: 115
Зарегистрирован: 12 июн 2014, 05:17
Ф.И.О.: Мишкин Иван
Благодарил (а): 11 раз
Поблагодарили: 20 раз

Скрипты и API

Сообщение Dotarev » 07 июл 2016, 14:30

Тогда так:

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

using System.IO;
using System.Text;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;

public class SimpleEventHandler
{
   [Start]
   [DeclareEventHandler("onActionStart.String.*")]
   public long MyEventHandlerFunction2(IEventParameter iEventParameter)
   {
         try
         {
            EventParameterString oEventParameterString = new EventParameterString(iEventParameter);
            String strActionName = oEventParameterString.String;
            StreamWriter sw;
            FileInfo fi = new FileInfo(@"C:\Users\USERNAME\Documents\События.txt");
            if (fi.Exists)
                sw = fi.AppendText();
            else
                sw = fi.CreateText();
            sw.WriteLine("oCLI.Execute(\"{0}\");", strActionName);
            sw.Close();
         }

         catch (System.InvalidCastException exc)
         {
            String strExc = exc.Message;
            System.Windows.Forms.MessageBox.Show("Parameter error: " + strExc, "MyEventHandler");
         }
      }
     
      return 0;
   }


Stas
знаток Eplan
знаток Eplan
Сообщения: 26
Зарегистрирован: 14 май 2014, 11:22
Ф.И.О.: Станиславский Станислав Леонидович

Скрипты и API

Сообщение Stas » 07 июл 2016, 15:46

Ваш вариант работает корректно.
Благодарю покорнейше. :thankyou:


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Скрипты и API

Сообщение limbir » 07 сен 2016, 13:54

Здравствуйте!
Требуется изменить стандартные пути к каталогам Eplan (Настройки > Пользователь > Управление > Каталоги).
Выполняю следующее:

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

Settings settings = new Settings();
string path_projects = Path.Combine(path_data, @"Проекты\Новая папка\");
settings.SetStringSetting("USER.TrDMProject.Masterdata.Pathnames.Projects", path_projects, 0);

При проверке значения свойства с помощью

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

MessageBox.Show(settings.GetStringSetting("USER.TrDMProject.Masterdata.Pathnames.Projects", 0));

непосредственно после выполнения метода SetStringSetting, получаю то, что и планировал:
$(EPLAN_DATA)\Проекты\Новая папка\

И даже после перезапуска Eplan такая проверка показывает, что всё в порядке.
Но стоит только открыть диалоговое окно Настройки > Пользователь > Управление > Каталоги, как свойство сбрасывается на то, что было установлено до этого в этом диалоговом окне.

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 519
Зарегистрирован: 21 сен 2012, 21:45
Ф.И.О.: Воробьев Александр
Поблагодарили: 12 раз
Контактная информация:

Скрипты и API

Сообщение aranea » 07 сен 2016, 14:21

тут напрашивается два пути:
1. после изменения настроек записать в поле "Проекты" окна настроек каталогов тот же путь (XSDMasterDataSettingsPathDlg, 3009) где-то была инфа как обращаться к элементам интерфейса Е по этим идентификаторам
2. до изменения настроек создать новую схему
советую посмотреть тут https://suplanus.de/setuserpaths/

п.с. зачем менять каталог проектов? проекты можно в любом каталоге открывать через Брауз, вот формы и рамки может и был бы смысл, так как вложенные каталоги не катят
Изображение

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

aranea
знаток Eplan
знаток Eplan
Сообщения: 519
Зарегистрирован: 21 сен 2012, 21:45
Ф.И.О.: Воробьев Александр
Поблагодарили: 12 раз
Контактная информация:

Скрипты и API

Сообщение aranea » 07 сен 2016, 16:48

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

        SchemeSetting oSet = new SchemeSetting();
        oSet.Init("USER.ModalDialogs.PathsScheme");
        oSet.SetStringSetting("Projects", path_projects, 0);
        oSet.Set();
Изображение


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Скрипты и API

Сообщение limbir » 08 сен 2016, 03:34

Александр, большое спасибо!
Каталог проектов здесь приведён в качестве примера.


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Скрипты и API

Сообщение limbir » 24 окт 2016, 08:56

Добрый день!
Потребовался очередной совет знатоков API Еплана)
Доступны ли через API диалоговые окна Eplan? Конкретно хотелось бы узнать про "Выбор изделия" из базы данных.
Задача создать на своей форме кнопку выбора изделия, при нажатии на которую, открывается стандартное еплановское диалоговое окно, которое в результате возвращает номер выбранного изделия.

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 890
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Скрипты и API

Сообщение Madwolf » 24 окт 2016, 11:30

Думаю нужно копать в сторону класса MDPartsManagement , сам такое не пробовал делать.


limbir
здесь недавно
здесь недавно
Сообщения: 36
Зарегистрирован: 12 фев 2014, 07:13
Ф.И.О.: Сергей
Благодарил (а): 1 раз

Скрипты и API

Сообщение limbir » 24 окт 2016, 11:43

Спасибо, буду искать в том направлении. Как разберусь, сообщу о результате.

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

Madwolf
знаток Eplan
знаток Eplan
Сообщения: 890
Зарегистрирован: 17 окт 2012, 10:24
Ф.И.О.: Виталий
Благодарил (а): 4 раза
Поблагодарили: 15 раз

Скрипты и API

Сообщение Madwolf » 03 ноя 2016, 12:55

limbir писал(а):Источник цитаты Спасибо, буду искать в том направлении. Как разберусь, сообщу о результате.

Накопали что-нибудь?


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



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя