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

Отключение обработчиков при многопользовательской работе

Новости / Ошибки / Хотелки

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

Ответить

Автор темы
kolbasist
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 05 авг 2019, 15:51
Имя: Григорий Останин
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Отключение обработчиков при многопользовательской работе

Сообщение kolbasist »

Дано: Есть большой проект, над которым работает разом до 5 человек. Частно возникает необходимость сделать что-то с эксклюзивными правами (обновить ОД, сделать бэкап, etc.), стараюсь делать это удалённо в выходные/вечером, но часто другие обработчики не закрывают Е или проект потому что "потом открывается долго". Есть лазейка через сисадмина, тот подключается через энидеск и гасит Е на клиентской машине, но в выходные этот метод часто не работает по объективным причинам.

Найти: Хочется иметь функционал, которым можно по нажатию кнопки закрывать Е или проект на клиентской машине. Кто-то искал или находил способы как это сделать?

Большой брат и товарищ майор вошли в чат.

Gena
здесь недавно
здесь недавно
Сообщения: 94
Зарегистрирован: 01 ноя 2019, 02:28
Имя: Гена
Страна: Россия
город/регион: СПб
Благодарил (а): 11 раз
Поблагодарили: 31 раз

Отключение обработчиков при многопользовательской работе

Сообщение Gena »

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

Gena
здесь недавно
здесь недавно
Сообщения: 94
Зарегистрирован: 01 ноя 2019, 02:28
Имя: Гена
Страна: Россия
город/регион: СПб
Благодарил (а): 11 раз
Поблагодарили: 31 раз

Отключение обработчиков при многопользовательской работе

Сообщение Gena »

kolbasist писал(а): 08 ноя 2023, 19:16 Найти: Хочется иметь функционал, которым можно по нажатию кнопки закрывать Е или проект на клиентской машине. Кто-то искал или находил способы как это сделать?
Я вот, кстати, не пробовал, но если варварски перезагрузить базу данных от еплана, то все клиенты отвалятся? А потом уже подключиться со своей машины с эксклюзивными правами и делать свои дела. В принципе если это сработает, то можно написать скрипт который будет отключать клиентов в SQL. Но как быть с фалами на сервере мыслей пока нет.

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

Отключение обработчиков при многопользовательской работе

Сообщение MVekb »

Может быть можно отключать от лицензии в Eplan License Manager?
Eplan 2.6 HF4

Автор темы
kolbasist
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 05 авг 2019, 15:51
Имя: Григорий Останин
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Отключение обработчиков при многопользовательской работе

Сообщение kolbasist »

Gena писал(а): 08 ноя 2023, 19:47 если варварски перезагрузить базу данных от еплана, то все клиенты отвалятся? А потом уже подключиться со своей машины с эксклюзивными правами и делать свои дела.
Перезагрузка сервера с базами и файлами не помогает. Можно пробовать совсем гасить, но потом придётся все открытые проекты прогонять через проверку и корректировку.
Аватара пользователя

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

Отключение обработчиков при многопользовательской работе

Сообщение AGorskiy »

Давно задавал этот вопрос в саппорт и на форуме обсуждали. Вариантов "кикнуть" пользователя из проекта нет. Официалы предлагали пользоваться почтой, с предложением юзеру покинуть проект.

viewtopic.php?p=74625#p74625

viewtopic.php?p=67949#p67949

viewtopic.php?p=36548#p36548

Может быть так - viewtopic.php?t=4731&start=25#p71413
Все знания для всех. Поиск знаний священен. Обмен знаниями священен. Копирование священно.
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 58
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 54 раза

Отключение обработчиков при многопользовательской работе

Сообщение Barmaley4 »

Для управления состоянием пользовательских статусов я разрабатывал Addin с функцией UPD мультикаст группы.
На всех компах где запущен Eplan с таким addin модулем, можно отправить пакет-запрос на статус: какие версии запущены, сколько и чего открыто, какие лицензии занимает пользователь. Соответственно можно и реализовать команды по закрытию проектов, или Eplan целиком, просто отправляя пакет с такой командой.
Если интересует, могу врезать такой функционал и вывести код в отдельный класс, что бы можно было скомпилировать под свой ключ API.
2023-11-10_155251.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 58
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 54 раза

