Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
Добрый день.
Уважаемые коллеги подскажите, пожалуйста, как можно создать пользовательское контекстное меню в CacheStudio без использования системы контроля версии.

Картинка с другого сайта.

Немного о назначении:
Я написал программу (плагин) для создания отчетов с помощью FastReport. Плагин вызывается через контекстное меню в CacheStudio, с применением системы контроля версии. Хотелось бы уйти от такой завязки, так как класс обработки SourceContro может быть один активным.
Для большей наглядности проект выложен: https://github.com/MyasnikovIA/CacheFastReport
Инструкция по развертыванию там же...
Заранее благодарю за любую помощь по озвученной теме.
23 янв 19, 06:28    [21791719]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2633
а почему мы код классов не выложить там же в репозитории?
пока вообще не понятно, зачем нужен класс контроля версий, чтобы запустить exe?
23 янв 19, 10:35    [21791843]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
DAiMor,
В прицепе вы правы контекстное меню необходимо для запуска файла EXE с входными параметрами для подключения (имя, пароль, область имен, и класс редактирования, и другие параметры).

Динамическое создание классов реализовано для простоты инсталляции. А так же при генерации классов создаются параметры с именем и паролем для подключения программы в фоновом режиме. Имя и пароль прописываются те, под которым произошло подключение

