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

Скрипты и API

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

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

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

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 179 раз
Поблагодарили: 368 раз

Автоматическая нумерация страниц

Сообщение AGorskiy »

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

// © [email protected] 
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Base;
using Eplan.EplApi.HEServices;
using System;
using System.Collections.Generic;

namespace Bolapansoft.EplanAddin {
    /// <summary>
    /// Нумерация страниц тома (томов). Выделить можно любую страницу проекта или несколько проектов сразу.
    /// </summary>
    class ActionNumberPages : IEplAction {
        public bool OnRegister(ref string Name, ref int Ordinal) {
            // Имя для регистрации в системе
            Name = "NimberPagesInProperty11031";
            Ordinal = 21;
            return true; ;
        }
        public bool Execute(ActionCallingContext oActionCallingContext) {
            SelectionSet set = new SelectionSet();
            var projects = set.SelectedProjects;
            if (projects == null || projects.Length == 0)
                return false;
            int countedPages = 0;
            foreach (var project in projects) {
                try {
                    project.LockObject();
                    countedPages += NumberPages(project);
                }
                catch (Exception) {
                }
                finally {
                    project.Dispose();
                }
            }
            return countedPages>0;
        }

        private static int NumberPages(Eplan.EplApi.DataModel.Project project) {
            int countedPages = 0;
            // Если в проекте несколько томов, каждый нумеруем отдельно.
            Dictionary<string, int> counters = new Dictionary<string, int>();
            var allPages = project.Pages;
            foreach (var page in allPages) {

                try {
                    // В данном скрипте предполагается, что признаком тома в структуре страницы
                    // является <1160> "Определённая пользователем структура" (DESIGNATION_USERDEFINED)
                    string udfKey = page.Properties.DESIGNATION_USERDEFINED;
                    int counter = RestoreCounter(counters, udfKey);
                    MultiLangString pageNumber = new MultiLangString();
                    pageNumber.AddString(ISOCode.Language.L___, (++counter).ToString());
                    page.LockObject();
                    // Запоминаем номер страницы в <11031> Дополнительное поле страницы.
                    page.Properties.PAGE_ADDITIONALPAGE = pageNumber;
                    pageNumber.Dispose();
                    ++countedPages;
                    StoreCounter(counters, udfKey, counter);
                }
                catch (Exception) {
                    
                    throw;
                }
                finally {
                    page.Dispose();
                }
            }
            return countedPages;
        }

        private static void StoreCounter(Dictionary<string, int> counters, string udfKey, int value) {
            counters[udfKey] = value;
        }

        private static int RestoreCounter(Dictionary<string, int> counters, string udfKey) {
            if (counters.ContainsKey(udfKey)) {
                return counters[udfKey];
            }
            else
                return 0;
        }

        public void GetActionProperties(ref ActionProperties actionProperties) {
           ;
        }

    }
}
viewtopic.php?p=64744#p64744 Автор: Dotarev
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.

KAN
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 17 июл 2015, 15:06
Имя: Кутузов Александр
Страна: Россия
город/регион: Белгород

Скрипты и API

Сообщение KAN »

Добрый день! Наверное у многих работающих с EPLAN рано или поздно появляется желание облегчить свой ручной труд и что-нибудь автоматизировать. Вот видимо и мое время пришло. Не раз была прочитана данная ветка, запущены и проверены многие примеры
в частности на странице viewtopic.php?f=206&t=2919&p=60616&hili ... ue1#p60566 от Stas (часть кода):
oPropValue1 = so.Properties[20201, 2]; //Вычитывание свойства <20201 2>
oPropValue2 = so.Properties[20201, 3]; //Вычитывание свойства <20201 3>
so.Properties[20901, 1] = oPropValue1; //Запись свойства <20201 2> в Доп. поле <20901 1>
so.Properties[20901, 2] = oPropValue2; //Запись свойства <20201 2> в Доп. поле <20901 2>
все работает. В качестве эксперимента хотелось изменить ОУ программно, но при попытке заменить "so.Properties[20901, 1]" на "so.Properties[20010, 1]"(а также на: so.Properties.FUNC_VISIBLENAME.Set("1234"), или so.VisibleName, или so.Properties.set_FUNC_VISIBLENAME(1, oPropValue1) ) выдается исключение "Не удалось установить новое значение свойства.".