Отключение обработчиков при многопользовательской работе

Сообщение Barmaley4 »

Вот пример класса для Eplan addin и программы-менеджера.
Для работы необходимо что бы клиенты находились в одной сети, т.к. протокол управления 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);
    }
2023-11-16_133742.png
2023-11-16_134223.png
UdpExchanger.zip
Exchanger.cs
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
kolbasist
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 05 авг 2019, 15:51
Имя: Григорий Останин
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Отключение обработчиков при многопользовательской работе

Сообщение kolbasist »

Barmaley4 писал(а): 16 ноя 2023, 13:43
Есть некоторые моменты которые требуют дополнительной разработки, например пока не получается закрыть проект окно которого в данный момент открыто у пользователя.
Интересное наблюдение. Если метод-закрывашка запускается повторно через некоторое время - проекты, которые не закрылись с первого раза, всё-таки закрываются. Хочется попробовать в конец метода воткнуть проверку на наличие открытых проектов и в случае если OpenProjects.Lenght!=0 рекурсивно вызывать метод-закрывашку.

Да, я решил не морочиться с удалённым закрытием, а просто прописал закрытие всех открытых проектов через 15 минут после блокировки экрана или по расписанию в 2 часа ночи.

Автор темы
kolbasist
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 05 авг 2019, 15:51
Имя: Григорий Останин
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Отключение обработчиков при многопользовательской работе

Сообщение kolbasist »

Спустя полгода, после переписывания закрывашки под Е 2024, не без помощи ИИ, удалось обнаружить, что если вызов метода CloseAll производится таймером из библиотеки System.Windows.Forms вместо System.Windows - баг с незакрытыми вкладками не всплывает. Так же ИИ посоветовал "оборачивать" запросы не из интерфейса в UI контекст, но до смены таймера это не помогало.

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

Отключение обработчиков при многопользовательской работе

Сообщение MVekb »

Ничего не понятно, но очень интересно :crazy0to:
Главное, что спустя пол года нашлось время написать результат!
Аватара пользователя

Looker
почётный участник форума
почётный участник форума
Сообщения: 1181
Зарегистрирован: 09 фев 2011, 11:32
Имя: Дитрих Евгений Линусович
город/регион: Донецк
Благодарил (а): 351 раз
Поблагодарили: 241 раз

Отключение обработчиков при многопользовательской работе

Сообщение Looker »

kolbasist писал(а): 08 ноя 2023, 19:16обработчики не закрывают Е или проект потому что "потом открывается долго"
На версии 1.9 случилось: дома ноутбук забыл подключить к 220, аккумулятор разрядился и все закрылось само. Проект накрылся, т.е. не открывался. Изменений было всего парочку от стационара на работе - лысину чесать не пришлось.
_______________________________________________
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу

Автор темы
kolbasist
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 05 авг 2019, 15:51
Имя: Григорий Останин
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Отключение обработчиков при многопользовательской работе

Сообщение kolbasist »

MVekb писал(а): 15 ноя 2024, 13:15 Ничего не понятно, но очень интересно :crazy0to:
Главное, что спустя пол года нашлось время написать результат!
Вот победю проблему с открытыми поверх редактора диалоговыми окнами - выкачу на всеобщее обозрение финальное решение.

Автор темы
kolbasist
здесь недавно
здесь недавно
Сообщения: 39
Зарегистрирован: 05 авг 2019, 15:51
Имя: Григорий Останин
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Отключение обработчиков при многопользовательской работе

Сообщение kolbasist »

https://github.com/kolbasist/CloseAllOp ... cts.EplApi
Как и обещал. Выставляю на суд общественности.
Теперь оно не оставляет фантомные вкладки, не крашится при наличии открытых поверх Еплана окон. Ещё и на всякий случай пишет текстовый лог. Вообще, хочется для дебага вынести логгер в отдельную dll, которую просто подключать к проектам.
Ответить

Вернуться в «Общие вопросы»