Class %ZFastReport.page Extends %CSP.Page [ Not ProcedureBlock ]
{
****
/// Имя пользователя от которого будет подключатся программа
Parameter UserName = "_SYSTEM";
/// Пароль пользователя от которого будет подключатся программа
Parameter UserPass = "SYS";
******

Спасибо за указание недочета, я добавил github: https://github.com/MyasnikovIA/CacheFastReport/tree/master/cls

Немного уточню задачу над которой я пытаюсь найти решение:
Задача стоит в запуске сторонней программы с параметрами с параметрами на подключение и именем объекта , который будет редактироваться. Для наглядности запуск хотелось бы производить из студии (Через контекстное меню)
23 янв 19, 17:50    [21792543]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
Небольшое дополнение о способе генерации класса из программы.
В ниже переведенном скриншето наглядно показан принцип генерации класса из кода (это так для общего развития)
Картинка с другого сайта.
24 янв 19, 04:42    [21792773]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
logist
Member

Откуда: InterSystems
Сообщений: 262
MyasnikovIA,

Один из вариантов - создать шаблон https://docs.intersystems.com/ens201513/csp/docbook/DocBook.UI.Page.cls?KEY=GSTD_Templates#GSTD_Templates_Custom и в нем сделать $zf(-1) или $zf(100) для вызова EXE
24 янв 19, 05:49    [21792783]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
logist,
Идея хорошая, но “FastReportPlayer.exe” включает в себя визуальный редактор отчета.
Плюс к тому же после создания формы отчета, при нажатии на кнопку “Save to cls”, происходит вычитывание структуры макета и на основании этой структуры генерируется класс с методами (макет отчета тоже помещается внутри генерируемого класса). Если поместить класс в шаблон, то не будет возможности визуального редактирования макета отчета.
Но идея в действительности интересная, но возникает проблемка с вызовом редактирования ранее написанного класса.
С другой стороны, я не знал способа создания шаблонов и использую в другом проекте.
Спасибо.
24 янв 19, 06:18    [21792793]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
logist
Member

Откуда: InterSystems
Сообщений: 262
MyasnikovIA,

Ну а через класс контроля версий оно же тоже через $zf вызывается? Или там как то именно на клиенте можно что то запустить?
24 янв 19, 08:39    [21792840]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2633
logist
MyasnikovIA,

Ну а через класс контроля версий оно же тоже через $zf вызывается? Или там как то именно на клиенте можно что то запустить?
в классе контроля версий вызывается самой студией. Без $zf, там просто в одном из методов нужно ответить что нужно запустить команду и путь к команде
24 янв 19, 08:54    [21792857]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
logist,
В классе контроля версий есть метод “UserAction”
Среди входных аргументов есть переменная “Target” и “Action”
Target – указывает команду для запуска из студии
Action – указывает тип запускаемой команды

Action=2 - Запуск окна с WebView (IE на стороне клиента)
Action=3 - Запуск внешней программы на стороне клиента

Картинка с другого сайта.


Увидев это я предположил, что должен быть отдельный класс для обработки вызова контекстного меню в студии, что и породило эту тему на форуме.
24 янв 19, 09:52    [21792917]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
logist
Member

Откуда: InterSystems
Сообщений: 262
MyasnikovIA,

OK, у меня просто весь контроль версий на стороне сервера через $zf - я даже не знал что на клиенте можно делать

Тогда сложнее конечно - может быть IE & ActiveX?
24 янв 19, 10:07    [21792946]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
logist,
Я уточню вопрос и конечную цель:
Хотелось бы узнать имя класса Cache', который отвечает за вызов контекстного меню в CacheStudio

Запуск EXE файла можно производить разными способами. Один из реализованных решений это система контроля версий, в который встроен механизм контекстного меню. Там же можно добавлять пункты в верхнее меню. Главной проблемой такого подхода, это то, что класс обработчик системы контроля версий может быть только один. И если ранее была установлена какая-то версия , тогда установив в качестве обработчика "%ZFastReport.SourceControl" я переопределю старый обработчик.
По этому необходимо найти иной способ вызова из студии.

В принципе FastReportPlayer.exe может запускаться как автономное приложении, но при этом каждый раз нужно будет указывать параметры для подключения к БД и имя класса для редактирования(Если класса нет, то он будет сгенерирован).

Если получится найти решение, то в дальнейшем будет написан инсталлятор к этой программе, которая после установке допишет свой запуск в контекстное меню. Все это позволит расширять возможности CacheStudio, через инсталляцию плагинов

IE & ActiveX не решат проблему вызова из CacheStudio.
24 янв 19, 11:17    [21793067]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
vcoshak
Member

Откуда:
Сообщений: 28
В классе контроля версий состав меню (в т.ч. контекстного) определяется блоком XData Menu.
Может быть возможно при инициализации класса при помощи %Dictionary.XDataDefinition изменять XData и динамически добавлять требуемые пункты меню?
24 янв 19, 13:03    [21793251]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
MyasnikovIA
Member

Откуда: Новосибирск
Сообщений: 72
vcoshak,

Если не получится локализовать класс отвечающий отдельно за контекстное меню в CacheStudio, тогда так и придется сделать:
1) Определить активную систему контроля версии.
2) Если её нет, тогда сделать активной “ZFastReport.SourceControl”.
3) Если она есть, тогда парсить структуру класса, выбранного как контроллер версий, и добавлять в неё свои изменения.
Конечно сложная, но вполне реализуемая задача (средствами Cache конечно).
Спасибо за идею.
24 янв 19, 14:40    [21793394]     Ответить | Цитировать Сообщить модератору
 Re: Как создать пользовательское контекстное меню без использования системы контроля версии?  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3798
MyasnikovIA
Я уточню вопрос и конечную цель:
Хотелось бы узнать имя класса Cache', который отвечает за вызов контекстного меню в CacheStudio
Он настраивается. Администрирование -> Конфигурация -> Дополнительные настройки

MyasnikovIA
И если ранее была установлена какая-то версия , тогда установив в качестве обработчика
"%ZFastReport.SourceControl" я переопределю старый обработчик.
Ну допиши в старый, тоже мне проблема.

MyasnikovIA
Если получится найти решение, то в дальнейшем будет написан инсталлятор к этой программе, которая после установке допишет свой запуск в контекстное меню. Все это позволит расширять возможности CacheStudio, через инсталляцию плагинов
Должна появиться необходимость в массовом изменении систем контроля версий для такой доработки. Слабо в это верится.
24 янв 19, 21:44    [21793817]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить