- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Отключение обработчиков при многопользовательской работе
Модератор: специалисты Eplan
-
- здесь недавно
- Сообщения: 39
- Зарегистрирован: 05 авг 2019, 15:51
- Имя: Григорий Останин
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
Отключение обработчиков при многопользовательской работе
Дано: Есть большой проект, над которым работает разом до 5 человек. Частно возникает необходимость сделать что-то с эксклюзивными правами (обновить ОД, сделать бэкап, etc.), стараюсь делать это удалённо в выходные/вечером, но часто другие обработчики не закрывают Е или проект потому что "потом открывается долго". Есть лазейка через сисадмина, тот подключается через энидеск и гасит Е на клиентской машине, но в выходные этот метод часто не работает по объективным причинам.
Найти: Хочется иметь функционал, которым можно по нажатию кнопки закрывать Е или проект на клиентской машине. Кто-то искал или находил способы как это сделать?
Большой брат и товарищ майор вошли в чат.
Найти: Хочется иметь функционал, которым можно по нажатию кнопки закрывать Е или проект на клиентской машине. Кто-то искал или находил способы как это сделать?
Большой брат и товарищ майор вошли в чат.
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 01 ноя 2019, 02:28
- Имя: Гена
- Страна: Россия
- город/регион: СПб
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
Отключение обработчиков при многопользовательской работе
Я как-то давно тоже интересовался такой функцией, но не нашел. Хотя в солид электрикал такая кнопка была и это было очень удобно. При этом случаев когда в солиде нужен был эксклюзивный доступ к проекту и библиотеке меньше.
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 01 ноя 2019, 02:28
- Имя: Гена
- Страна: Россия
- город/регион: СПб
- Благодарил (а): 11 раз
- Поблагодарили: 31 раз
Отключение обработчиков при многопользовательской работе
Я вот, кстати, не пробовал, но если варварски перезагрузить базу данных от еплана, то все клиенты отвалятся? А потом уже подключиться со своей машины с эксклюзивными правами и делать свои дела. В принципе если это сработает, то можно написать скрипт который будет отключать клиентов в SQL. Но как быть с фалами на сервере мыслей пока нет.
-
- знаток Eplan
- Сообщения: 304
- Зарегистрирован: 07 окт 2016, 07:31
- Имя: Михаил
- Страна: Россия
- город/регион: Екатеринбург
- Благодарил (а): 133 раза
- Поблагодарили: 89 раз
Отключение обработчиков при многопользовательской работе
Может быть можно отключать от лицензии в Eplan License Manager?
Eplan 2.6 HF4
-
- здесь недавно
- Сообщения: 39
- Зарегистрирован: 05 авг 2019, 15:51
- Имя: Григорий Останин
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
Отключение обработчиков при многопользовательской работе
Перезагрузка сервера с базами и файлами не помогает. Можно пробовать совсем гасить, но потом придётся все открытые проекты прогонять через проверку и корректировку.
-
- знаток Eplan
- Сообщения: 3339
- Зарегистрирован: 05 мар 2012, 15:00
- Имя: Горский Андрей Сергеевич
- город/регион: Санкт-Петербург
- Благодарил (а): 181 раз
- Поблагодарили: 368 раз
Отключение обработчиков при многопользовательской работе
Давно задавал этот вопрос в саппорт и на форуме обсуждали. Вариантов "кикнуть" пользователя из проекта нет. Официалы предлагали пользоваться почтой, с предложением юзеру покинуть проект.
viewtopic.php?p=74625#p74625
viewtopic.php?p=67949#p67949
viewtopic.php?p=36548#p36548
Может быть так - viewtopic.php?t=4731&start=25#p71413
viewtopic.php?p=74625#p74625
viewtopic.php?p=67949#p67949
viewtopic.php?p=36548#p36548
Может быть так - viewtopic.php?t=4731&start=25#p71413
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
-
- знаток Eplan
- Сообщения: 58
- Зарегистрирован: 30 окт 2018, 09:17
- Имя: Павел
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 2 раза
- Поблагодарили: 54 раза
Отключение обработчиков при многопользовательской работе
Для управления состоянием пользовательских статусов я разрабатывал Addin с функцией UPD мультикаст группы.
На всех компах где запущен Eplan с таким addin модулем, можно отправить пакет-запрос на статус: какие версии запущены, сколько и чего открыто, какие лицензии занимает пользователь. Соответственно можно и реализовать команды по закрытию проектов, или Eplan целиком, просто отправляя пакет с такой командой.
Если интересует, могу врезать такой функционал и вывести код в отдельный класс, что бы можно было скомпилировать под свой ключ API.
На всех компах где запущен Eplan с таким addin модулем, можно отправить пакет-запрос на статус: какие версии запущены, сколько и чего открыто, какие лицензии занимает пользователь. Соответственно можно и реализовать команды по закрытию проектов, или Eplan целиком, просто отправляя пакет с такой командой.
Если интересует, могу врезать такой функционал и вывести код в отдельный класс, что бы можно было скомпилировать под свой ключ API.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- знаток Eplan
- Сообщения: 58
- Зарегистрирован: 30 окт 2018, 09:17
- Имя: Павел
- Страна: РФ
- город/регион: Москва
- Благодарил (а): 2 раза
- Поблагодарили: 54 раза
Отключение обработчиков при многопользовательской работе
Вот пример класса для Eplan addin и программы-менеджера.
Для работы необходимо что бы клиенты находились в одной сети, т.к. протокол управления UDP, так же, фаервол не должен блокировать входящий траффик (во всяком случае для программы Eplan.exe).
С программы менеджера можно:
- просматривать какие проекты открыты у какого пользователя
- закрывать проекты
- закрывать Eplan
Есть некоторые моменты которые требуют дополнительной разработки, например пока не получается закрыть проект окно которого в данный момент открыто у пользователя. Это связано с тем, что в этот момент в проекте происходит блокировка некоторых обьектов, а вызов функции на закрытие присходит не из GUI а по событию которое не предполагалось вызывать во время блокировки обьектов проекта. В комментариях кода есть вариант с вызовом системного экшена XPrjActionProjectClose (по умолчанию в обработчике отключен), но он тоже не предполагал внезапного вызова не из GUI, по этому с ним даже eplan может кинуть "неизвестную ошибку".
Для таких случаев есть функция "мягкого" закрытия программы, при вызове данной операции программа эмулирует нажатие на "крестик" в окне Eplan.
Класс Exchanger необходимо добавить в addin, далее нужно создать его инстанс и запустить получение пакетов (StartRecive())
Дополнительно может понадобиться реализовать интерфейс логгера и добавить метод отправки сообщений в лог Eplan. Можно и без них, просто удалить тогда места вызова
Для работы необходимо что бы клиенты находились в одной сети, т.к. протокол управления UDP, так же, фаервол не должен блокировать входящий траффик (во всяком случае для программы Eplan.exe).
С программы менеджера можно:
- просматривать какие проекты открыты у какого пользователя
- закрывать проекты
- закрывать Eplan
Есть некоторые моменты которые требуют дополнительной разработки, например пока не получается закрыть проект окно которого в данный момент открыто у пользователя. Это связано с тем, что в этот момент в проекте происходит блокировка некоторых обьектов, а вызов функции на закрытие присходит не из GUI а по событию которое не предполагалось вызывать во время блокировки обьектов проекта. В комментариях кода есть вариант с вызовом системного экшена XPrjActionProjectClose (по умолчанию в обработчике отключен), но он тоже не предполагал внезапного вызова не из GUI, по этому с ним даже eplan может кинуть "неизвестную ошибку".
Для таких случаев есть функция "мягкого" закрытия программы, при вызове данной операции программа эмулирует нажатие на "крестик" в окне Eplan.
Класс Exchanger необходимо добавить в addin, далее нужно создать его инстанс и запустить получение пакетов (StartRecive())
Код: Выделить всё
Exchanger Ex = new Exchanger(null);
Ex.Port = 44554;
Ex.StartRecive();
SendMSGToEplanLog($"Exchanger started at {Ex.Port}..");
Дополнительно может понадобиться реализовать интерфейс логгера и добавить метод отправки сообщений в лог Eplan. Можно и без них, просто удалить тогда места вызова
Код: Выделить всё
public static void SendMSGToEplanLog(String msg)
{
Eplan.EplApi.Base.BaseException exc = new Eplan.EplApi.Base.BaseException(msg,
Eplan.EplApi.Base.MessageLevel.Message);
exc.FixMessage();
}
public interface ILogBoxable
{
void ToLog(String msg);
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 39
- Зарегистрирован: 05 авг 2019, 15:51
- Имя: Григорий Останин
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
Отключение обработчиков при многопользовательской работе
Интересное наблюдение. Если метод-закрывашка запускается повторно через некоторое время - проекты, которые не закрылись с первого раза, всё-таки закрываются. Хочется попробовать в конец метода воткнуть проверку на наличие открытых проектов и в случае если OpenProjects.Lenght!=0 рекурсивно вызывать метод-закрывашку.
Да, я решил не морочиться с удалённым закрытием, а просто прописал закрытие всех открытых проектов через 15 минут после блокировки экрана или по расписанию в 2 часа ночи.
-
- здесь недавно
- Сообщения: 39
- Зарегистрирован: 05 авг 2019, 15:51
- Имя: Григорий Останин
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
Отключение обработчиков при многопользовательской работе
Спустя полгода, после переписывания закрывашки под Е 2024, не без помощи ИИ, удалось обнаружить, что если вызов метода CloseAll производится таймером из библиотеки System.Windows.Forms вместо System.Windows - баг с незакрытыми вкладками не всплывает. Так же ИИ посоветовал "оборачивать" запросы не из интерфейса в UI контекст, но до смены таймера это не помогало.
-
- знаток Eplan
- Сообщения: 304
- Зарегистрирован: 07 окт 2016, 07:31
- Имя: Михаил
- Страна: Россия
- город/регион: Екатеринбург
- Благодарил (а): 133 раза
- Поблагодарили: 89 раз
Отключение обработчиков при многопользовательской работе
Ничего не понятно, но очень интересно
Главное, что спустя пол года нашлось время написать результат!
Главное, что спустя пол года нашлось время написать результат!
-
- почётный участник форума
- Сообщения: 1181
- Зарегистрирован: 09 фев 2011, 11:32
- Имя: Дитрих Евгений Линусович
- город/регион: Донецк
- Благодарил (а): 351 раз
- Поблагодарили: 241 раз
Отключение обработчиков при многопользовательской работе
На версии 1.9 случилось: дома ноутбук забыл подключить к 220, аккумулятор разрядился и все закрылось само. Проект накрылся, т.е. не открывался. Изменений было всего парочку от стационара на работе - лысину чесать не пришлось.
_______________________________________________
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
-
- здесь недавно
- Сообщения: 39
- Зарегистрирован: 05 авг 2019, 15:51
- Имя: Григорий Останин
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
Отключение обработчиков при многопользовательской работе
Вот победю проблему с открытыми поверх редактора диалоговыми окнами - выкачу на всеобщее обозрение финальное решение.
-
- здесь недавно
- Сообщения: 39
- Зарегистрирован: 05 авг 2019, 15:51
- Имя: Григорий Останин
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
Отключение обработчиков при многопользовательской работе
https://github.com/kolbasist/CloseAllOp ... cts.EplApi
Как и обещал. Выставляю на суд общественности.
Теперь оно не оставляет фантомные вкладки, не крашится при наличии открытых поверх Еплана окон. Ещё и на всякий случай пишет текстовый лог. Вообще, хочется для дебага вынести логгер в отдельную dll, которую просто подключать к проектам.
Как и обещал. Выставляю на суд общественности.
Теперь оно не оставляет фантомные вкладки, не крашится при наличии открытых поверх Еплана окон. Ещё и на всякий случай пишет текстовый лог. Вообще, хочется для дебага вынести логгер в отдельную dll, которую просто подключать к проектам.