Вопрос - что не так? ReadOnly?
Также перед "переименованием" пытался делать .LockDevice() или project.LockObject() открытому проекту, но все не то. Объектом был кабель, хотя думаю это не принципиально.
Или имя и его производные 20013, 20014, 20014 и пр. нельзя менять? Направьте в нужное русло
Последний раз редактировалось AGorskiy 03 дек 2019, 15:00, всего редактировалось 1 раз.
Причина: добавил гиперссылку

Dotarev
знаток Eplan
знаток Eplan
Сообщения: 260
Зарегистрирован: 12 июн 2014, 06:17
Имя: Мишкин Иван
Страна: Россия
город/регион: Самара
Благодарил (а): 16 раз
Поблагодарили: 71 раз

Скрипты и API

Сообщение Dotarev »

Смотрим:
Help→Обзоры EPLAN→Свойства EPLAN: Обзор→Свойства EPLAN: Сортировка по ид→Ид;1234→ R/O: Да
Так что - да, это свойство изменять нельзя. Вопрос о том, можно ли в принципе переименовать ОУ через API, остается открытым.

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

Скрипты и API

Сообщение Madwolf »

Eplan::EplApi::HEServices::NameService вам в помощь, в частности его метод SetName (), в который нужно подсовывать заранее заготовленный FunctionBasePropertyList.

KAN
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 17 июл 2015, 15:06
Имя: Кутузов Александр
Страна: Россия
город/регион: Белгород

Скрипты и API

Сообщение KAN »

Спасибо ответившим. Буду пробовать...

\\если какие-либо сообщения помогли, используйте кнопку "поблагодарить...." это и репа юзера и удобно искать, фильтровать полезную инфу
Последний раз редактировалось AGorskiy 08 фев 2016, 14:27, всего редактировалось 1 раз.
Причина: коммент модера

Dotarev
знаток Eplan
знаток Eplan
Сообщения: 260
Зарегистрирован: 12 июн 2014, 06:17
Имя: Мишкин Иван
Страна: Россия
город/регион: Самара
Благодарил (а): 16 раз
Поблагодарили: 71 раз

Скрипты и API

Сообщение Dotarev »

Редактор отчетов в Eplan предоставляет богатые возможности по подготовке и форматированию вывода. Но наступает момент, когда этих богатств становится мало. :ext_komp_cr: . Это значит, что самое время присмотреться к полю "Операция" в текст-заполнителе.
Итак, необходимо: пользуясь API, для каждой строки отчета извлечь объекты, формирующие эту строку, обработать их и выдать в отчет какой-нибудь полезный текст.
1. Подготавливаем операцию для отчета (Action):

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

// The MIT License (MIT) https://opensource.org/licenses/mit-license.php
// Copyright (c) 2016 [email protected]
// When quoting it is required the reference to the forum http://asutpforum.ru
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.DataModel;
using System;
using System.Collections.Generic;

