15.08.2003, 18:25 | #1 |
Участник
|
Исполнение методов класса на стороне сервера (AOS)?
Добрый вечер!
Прошу помощи... Имеем трехуровневую конфигурацию (AOS на выделенной машине) Есть принципиальная задача - с клиента инициировать создание класса на стороне сервера (AOS), управлять его методами и возвращать результат выполнения этих методов на клиента. Пытаюсь решить: 1. создаю класс xTmp со свойством RunOn = Server 2. в этом классе создаю метод, например такого вида: server static void Test() { ; info('hello'); } 3. Затем создаю форму и на clicked() метод одной из кнопок вешаю такой код: void clicked() { xTmp xT; super(); xT = new xTmp(); xT.Test(); } в результате выполнения формы появляется ошибка, что метод Test в классе xT не определен, если же описание метода Test изменить на: void Test() { ; info('hello'); } то он выполняется, но только на стороне клиента... В результате хотелось бы, что бы сообщение hello появилось на машине с AOS... Возможно ли такое поведение осуществить в аксапте с трехуровневой конфигурации и если можно, то как это сделать? Вообще необходимо запусить внешнюю, по отношению к аксапте, задачу на стороне сервера (AOS), дождаться ее завершения и вернуть результат на, иницирующего запуск внешней задачи, клиента. Заранее спасибо... |
|
16.08.2003, 00:03 | #2 |
Участник
|
Особенности static методов
В виду того, что в первоначальном варианте объявляется static метод, для его вызова необходимо использовать следующий код:
PHP код:
|
|
18.08.2003, 10:00 | #3 |
Участник
|
Исполнение методов класса на стороне сервера (AOS)?
Максим, спасибо за замечание...
Но, вопрос остается открытым... Класс с параметром RunOn = Server и его метод объявленный как server static все равно выполняются на стороне клиента... Не пойму почему... Или в среде аксапты это сделать невозможно? |
|
18.08.2003, 10:10 | #4 |
----------------
|
вопрос
Извините за вопрос, а как Вы определили, что метод выполнился на клиенте, а не на сервере?
|
|
18.08.2003, 10:16 | #5 |
Участник
|
Чтобы на AOS появилось сообщение - нельзя такое сделать из Аксапты. Да и зачем? Если очень хочеться, можно использовать winApi :-)
|
|
18.08.2003, 10:56 | #6 |
Участник
|
Мне необходимо запусить внешнюю, по отношению к аксапте, задачу на стороне сервера (AOS), дождаться ее завершения и вернуть результат на клиента.
Запустить внешнюю задачу и ждать ее завершения я умею, теперь мне необходимо чтобы внешняя задача запускалась на машине с AOS... 2 Wamr: Согласен, что пример с использованием info() не лучший, т.к. оказывается все GUI выполняются только на стороне клиента... Тогда как оценить, что код исполнился на сервере? 2 kalex: Выводить сообщение мне не нужно см выше... Хорошо упростим задачу... Вопрос, как открыть calc.exe или notepad.exe на сервере? Метод RunWait() класса с параметром RunOn=Server, объявленный как: server static void RunWait() { COM wsh; int li_rc; wsh = new COM("WScript.Shell"); li_rc = wsh.Run("calc" , 1, TRUE); } открывает калькулятор на клиенте... |
|
18.08.2003, 11:14 | #7 |
----------------
|
winAPI
Ничего конкретного сказать не могу.
Из личного опыта - далеко не все ф-ции WinAPI будут выполняться в серверных методах, так что удастся или нет надо пробовать. но заманчиво.. взять да запустить на серваке что-дь. Аксапта как троян - круто! |
|
19.08.2003, 11:34 | #8 |
NavAx
|
Не совсем понял зачем info нужно на стороне сервера ?
Если Вам нужно что-то обработать на сервере - то обрабатывайте а зачем сообщение на стороне сервера? Вот что написано в описании. The class has a RunOn property that can have these values: Client Called from Server. Objects created from the class will then live at the location specified. If you choose Called from, the object will live at the tier where the code creating it (by calling the new constructor) is running. Classes extending other classes will also inherit the RunOn property. You cannot change it if it is Client or Server. If it Called from, you can leave it or change it to Client or Server. Это из описания... Поясните пожалуйста, похоже Вас не понимают, как и я |
|
19.08.2003, 11:39 | #9 |
NavAx
|
Прошу прошения. Не внимательно прочитал.
Понял. Интересный вопрос Вы задаете. Это примерно тоже самое как запустить на AOS Word. Сомневаюсь, что это возможно. А простите для чего это нужно? Может быть можно какой-нить другой вариант Вам присоветовать? |
|
19.08.2003, 11:56 | #10 |
Участник
|
Вышеприведённый код у меня на сервере исполнялся. Правда в результате клиент завис, а калькулятор на сервере увидеть можно было только в процессах. :-) (Axapta 3.0 SP1)
|
|
25.08.2003, 12:22 | #11 |
Участник
|
Подвожу итоги:
Описанная технология работает, правда с некоторыми оговорками (работает только с тонким клиентом в 3-х уровневой конфигурации) To kalex: Клиент у вас не завис, а как раз ждет окончания работы запущенной программы на сервере. Это как раз то что мне было нужно. В случае, если вы вызывали calc.exe, то действительно он появляется на сервере только в списке задач (видно визуальные вещи таким образом запустить на серевере не удастся - ну оно на сервере и не надо ) и если его убить, то ваш клиент оживет... Этот код у меня исполнялся на клиенте в трехуровневой конфигурации потому что я соединялся в AOS'ом толстым клиентом, как только установил соединение тонким клиентом код стал исполняться на сервере... (немного странное поведение класса при условии что его свойство установлено RunOn=Server... ну да ладно) То Megacrusher: Задача у меня была принципиальная - запустить на стороне сервера внешнюю задачу, дождаться его выолнения и вернуть на клиента результат - успешно или нет все прошло. Решалась эта задача применительно к запуску внешнего для аксапты репортера Спасибо всем, кто принимал участие... |
|
28.08.2003, 16:15 | #12 |
Участник
|
Цитата:
Изначально опубликовано SnowMan
Подвожу итоги: Описанная технология работает, правда с некоторыми оговорками (работает только с тонким клиентом в 3-х уровневой конфигурации) Этот код у меня исполнялся на клиенте в трехуровневой конфигурации потому что я соединялся в AOS'ом толстым клиентом, как только установил соединение тонким клиентом код стал исполняться на сервере... (немного странное поведение класса при условии что его свойство установлено RunOn=Server... ну да ладно) Спасибо всем, кто принимал участие... При 2-уровневой конфигурации так и должно быть. |
|