12.06.2006, 13:40 | #41 |
Участник
|
Цитата:
Сообщение от EVGL
С помощью класса ClassFactory. Пример: InventDimGlobal, SysGlobalCache.
Так в двухуровневой среде будет только экземляров, сколько двухуровневых клиентов. А в трехкровневой будет столько экземпляров, сколько AOT'ов в кластере. Или я чего-то не понимаю? |
|
12.06.2006, 13:44 | #42 |
Banned
|
Верно. Но с точки зрения прикладного программирования это несущественно.
|
|
12.06.2006, 13:53 | #43 |
Участник
|
боюсь, что для целей тестирования существенно.
batiskaf_new, разберитесь как стандартный функционал тестирования производительности управляет и контролирует клиентские сессии, как он раздает задания. Скорее всего, вам нужно будет повторить его поведение, если у вас нет возможности подождать 4ку. Разберитесь как объекты в Аксапте запоминают свое состояние между сессиями (методика работы с LastValue и методы pack/unpack) |
|
12.06.2006, 14:22 | #44 |
Участник
|
Давайте разбираться вместе.
Мне нужно на front-end клиенте запустить инстанс своего класса, ссылку на который я получу из своего процесса через бизнес коннектор. Через эту дверку я буду говорить с аксаптой, узнавать подробности о том или инном объекте. Объект этот должен быть синглотонм, чтобы работать с одним и тем же инстансом объекта как через бизнесс коннектор, так и внутри Ахапта кода. То есть тестирование предполагается напротив одного конечного клиента, это не Load Testing. Сохранять что то в Аксапте мне кажется не нужно, мой процесс будет опрашивать разные объекты и все что нужно будет сохранять у себя. |
|
12.06.2006, 17:21 | #45 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: batiskaf_new (1). |
12.06.2006, 17:29 | #46 |
Участник
|
Мерси за синглтон. А еще если просветите на предмет objectOnServer. Если мой класс будет заниматься объектами GUI то это значит что он только клиентский, и тогда в коде можно будети использовать только один кеш (infolog.globalCache()) ?
Стоп! Ничего не понятно с сессиями. Я сделал синглтон, в Аксапте написал диалог, который сохраняет значение поля класса, и через бизнесс коннектор сделал тоже самое, экземпляры оказались разные... Код через коннектор: Цитата:
Dim app As Axapta2
Dim obj1 As AxaptaCOMConnector.IAxaptaObject Set app = CreateObject("AxaptaCOMConnector.Axapta2") app.Logon configuration:="C:\Program Files\Microsoft Business Solutions\Axapta 3.0 SP3 Demo\Axapta Client\Bin\axconfig.axc" Set obj1 = app.CallStaticClassMethod("Class1", "instance") obj1.Call "f1", "VB" Цитата:
void clicked()
{ Class1 obj1 = Class1::instance(); obj1.f1("fuck"); super(); } Цитата:
public void f1(str name)
{ _name = name; } Последний раз редактировалось batiskaf_new; 12.06.2006 в 17:59. |
|
12.06.2006, 18:43 | #47 |
Banned
|
А это уже то, о чем mazzy говорил: SysGlobalCache привязан к сессии, а AxaptaCOMConnector открывает новую сессию.
Это обсуждение начинает утомлять. Если вы твердо решили изобретать велосипед, то сделать можно так: сохраняйте все события в памяти, в время от времени сбрасывайте на диск или в таблицу, как это делает Code Profiler в Аксапта. А потом анализируйте результат извне или опять в Аксапте. Хотя извне на кнопки программно нажимать - занятие, заранее обреченное на неудачу. COMConnector не для этого создан. |
|
|
За это сообщение автора поблагодарили: batiskaf_new (1). |
12.06.2006, 19:07 | #48 |
Участник
|
Я догадываюсь что Logon открывает новую сессию. Проблема в том, что об этом в документации ничего не написано! Собственно я сейчас проверяю методом тыка все варианты взаимодействия с Аксаптой из моего процесса, и с какими ограничениями я могу столкнуться, варианты исследования GUI объектов из моего процесса. Все это позже скажется на способе интеграции.
Конечно было бы проще заказать у кого то готовый модуль с требуемым сервисом, но судя по всему таким извратом мало кто хочет заниматься, так что прийдется самому. |
|
12.06.2006, 19:11 | #49 |
Участник
|
Цитата:
Сообщение от batiskaf_new
Конечно было бы проще заказать у кого то готовый модуль с требуемым сервисом, но судя по всему таким извратом мало кто хочет заниматься
|
|
|
За это сообщение автора поблагодарили: batiskaf_new (1). |
13.06.2006, 09:58 | #50 |
Участник
|
************ отредактировано модератором: коммерческие предложения и реклама только в разделе рынок *************
И еще технический вопрос, можно ли получить из любого объекта Аксапты некий хеш, по которому позже можно восстановить сам объект, типа как это делалось в Java? |
|
13.06.2006, 10:03 | #51 |
Участник
|
если имеете ввиду серилизацию, то вместо нее - паковка (интерфейс SysSavable, методы pack, unpack статический метод create кое-где есть но кое-где и нет)
|
|
13.06.2006, 10:31 | #52 |
Участник
|
Цитата:
Сообщение от belugin
если имеете ввиду серилизацию, то вместо нее - паковка (интерфейс SysSavable, методы pack, unpack статический метод create кое-где есть но кое-где и нет)
|
|
13.06.2006, 10:35 | #53 |
Участник
|
неа. причем это не хэш (хэш может быть неуникальный) и в жабе вроде такого нет. Создавайте свой Map идентификатор -> объект
|
|
|
За это сообщение автора поблагодарили: batiskaf_new (1). |
13.06.2006, 11:38 | #54 |
Banned
|
Цитата:
Сообщение от batiskaf_new
Да не совсем сериализация. Мне нужен дескриптор объекта, по которому можно быстро получить сам объект. То есть объект продолжает жить, я же получаю число, из которого позже я смогу найти тот же самый экземпляр. Операция эта может быть не гарантированной, то есть если экземпляр почил к тому времени - значит так тому и быть.
Используйте системный класс ObjectIdent. Пример работы с ним можно найти в \Classes\Info. |
|
13.06.2006, 11:41 | #55 |
Участник
|
ObjectIdent - это слабая ссылка что ли?
|
|
13.06.2006, 11:50 | #56 |
Banned
|
Цитата:
Сообщение от belugin
ObjectIdent - это слабая ссылка что ли?
|
|
18.06.2006, 14:53 | #57 |
Участник
|
Всем привет, давно не виделись.
Как в Аксапте на Х++ можно запустить некий автоматический код, в неявном виде. Для наглядности, к примеру в С++ это делалось следующим образом: static struct _SomeRegistration { _SomeRegistration() { RegisterAgent(); } ~_SomeRegistration() { UnregisterAgent(); } } _registrator; В итоге, запускается некий код инициализаций, все эти подготовки не нужно запускать из main или какого то централизованного места. Как с этим обстоят дела в аксапте? |
|
19.06.2006, 09:40 | #58 |
Участник
|
я думаю, никак. а зачем?
тут как в жабе - можно просто в конструктор класса прописать код инициализации. |
|
19.06.2006, 10:11 | #59 |
Участник
|
Цитата:
Сообщение от belugin
я думаю, никак. а зачем?
Цитата:
Сообщение от belugin
тут как в жабе - можно просто в конструктор класса прописать код инициализации.
static struct _SomeRegistration { //Constructor of _SomeRegistration structure _SomeRegistration() { RegisterAgent(); } //Desctructor of _SomeRegistration structure ~_SomeRegistration() { UnregisterAgent(); } } _registrator; // При создании автоматического объекта _registrator вызывается его конструктор Вызов дуструктора мне не нужен, это для симметричности написано, мне главное конструктор. Если в Х++ таких средств нет, то возможно нечто подобное получится сделать другими средствами, например вставить какой то MenuItem оброботчиком которого будет мой класс, экземпляр которого создаст система во время старта Аксапты, и в конструкторе экземпляра я проделаю все что нужно? Что нибудь такое нужно. |
|
19.06.2006, 10:17 | #60 |
Участник
|
*вы не сможете создать объект без запуска конструктора
*посмотрите на erpkb "запуск и остановка". |
|
Теги |
crm2011 |
|
|