namespace Eplan.EplAddin.PlaceholderAction {
    /// <summary>
    /// Action для использования в текст-заполнителе отчета (Placeholder).
    /// Для текущих записей, формирующих строку отчета, извлекаются исходные объекты и подготавливается текст для вывода в отчет.
    /// </summary>
    class GetObjectPropertyLaLaFaAction : IEplAction {
        // Name записываем на память - именно его надо указать в отчете в поле "Операция" текст-заполнителя, а подсказок не будет.
        public bool OnRegister(ref string Name, ref int Ordinal) {
            Name = "GetObjectPropertyLaLaFa";
            Ordinal = 20;
            return true;
        }
        // Метод вызывается для каждой строки отчета.
        public bool Execute(ActionCallingContext oActionCallingContext) {
            List<string> output = new List<string>();
            string objectNames = "";

            // Возможные параметры:
            // [in] objects - список формирующих строку объектов
            // [in/out] "color" тип: ColorId. Можно поменять цвет поля.
            oActionCallingContext.GetParameter("objects", ref objectNames);

            // Строку может формировать несколько объектов - в списке objectNames их ID разделены ";"
            string[] objIDs = objectNames.Split(';');
            string outputSeparator = "";
            foreach (string objID in objIDs) {
                try {
                    // Находим объект по его идентификатору
                    StorableObject obj = StorableObject.FromStringIdentifier(objID);
                    output.Add(outputSeparator + GetObjectPropertyLaLaFa(obj));
                    outputSeparator = ";";
                }
                catch (Exception ex) {
                    // Если что-то с извлечением свойств объекта пошло не так, пропустим его.
                    output.Add(" Fault:" + ex.Message);
                }
            }
            // Метод SetStrings устанавливает текст вывода.
            oActionCallingContext.SetStrings(output.ToArray());
            return true;
        }
        // Obsolete - игнорируем.
        public void GetActionProperties(ref ActionProperties actionProperties) {
            return;
        }

        // Тут можно препарировать объект как заблагорассудится.
        private static string GetObjectPropertyLaLaFa(StorableObject obj) {
            // Для примера, выведу общее количество изделий, присвоенных функции.
            if (obj is EplApi.DataModel.Function) {
                EplApi.DataModel.Function function = (EplApi.DataModel.Function)obj;
                if (function.IsMainFunction) {
                    int count_FUNC_ARTICLE_PARTNR = 0;
                    for (int i = 1; i < 50; i++) {
                        if (!function.Properties.FUNC_ARTICLE_PARTNR[i].IsEmpty)
                            ++count_FUNC_ARTICLE_PARTNR;
                    }
                    return count_FUNC_ARTICLE_PARTNR.ToString();
                }
                else return "";
            }
            return "Error - Report objects type is " + obj.GetType().ToString();
        }
    }
}
2. Подготавливаем свой отчет. В нужном месте отчета вставляем текст-заполнитель, для которого указываем имя операции:
Выбор операции.png
3. Формируем (или обновляем) отчет. Результат: функция GetObjectPropertyLaLaFa вызывается для каждого объекта строки отчета. Функция подготавливает текст, который выводится в отчет.
Возможно также изменить цвет текстового поля выводимой строки, используя свойство [in/out] "color" (тип ColorId).
В операцию можно передать несколько текстовых параметров:

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

// The MIT License (MIT) https://opensource.org/licenses/mit-license.php
// Copyright (c) 2016 [email protected]
// When quoting it is required the reference to the forum http://asutpforum.ru
using Eplan.EplApi.ApplicationFramework;
using System.Collections.Generic;

namespace Eplan.EplAddin.PlaceholderAction {
    /// <summary>
    /// Извлечение переданных в операцию параметров.
    /// </summary>
    class GetPlaceholderParametersAction : IEplAction {
        public bool OnRegister(ref string Name, ref int Ordinal) {
            Name = "GetPlaceholderParameters";
            Ordinal = 20;
            return true;
        }
        public bool Execute(ActionCallingContext oActionCallingContext) {
            List<string> output = new List<string>();
            
            string[] parNames = oActionCallingContext.GetParameters();
            
            foreach (var parName in parNames) {
                string parametr = "";
                // Переданные параметры именуются средой Eplan как "0", "1" и т.д.
                oActionCallingContext.GetParameter(parName, ref parametr);
                output.Add(parName + ": " + parametr);
            }
            
            oActionCallingContext.SetStrings(output.ToArray());
            return true;
        }
        // Obsolete - игнорируем.
        public void GetActionProperties(ref ActionProperties actionProperties) {
            return;
        }
    }
}
Например, при вызове операции с параметрами:
GetObjectPropertyLaLaFa First 245
передается дополнительно две строки - "0" - "First", "1" - "245".
Успешного кодирования!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

AGorskiy
знаток Eplan
знаток Eplan
Сообщения: 3339
Зарегистрирован: 05 мар 2012, 15:00
Имя: Горский Андрей Сергеевич
город/регион: Санкт-Петербург
Благодарил (а): 179 раз
Поблагодарили: 368 раз

Скрипт. Резервирование всех открытых проектов

Сообщение AGorskiy »

Один из наших форумчан, (имя не называю, если бы пользователь хотел или мог, то сам задал бы вопрос) задал такую задачу.

Нужно резервирование всех проектов открытых, в Навигаторе при закрытии Еплана, как понимаю разными файлами, выполнение без API, только скриптом.
Есть такой скрипт http://www.eplan4all.info/2013/03/rezer ... e-proekta/ - но он обрабатывает только активный проект, насколько помню и то при закрытии проекта, а не самого Eplan'а.
Так же есть этот скрипт - viewtopic.php?f=90&t=2701#p23323

Кто что может подсказать?
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.

ids
знаток Eplan
знаток Eplan
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Скрипты и API

Сообщение ids »

Добрый день,

Есть такой вопрос - нужно перебрать для всех соединений дополнительные элементы (уголки, тройники и т.д.). Кто-нибудь делал подобное?

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

Скрипты и API

Сообщение Madwolf »

Дмитрий здравствуйте.

Я так понимаю не ясно как их получить для конкретного соединения?

ids
знаток Eplan
знаток Eplan
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Скрипты и API

Сообщение ids »

Добрый день,

Задача такая - перерисовать схему Eplan'а в другом приложении, для чего я перебираю все видимые ОУ, читаю их координаты и линии соединения с другими ОУ. Разобрался: для подсоединенных ОУ используем свойство

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

Connections
для подсоединенных графических элементов -

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

GraphicalConnections

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

Скрипты и API

Сообщение Madwolf »

А через экспорт ACAD почему не устраивает?

ids
знаток Eplan
знаток Eplan
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Скрипты и API

Сообщение ids »

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

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Скрипты и API

Сообщение Stas »

Доброго времени суток уважаемое сообщество!
Недавно возникла необходимость воспользоваться скриптом опубликованным 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
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Скрипты и API

Сообщение ids »

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

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

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Скрипты и API

Сообщение Stas »

Всем доброго времени суток!
Следуя Вашему совету, начал разбирать код скрипта и пришел к следующим выводам.
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
Сообщения: 25
Зарегистрирован: 17 сен 2015, 09:25
Имя: Иванюк Дмитрий Сергеевич
Страна: РБ
город/регион: Брест
Благодарил (а): 2 раза

Скрипты и API

Сообщение ids »

Добрый день,

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

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

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

Stas
знаток Eplan
знаток Eplan
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Скрипты и API

Сообщение Stas »

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

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

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
Сообщения: 260
Зарегистрирован: 12 июн 2014, 06:17
Имя: Мишкин Иван
Страна: Россия
город/регион: Самара
Благодарил (а): 16 раз
Поблагодарили: 71 раз

Скрипты и API

Сообщение Dotarev »

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

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

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
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Скрипты и API

Сообщение Stas »

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

Dotarev
знаток Eplan
знаток Eplan
Сообщения: 260
Зарегистрирован: 12 июн 2014, 06:17
Имя: Мишкин Иван
Страна: Россия
город/регион: Самара
Благодарил (а): 16 раз
Поблагодарили: 71 раз

Скрипты и API

Сообщение Dotarev »

Тогда так:

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

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
Сообщения: 29
Зарегистрирован: 14 май 2014, 12:22
Имя: Станиславский Станислав Леонидович
Страна: Украина
город/регион: Харьков
Поблагодарили: 5 раз

Скрипты и API

Сообщение Stas »

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

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

Скрипты и API

Сообщение limbir »

Здравствуйте!
Требуется изменить стандартные пути к каталогам 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
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Скрипты и API

Сообщение aranea »

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

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

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

Скрипты и API

Сообщение aranea »

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

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

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

Скрипты и API

Сообщение limbir »

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

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