07.06.2006, 13:43 | #1 |
Участник
|
День добрый всем. С аксаптой я знаком всего несколько дней, проект ожидается не продолжительный, потому предпочтительно прибегнуть к помощи экспертов.
Кстати Аксапта эта мне очень сильно напоминает SmallTalk, аналогичные идеи, решения.
|
|
07.06.2006, 14:26 | #2 |
Участник
|
Цитата:
И как хорошо вас понимаю... Цитата:
Сообщение от Sergey Batiskaf
Значит вопрос первый думаю стандартный, документация по классам, в нете практически ничего нет, как с этим всем разбираться? Вот хочу я создать инстанс другой формы из метода моего класса, нужно использовать ClassFactory::fromRunClassOnClient? Или что то другое? Как заполнить Args, в каком формате это принято делать? Все это можно понять только при наличии документации.
Ищите по крохам. Например, как здесь Описание скрытых объектов или по ссылкам http://axapta.mazzy.ru/links или тренингах или в книжках. Почему такая ситуация? Дело в том, что разработчики болели идеей самодокументируемого кода. Вы постоянно будете натыкаться на зачатки инструментов анализа кода... Самый импользуемый - перекрестные ссылки http://axapta.mazzy.ru/lib/xref/ http://axapta.mazzy.ru/lib/explore/ http://axapta.mazzy.ru/lib/explorepricelist/ а также Visual MorphXplorer (он показан здесь http://axapta.mazzy.ru/lib/querytuning/ ) Есть и другие инструменты, но они почти бесполезны... Поскольку в какой-то момент объем кода стал настолько большим и взаимосвязей настолько много, что без документации понять принципы работы системы невозможно. Ваши вопросы именно по принципам работы. Совет: начните с tutorial-объектов, проштудируйте их. http://axapta.mazzy.ru/lib/gettingstarted/ Посмотрите тажке сюда http://erpkb.com/Axapta/Programmirovanie?v=1c65 Цитата:
Сообщение от Sergey Batiskaf
СОМ взаимодействие. Из примеров более менее ясно как построить ссылку на объект. Меня интересует как в Х++ собрать класс, который я смогу передать в методы СОМ объекта в качестве аргумента, и из СОМ-а уже вызывать эти методы Аксапта обьекта? Где то прочитал что можно унаследоваться от класса СОМ и получится как бы то что нужно. Можно подробности, какие методы, кроме наследования, нужно перекрыть, как имплементировать тот или инной интерфейс, который определен в АктивХ ТЛБ, какой тип интерфейса возможно имплементировать - дюал или только диспинтерфейс для позднего связывания?
Проштудируйте классы семейтва ax*. Эти классы предназначены именно для обращения извне. Цитата:
Сообщение от Sergey Batiskaf
Язык видимо джавоидный, значит должна быть рефлексия, как ей воспользоваться для исследования типов в рантайме, для имплементации позднего связывания и вызовов методов посредством рефлексии? Помнится в СмолТоке можно было получить все инстансы конкретного класса, которые были построены сейчас, как с этим обстоят дела в Х++?
Изучите семейство системных классов Dict* Для работы в рантайме инструментов мало. Функции typеof, dimof, некоторые методы в классе Global и также некоторые статитические методы в классах семейства Dict* Цитата:
Сообщение от Sergey Batiskaf
Подписка на GUI controls Events. Судя по тому что я вижу, можно перекрыть метод и обрабатывать таким образом сообщение. Как реализовать множественного наблюдателя, как в Джаве или .Нет, котгда есть возможность засунуть список листнеров\делегатов на одно событие, чтобы можно было это проделать в рантайме, не перекрывая заранее методы в дизайн тайме.
Нет, такого нет. Цитата:
Сообщение от Sergey Batiskaf
Если предыдущий пункт не получается проделать, тогда выхода нет и прийдется править классы контролов (кнопок, списков, таблиц), встраивать тот когд, который мне необходим туда. Принято ли это делать, и можно ли вообще поменять имплементацию классов стандартной библиотеки (опять же в СмолТоке это делалось), к примеру я хочу дописать пару строк в ClassFactory::fromRunClassOnClient, или в Button.clicked
Да, можно, но осторожно. Прочитайте главу "Design guidelines for cost-efficient upgrades" в Best Practice. Цитата:
Сообщение от Sergey Batiskaf
Если и этого нельзя сделать, тогда может есть какие то метасредства? В некоторых версиях Смолтока можно было добавлять пре и пост кондишнс на конкретные методы, для меня это как раз, например к методу Button.clicked в пост кондишн добавить пару моих строк кода, который будет вызываться с теми же аргументами что и обработчик сообщения. (Такой метод был бы предпочтительнее чем менять библиотечные классы, которые с новыми петчами могут тоже поменяться и вся моя писанина уйдет коту под хвост).
Метасредства есть. Но их бездумное использование приводит к очень большому объему программирования. Прежде всего вам придется очень внимательно перехватывать код, относящийся к безопасности, включению/выключению функционала, автосвязыванию форм и датасорсов... Кроме того, стандартный уже существующий функционал, за редким исключением, практически не использует метасредств. Поэтому ваши вставки будут выглядеть инородным телом. В общем, на первых порах, лучше не используйте метасредства. Изучите аспекты поведения ядра. Тогда вам перехватывать события будет намного легче. Цитата:
См. генератор отчетов, генератор классов, а также скрипты в редакторе... Но будьте осторожны. Аксапта хороша не как инструмент программирования. А как готовая бизнес-логика с возможностью быстрой и удобной доработки. Если ваша "доработка" становится более дорогой, нежели создание новой программы в Delphi, VS или в другой инструментальной среде... То использование Аксапты теряет всяческий смысл. Вопрос не в можно/нельзя. Вопрос в рационально/нерационально. См. также проекты по самомодификации Аксапты http://www.axforum.info/forums/showthread.php?t=7788 http://www.axforum.info/forums/showthread.php?t=13282 http://www.axforum.info/forums/showthread.php?t=11701 |
|
07.06.2006, 14:40 | #3 |
Участник
|
Спасибо за быстрый и содержательный ответ.
Я в среде еще не настолько освоился. Когда вы пишите "Изучите семейство системных классов Dict*" как мне туда добраться, какими поисковыми средствами? Я пользуюсь Lookup Defenition по контекстному меню, иногда среда выдает тело метода или определение класса, иногда нет. Видимо демо версия кастирована, и многие вещи не позволяет делать. Что касается моих доработок, то у меня немного другая задача, мне нужно интегрировать аксапут со средствами автоматического фанкшнал тестинга, чтобы любого рода аппликации написанные на Аксапте можно было бы автоматически протестировать. Потому и вопросы такие спецефические, покачто только примеряюсь как прозрачнее провести интеграцию системы. |
|
07.06.2006, 15:19 | #4 |
Участник
|
AOT \System Documentation \ Classes \ Dict*
|
|
07.06.2006, 16:25 | #5 |
Участник
|
Цитата:
знаком всего несколько дней, проект ожидается не продолжительный
Цитата:
Сообщение от Sergey Batiskaf
Что касается моих доработок, то у меня немного другая задача, мне нужно интегрировать аксапут со средствами автоматического фанкшнал тестинга, чтобы любого рода аппликации написанные на Аксапте можно было бы автоматически протестировать. Потому и вопросы такие спецефические, покачто только примеряюсь как прозрачнее провести интеграцию системы.
|
|
07.06.2006, 17:00 | #6 |
Участник
|
Цитата:
Маленький совет. Лучше подождите Аксапту 4.0. Там модуль тестирования и самотестирования встроен унутрь... |
|
07.06.2006, 18:13 | #7 |
Участник
|
Цитата:
Для информации, у меня задача интегрировать приложения Аксапты с Mercury QTP Functional Testing Вы имели ввиду нечто подобное? Цитата:
Цитата(Sergey Batiskaf @ 07.06.2006, 13:43) *
СОМ взаимодействие. Из примеров более менее ясно как построить ссылку на объект. Меня интересует как в Х++ собрать класс, который я смогу передать в методы СОМ объекта в качестве аргумента, и из СОМ-а уже вызывать эти методы Аксапта обьекта? Где то прочитал что можно унаследоваться от класса СОМ и получится как бы то что нужно. Можно подробности, какие методы, кроме наследования, нужно перекрыть, как имплементировать тот или инной интерфейс, который определен в АктивХ ТЛБ, какой тип интерфейса возможно имплементировать - дюал или только диспинтерфейс для позднего связывания? Читайте руководство разработчика, раздел Axapta Business Connector. Проштудируйте классы семейтва ax*. Эти классы предназначены именно для обращения извне. Axapta Business Connector это немного не то. Мне нужно из Аксапты (Х++) создать СОМ объект, и передать в метод этого обьекта ссылку на Х++ MyInsideAxaptaObject. Попробовал унаследовать MyInsideAxaptaObject class от класса СОМ, передавать объекты теперь можно, но в коде СОМ объекта эта ссылка почему то нулевая. Может нужно еще что то заимплементировать? |
|
07.06.2006, 18:27 | #8 |
Участник
|
COM-объекты принимают и возвращают переменные только с типом Vatiant.
Посмотрите на системный Аксаптовский класс Variant. |
|
08.06.2006, 10:47 | #9 |
Участник
|
Цитата:
Значит есть у меня класс: class MyClass extends COM { public void f1() { Print("MyClass::f1"); } } дальше я строю какой то СОМ обж., и передаю ему инстанс на MyClass: void main() { COM srv = new COM("MyVBCOM"); srv.setcallback(new MyClass() ); } Где в setcallback происходит следующее: function setcallback (obj as Object) obj.f1 end function Значтит когда я не наследую класс MyClass от СОМ то все это падает на момент передачи Аксапта обьекта в метод СОМ, рантайм говорит что эта переменная не может передаваться в СОМ метод. Когда я наследую от СОМ, то передача происходит нормально, но в VB методе setcallback переменная obj имеет значение Nothing. Я так подозреваю что во время передачи в СОМ метод происходит у моего аксапта обьекта QueryInterface, и ни один интерфейс не находится, возвращается ноль. В COMVariant запаковать этот обьект тоже не получается, по логике вещей нужно инициализировать его как iDispatch, но метод этот принимает тип comInterface, кастинг не проходит. Видимо MyClass нужно заимплементировать СОМ интерфейс, чтобы QueryInterface вернул нармальное значение, а как это делается? Как объявить в Аксапте интерфейс, и еще в добавок ко всему СОМ, как имплементировать его в классе? Вопросы касаются обычного синтаксиса, видимо. |
|
08.06.2006, 12:58 | #10 |
Участник
|
Цитата:
Сообщение от belugin
Насколько я знаю, такого делать нельзя. Колбеков в аксапте нет, кроме событий ActiveX объектов.
Колбеки меня тоже устраивают, только при условии что мне не прийдется строить окно, на котором будет лежать ActiveX, мне нужно написать класс с перекрытыми методами-обработчиками событий. |
|
08.06.2006, 13:32 | #11 |
Участник
|
Цитата:
|
|
08.06.2006, 13:54 | #12 |
Участник
|
Цитата:
см. то, что генерит ком визард
|
|
08.06.2006, 14:01 | #13 |
Участник
|
// SourceSafe checkouts interface
interface IVSSCheckout { } // SourceSafe database object interface interface IVSSDatabase extends IVSSDatabaseOld { } а вот наследования там нет - (VSSDatabase implements IVSSDatabase) где-то еще было - поищите intarface по коду |
|
08.06.2006, 14:11 | #14 |
Участник
|
// SourceSafe database object interface
interface IVSSDatabase extends IVSSDatabaseOld { } а вот наследования там нет - (VSSDatabase implements IVSSDatabase) где-то еще было - поищите interface по коду |
|
08.06.2006, 14:25 | #15 |
Участник
|
Расскажите мне, как вы это находите! Я долбашу полчаса по кнопкам чтобы найти класс дефенишн! Как мне построить свой интерфейс в моем проекте руками, без визарда? Я фигею, в такой оболочке вы еще умедряетесь что то разрабатывать и находить?
|
|
08.06.2006, 14:41 | #17 |
Участник
|
Большое вам человеческое спасибо! Хто же знал что нужно АОТ открыть... Теперь я буду экспертом, сто пудов!
|
|