AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2007, 12:19   #141  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Есть идея добавить в табакс плагины. У кого какие мысли по этому поводу?
Цитата:
Плагин — это класс, у которого есть свойство Tabax и название которого начинается на TabaxPlugin_
По-моему, неплохой пример реализации «плагинов» можно найти в проверке целостности данных (класс SysConsistencyCheckJob и соотв. форма). Там эти самые «плагины» выбираются из AOT не по префиксу названия класса, что все же как-то кривовато , а по наследованию от класса SysConsistencyCheck, заодно в этом классе определяется и интерфейс для плагинов, и вспомогательные функции, которые плагины могут использовать, наподобие метода SysConsistencyCheck.kernelCheckTable().
Старый 21.03.2007, 12:22   #142  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Но тогда с Табаксом пришлось бы параллельно распространять класс базовый. Чего и хочется избежать

Цитата:
Сообщение от belugin
Требования
Tabax должен состоянть из одной формы и больше из ничего
Взято из: http://erpkb.com/Axapta/Tabax/Plaginy
Старый 21.03.2007, 12:30   #143  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
И еще где-то кешировать найденные плагины т.к. насколько я помню по игрищам с документооборотом extendedBy() довольно медленная штуковина
Старый 21.03.2007, 13:22   #144  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Но тогда с Табаксом пришлось бы параллельно распространять класс базовый. Чего и хочется избежать
Не вижу объективных причин для столь жесткого условия в контексте прикручивания к Табаксу плагинов. Когда он был сам по себе, то пожалуйста, можно весь код, вопреки best practices, пихать в методы формы, но когда появляются плагины и объективная необходимость как-то формализовать взаимодействие с ними, то без какого-то развитого интерфейса взаимодействия уже не обойтись. Идентификация плагина по префиксу названия класса - это мелочи, самое интересное начнется тогда, когда понадобится как-то регулировать работу Табакса с плагинами, работу плагинов с Табаксом и работу плагинов в окружении других плагинов (какие-нить блокировки и т.п.). Как только дело дойдет до реальной работы, передача плагину ссыли на экземпляр формы уже никого не устроит. Пусть Табакс предполагает наличие у класса-плагина метода void tabax(FormRun _fr), но как плагин будет взаимодействовать с самим Табаксом? тоже предположит, что у формы есть какие-то методы с определенными наборами параметров? А в следующей версии Табакса они сохранятся, а новые добавятся? А как плагин сможет проверить, что он работает как минимум с такой-то версией Табакса, реализующей нужную ему функицональность?..
Imho по-любому дожен быть 1) формализованный интерфейс для плагина с поддержкой версионности; 2) формализованный интерфейс для Табакса и его сервисных функций, предоставляемых плагину, с поддержкой версионности. Посмотрите на Far Manager plugin API, посмотрите на Winamp plugin API, посмотрите на COM-интерфейсы, в конце концов...
Старый 21.03.2007, 13:27   #145  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
И еще где-то кешировать найденные плагины т.к. насколько я помню по игрищам с документооборотом extendedBy() довольно медленная штуковина
Коль скоро я упомянул Far Manager, замечу, что тот тоже кэширует данные по найденным плагинам для ускорения своего запуска
Старый 21.03.2007, 13:33   #146  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от gl00mie Посмотреть сообщение
[FONT="Trebuchet MS"]Когда он был сам по себе, то пожалуйста, можно весь код, вопреки best practices, пихать в методы формы, но когда появляются плагины и объективная необходимость как-то формализовать взаимодействие с ними
Я бы заменил слово "необходимость" на слово "возможность".

Пока в аксапте нет пакетов, внутренних классов или делегатов я постараюсь сделать чтобы табакс было сложно случайно испортить и чтобы он занимал поменьше визуального пространства в АОТ.

Я в курсе насчет плагинов в фаре, эклипсе, Trac и ...

У аксапты свои ограничения, свои традиции и своя область использования и стоит это учитывать.
Старый 21.03.2007, 14:14   #147  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Я бы заменил слово "необходимость" на слово "возможность".
И это пишет человек, говоривший мне об абстрактных классах и интерфейсах!
Цитата:
Пока в аксапте нет пакетов, внутренних классов или делегатов я постараюсь сделать чтобы табакс было сложно случайно испортить и чтобы он занимал поменьше визуального пространства в АОТ.
Что значит «случайно испортить»? Взять форму от одной версии, а класс, реализующий логику работы или какой-то интерфейс (если предположить такое разделение), - от другой? Если человек может изменять объекты в AOT, то что мешает ему, к примеру, влезть в код формы и там что-нить «испортить»?..
Цитата:
У аксапты свои ограничения, свои традиции и своя область использования и стоит это учитывать.
Давайте поговорим об этом Какие такие ограничения и специфика области использования заставляют приделывать плагины.. непонятно как, не используя интерфейсы, проверку типов, возможности наследования, в нарушении best practices, сложившихся традиций и элементарных "правил хорошего тона" X++? Взять тот же Far Manager, передающий и принимающий в качестве интерфейсов таблицы указателей на функции, - там хоть какая-то типизация есть на уровне прототипов функций, описания структур, на основании чего можно еще при сборке плагина сделать элементарные проверки на уровне возможностей компилятора С. А тут, получается, не будет вообще никаких проверок до самого момента вызова, до того, как ядро не тыкнется в экземпляр объекта и, к примеру, не обнаружит отсутствие метода с именем "Tabax" или то, что переданная ссылка соответствует объекту совсем другого типа. Я уже не говорю про IntelliSense и прочие прелести жизни... Но зато Tabax будет занимать в AOT минимум визуального пространства! Конечно, это все перевешивает...
Старый 21.03.2007, 15:10   #148  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Как типичный случай рассматривается когда табакс стоит без плагинов. Для этой ситуации все оптимизируется. Табакс должен состоять из одной части: собственно форма чтобы можно было легко поставить и снести и сложно снести частично.

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

В-общем хочется чтобы табакс был маленькой утилитой, которая легко ставится и сносится.

PS Кроме статических языков есть еще динамические языки в которых вообще нет контроля типов при компиляции и многие считают чтоэто хорошо
PPS Правда другие считают что это type inferrence для бедных
Старый 21.03.2007, 16:33   #149  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Как типичный случай рассматривается когда табакс стоит без плагинов. Для этой ситуации все оптимизируется.
Некий продукт, поддерживающий плагины, и продукт, их не поддерживающий, - это imho «две большие разницы». Если заниматься оптимизацией одного продукта, расчитанного на использование как с плагинами, так и без них, то какой-то вариант обязательно пострадает, и в данном случае не хотелось бы, чтобы это была работа с плагинами
А лучшей иллюстрацией для авторов плагинов к Tabax было бы вынесение в плагины части его функций...
Цитата:
Табакс должен состоять из одной части: собственно форма чтобы можно было легко поставить и снести и сложно снести частично.
1) Чтобы было легко поставить/снести, можно написать соотв. job'ик 2) Я лично не понимаю проблемы с «частичным сносом»: в каком сценарии такое может проявиться? Заходит кто-то в AOT - и давай там удалять направо-налево все, что жирным шрифтом выделено, потом тыкается - а что-то перестало работать, потому что частично снеслось... Так что ли? Или люди, которые работают с Аксаптой, настолько глупые, что не смогут за раз больше одной формы удалить, если понадобится снести Tabax?..
Цитата:
Специфика состоит в том, что в отличие от фара табакс стоит внутри приложения, которое используется и разрабатывается многими людьми. Представь себе что куча людей вставит сносит плагины в твой фар, при этом в папке плагинов нельзя делать подпапки - какая вероятность, что во первых, кто то снесет полплагина
во-первых, не надо подменять понятия - мы говорили о сносе Tabax, а не плагинов к нему Кроме того, что касается плагинов, их составляющие после установки можно заблокировать - и пусть после этого кто-нить другой попробует удалить.
Цитата:
во-вторых, кто-то увидит что в папке стало очень много файлов и прицепится к тебе чтоб ты это снес?
во-вторых, это никого не касается, сколько у меня классов в AOT, даже тех, кто работает со мной в одном приложении. Если я отчеты пишу и делаю иерархию классов, никто же мне не говорит «че-то ты классов наплодил под свои отчеты - давай-ка, удали половину, а то они в AOT весь вид портят»
Цитата:
В-общем хочется чтобы табакс был маленькой утилитой, которая легко ставится и сносится.
Еще раз: можно написать job'ик, который будет при установке прописывать Tabax, где надо, а при сносе - удалять все связанные компоненты.
Цитата:
Кроме статических языков есть еще динамические языки в которых вообще нет контроля типов при компиляции
Afaik X++ к таковым не относится. Мы ведь говорим об X++ и Аксапте, правильно?
Старый 21.03.2007, 17:09   #150  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от gl00mie Посмотреть сообщение
[FONT="Trebuchet MS"]Afaik X++ к таковым не относится. Мы ведь говорим об X++ и Аксапте, правильно?
X++ пытается к таким не отсноситься, однако
X++:
void test()
{
    void test(int a)
    {
       ;
       info(int2str(a));
    }
;
test('Гадость')
}
Старый 21.03.2007, 17:10   #151  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я свои аргументы изложил, агрументы gl00mie мне понятны, но кажутся менее сущетвенными
Старый 21.03.2007, 17:51   #152  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
X++ пытается к таким не отсноситься, однако
X++:
void test()
{
    void test(int a)
    {;
       info(int2str(a));
    }
;
test('Гадость')
}
Честно говоря, не понял, к чему это. К тому, что в job'ах или вложенных функциях проверки, скажем так, ослаблены? И что? Попробуйте так:
X++:
class test
{
}
void test1(int _a)
{;
    info(int2str(_a));
}
void test2()
{;
    this.test1('Гадость');
}
и посмотрите, что получится
Старый 21.03.2007, 17:54   #153  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Есть идея добавить в табакс плагины. У кого какие мысли по этому поводу?
Цитата:
Сообщение от belugin Посмотреть сообщение
Я свои аргументы изложил, агрументы gl00mie мне понятны, но кажутся менее сущетвенными
Ну и ладно
Старый 22.03.2007, 10:44   #154  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Можно попрбовать сделать чтобы и овцы сыты и и волки целы. см раздел SDK:
http://erpkb.com/Axapta/Tabax/Plaginy
Старый 22.03.2007, 11:35   #155  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от belugin Посмотреть сообщение
Можно попрбовать сделать чтобы и овцы сыты и и волки целы. см раздел SDK
Прелестно!.. Вместо интерфейса Tabax - вызовы предполагаемых методов Object с предполагаемыми параметрами
X++:
class TabaxPlugin_CopyWindowHwnd
{
    Object tabax;
    int action;
    Hwnd hwnd;
    Object tabax(Object _value=tabax)
    {
        tabax=_value;
        if (!prmIsDefault(tabax) && tabax)
        {
             tabax.subscribe(methodStr(TabaxPlugin_CopyWindowHwnd, BeforeWindowContextMenu), this);
             tabax.subscribe(methodStr(TabaxPlugin_CopyWindowHwnd, AfterWindowContextMenu), this);
        }
        return tabax;
    }
// ...
}
Опечатки, неправильный тип или порядок аргументов и т.д. можно будет выловить только в runtime
Старый 22.03.2007, 11:37   #156  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Опечатки, неправильный тип или порядок аргументов и т.д. можно будет выловить только в runtime
Вероятно вы не нажали кнопку "обновить" в браузере. Посмотрите вариант с SDK
Старый 22.03.2007, 11:43   #157  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
пример: http://www.axaptapedia.com/images/6/....0.3.beta2.zip
Старый 22.03.2007, 13:01   #158  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Первый реальный плагин на основе нового SDK
Плагин - открывает объект в АОТ

(функционал взят из http://www.axaptapedia.com/Editor_scripts_OpenInAOT)

Для использования в поле для ввода пишем, к примеру

X++:
go InventTable
Вложения
Тип файла: xpo TabaxPlugin_OpenInAOT.xpo (4.2 Кб, 283 просмотров)
Старый 22.03.2007, 13:27   #159  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Может кто-нибудь проверить на медленной машине, тормозит ли
X++:
static void Job25(Args _args)
{
    SysDictClass plug = new SysDictClass(classNum(TabaxPluginBase));
;
    info(int2str(plug.extendedBy().elements()));
}
Старый 22.03.2007, 13:30   #160  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от belugin Посмотреть сообщение
Может кто-нибудь проверить на медленной машине, тормозит ли
X++:
static void Job25(Args _args)
{
    SysDictClass plug = new SysDictClass(classNum(TabaxPluginBase));
;
    info(int2str(plug.extendedBy().elements()));
}
Мне вариант с like 'TabaxPlugin*' больше нравится.
Этот - ну, секунды 4 выполнялся, хотя машинка моя не такая уж и медленная.
За это сообщение автора поблагодарили: belugin (15).
Теги
tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[ANN] Sidax 0.3.6 - многоцелевая боковая панель для Axapta belugin DAX: База знаний и проекты 104 30.06.2008 11:32
axaptafreak: Tabax: tabbed Axapta interface !!!! Blog bot DAX Blogs 0 10.11.2006 01:14
Панель задач в Аксапте wb DAX: Программирование 14 18.04.2006 17:13
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:50.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.