07.06.2006, 14:03 | #1 |
Участник
|
Advanced programming
Вобщем нужно было с самого начала на этом форуме регестрироваться. Вопрос следующий:
http://forum.mazzy.ru/index.php?showtopic=5695 P.S. По желанию телезрителей засвечиваю свой пост в оригинале: День добрый всем. С аксаптой я знаком всего несколько дней, проект ожидается не продолжительный, потому предпочтительно прибегнуть к помощи экспертов. Кстати Аксапта эта мне очень сильно напоминает SmallTalk, аналогичные идеи, решения.
P.P.S Привередливые какие... Последний раз редактировалось batiskaf_new; 15.06.2006 в 16:50. |
|
|
За это сообщение автора поблагодарили: mazzy (5), belugin (3), alex55 (1). |
07.06.2006, 14:12 | #2 |
Moderator
|
Ну, уж текст-то свой копипастом пригоните сюда...
(сообщения можно редактировать) P.S. Да не делайте Вы его как цитату - другим неудобно будет Вас цитировать при ответах! P.P.S. Спасибо. Теперь хорошо. Последний раз редактировалось Gustav; 07.06.2006 в 14:25. |
|
07.06.2006, 14:38 | #4 |
Участник
|
Последний раз редактировалось belugin; 07.06.2006 в 14:42. |
|
07.06.2006, 14:46 | #5 |
Участник
|
По поводу п 1. смотрите Developer's Guide - идет в составе дистрибутива
__________________
Axapta v.3.0 sp5 kr2 |
|
07.06.2006, 15:10 | #6 |
Moderator
|
2 batiskaf_new
Вы ужас какой умный... я серьезно, просто завидую! у меня при чтении уже 4-го пункта заболела голова... я потом дочитаю... (точнее - попробую) |
|
07.06.2006, 16:33 | #7 |
NavAx
|
Цитата:
Сообщение от Gustav
2 batiskaf_new
Вы ужас какой умный... я серьезно, просто завидую! у меня при чтении уже 4-го пункта заболела голова... я потом дочитаю... (точнее - попробую) 2 batiskaf_new: Продублирую свой совет с forum.mazzy.ru: Обертывайте тестирующий код в макросы, чтоб одной константой можно было все закоментировать
__________________
Isn't it nice when things just work? |
|
07.06.2006, 18:25 | #8 |
Участник
|
Цитата:
Сообщение от belugin
|
|
07.06.2006, 18:30 | #9 |
Участник
|
Цитата:
Сообщение от belugin
.всего остального нельзя
Что касается модификации библиотечных классов мне тоже ответили на Mazzy что можно, только вот как мне переделать код класса FormButtonControl? Где этот файл физически находится, как это все найти и поменять? |
|
07.06.2006, 18:34 | #10 |
Участник
|
Стоп-стоп-стоп.
Библиотечные классы - это классы, которые находятся в ветке class. Системные классы - это классы, которые можно найти в AOT \ System Documentation \ Classes. На самом деле системные классы логически находятся в том же пространстве имен, что и библиотечные. Но как правило имеют модификатор final. Поэтому наследовать от них вы не можете. Мало того, у вас нет возможности посмотреть исходный код СИСТЕМНЫХ классов (это фича такая). |
|
07.06.2006, 18:47 | #11 |
Участник
|
Ага, вы и на этом форуме тоже учавствуете?
Давайте по порядку. Значит Системные классы ни посмотреть, ни поменять, только пользовательские. Верно? Как же мне тогда вставить в метод: FormButtonControl::clicked еще своих пару строчек кода? Значит получается что и ClassLoader тоже не спасет? Вобщем, мне нужно чтобы любая аппликация, которая бежит в Аксапте на клик по любой кнопке любого диалога, помимо пользовательского кода исполняла еще мой код, который отправит некоторую информацию в СОМ объект. При этом, изменений в пользовательстком коде делать не желательно, можно максимум один два обьекта построить при старте аппликации, или еще что то такое. |
|
07.06.2006, 19:25 | #12 |
Роман Долгополов (RDOL)
|
Уж не знаю зачем Вам все это нужно. Может если расскажете зачем, то люди поскажут и как это реализовать.
Как уже говорилось - вставить свой код в методы системных классов нельзя. Заставить систему везде вместо инстансов FormButtonControl создавать инстансы MySuperButtonControl то же нельзя (подкрячивание exe-шников в качестве средства не рассматривается) Зато можно навесить хук на всю аксапту и обрабатывать в нем допустим все WM_CLICKED как заблагорассудится. Пишите dll c хуком например на VC++, загружаете ее и вперед с песней. Только еще раз - а зачем все это? |
|
07.06.2006, 19:31 | #13 |
Участник
|
блин, и здесь про универсальное программирование...
Не очень понимаю, зачем это вам надо. Но скорее всего, вы не сможете сделать задуманное вами средствами Аксапты. Если вам действительно нужно решить вашу задачу вашими средствами, то скорее всего надо рыть в сторону работы с хандлерами окон на уровне windows... |
|
07.06.2006, 19:31 | #14 |
Участник
|
Цитата:
Сообщение от db
Только еще раз - а зачем все это?
|
|
08.06.2006, 07:44 | #15 |
Участник
|
Цитата:
Сообщение от batiskaf_new
Спасибо, только я это уже читал, все это не то. Мне нужно из Аксапты (Х++) создать СОМ объект, и передать в метод этого обьекта ссылку на Х++ MyInsideAxaptaObject. Попробовал унаследовать MyInsideAxaptaObject class от класса СОМ, передавать объекты теперь можно, но в коде СОМ объекта эта ссылка почему то нулевая. Может нужно еще что то заимплементировать?
|
|
08.06.2006, 07:52 | #16 |
Участник
|
Цитата:
Сообщение от batiskaf_new
Вобщем, мне нужно чтобы любая аппликация, которая бежит в Аксапте на клик по любой кнопке любого диалога, помимо пользовательского кода исполняла еще мой код, который отправит некоторую информацию в СОМ объект. При этом, изменений в пользовательстком коде делать не желательно, можно максимум один два обьекта построить при старте аппликации, или еще что то такое.
|
|
08.06.2006, 12:55 | #17 |
Участник
|
Цитата:
Сообщение от belugin
Насколько я знаю, такого делать нельзя. Колбеков в аксапте нет, кроме событий ActiveX объектов.
|
|
08.06.2006, 13:18 | #18 |
Участник
|
Цитата:
Сообщение от db
Уж не знаю зачем Вам все это нужно. Может если расскажете зачем, то люди поскажут и как это реализовать.
Как уже говорилось - вставить свой код в методы системных классов нельзя. Заставить систему везде вместо инстансов FormButtonControl создавать инстансы MySuperButtonControl то же нельзя (подкрячивание exe-шников в качестве средства не рассматривается) Зато можно навесить хук на всю аксапту и обрабатывать в нем допустим все WM_CLICKED как заблагорассудится. Пишите dll c хуком например на VC++, загружаете ее и вперед с песней. Только еще раз - а зачем все это? http://forum.mazzy.ru/index.php?showtopic=5695# Мне нужно интегрировать в ядро Аксапта агента, который будет мне давать следующие сервисы: 1. Программа максимум - уметь подключаться к высокоуровневым сообщениям Аксапта контролов. WM_CLICKED меня не совсем устраивает, потому что я бы хотел знать точно что сделал user гридом, выбрал ячейку, выбрал строку, поменял значение ячейки, все эти вещи можно получить из нотификаций класса FormGridControl. 2. Если первое не возможно, тогда программа минимум - получить доступ к DataStructure каждого конкретного контрола. Написать хук на низкоуровневые сообщения можно, но иметь доступ к структуре данных того же грида, по которому кликают в любом случае нужно. Другими словами, мне нужно будет взять HWND из системного сообщения, подключиться к Аксапте, получить каким то образом по этому window handle ссылку на объект, который имплементирует это окно, и получить инфекс ячейки, которая была выбрана пользователем, получить содержимое ячейки, итерировать строки, столбцы, вобщем манипулировать со структурой данных. Для этих целей я думал воспользоваться СОМ, потому что вся эта информация нужна в той утилите, которая это все будет записывать в скрипте, то есть в QTP . Если первый вариант не возможен ( в чем я лично сомневаюсь), тогда давайте обсуждать дальше только второй сценарий (программа минимум). Как мне получить через рефлексию список всех объектов типа FormGridControl, которые были созданы в системе на данный момент, далее я обойду весь список, сравню window handle и найду тот контрол, по которому кликнул пользователь, и смогу выяснить все подробности об этом объекте (допустим что проблема интерпроцесс комуникации через СОМ у меня уже решена) Или может есть возможность у какого то глобального объекта в системе спросить список всех созданных форм, пройти весь список, обойти все child controls, и найти таким образом мой грид по хеэндлу. P.S> Кстати, если можно поменять имплементацию SysSetupFormRun, то почему нельзя классы контролов менять, не понял? Последний раз редактировалось batiskaf_new; 08.06.2006 в 13:26. |
|
08.06.2006, 13:44 | #19 |
Участник
|
есть системные закодированные на C++ объекты; есть классы которые реализованы на X++, которые являются наследником первых. (они обычно начинаются с Sys например, SysDictTable extends DictTable) не для всех классов они есть.
... зачем обходить все активные контролы, когда можно взять \Classes\Info\setLastActivatedForm и обойти только её ... Еще можно сесть на таймер и отслеживать все что возникает (пример http://belugin.info/sidax) |
|
08.06.2006, 13:52 | #20 |
Гость
|
Цитата:
Сообщение от batiskaf_new
1. Программа максимум - уметь подключаться к высокоуровневым сообщениям Аксапта контролов. WM_CLICKED меня не совсем устраивает, потому что я бы хотел знать точно что сделал user гридом, выбрал ячейку, выбрал строку, поменял значение ячейки, все эти вещи можно получить из нотификаций класса FormGridControl.
|
|
Теги |
crm2011 |
|
|