05.10.2004, 12:07 | #1 |
Участник
|
запуск формы в Ахаpta сторонним приложением
Здравствуйте.
Есть Axapta и стороннее приложение в которое частично передаются какие-то данные из Axapta. В приложение есть кнопка "А как это выглядит в Axapta?", при нажатии на которую надо открыть Axapta и в ней открыть нужную форму. Когда у пользователя ещё не запущена Axapta, то можно через Shell вызвать командную строку где передать какие-то параметры. В Axapta при запуске анализировать эти параметры и запускать нужную форму. Но как это сделать если Axapta уже запущена? Заранее благодарю. |
|
05.10.2004, 12:18 | #2 |
Участник
|
Пусть внешнее приложение что-то пишет в файл. А Аксапту запустить в батч-режиме с периодической операцией, поверяющей этот файл.
Только нужно иметь в виду, что не любая же форма откроется сама по себе независимо.. часто же требуется сначала передача каких-то параметров.. например, строки журнала не открыть без открытия самого журнала (=передачи <u>конкретной записи</u> "шапки" этого журнала). Миш, как ты будешь это разруливать для произвольных форм? |
|
05.10.2004, 12:28 | #3 |
Участник
|
Цитата:
Пусть внешнее приложение что-то пишет в файл. А Аксапту запустить в батч-режиме с периодической операцией, поверяющей этот файл.
Это много. Нужна более адкватная реакция Axapta. Цитата:
Миш, как ты будешь это разруливать для произвольных форм?
Есть какие-то проблемы с передачей параметров в форму? |
|
05.10.2004, 12:38 | #4 |
Moderator
|
Честно говоря, не нравится сама постановка задачи Ну да ладно.
Если есть лицензии на COM-пользователя, то можно использовать этот механизм. В аксапте пишем класс, который получает парамеры, открывает форму и делает какие-либо еще действия. Из своего класса используем этот класс, как COM-класс с помощью Business Connector. |
|
05.10.2004, 12:49 | #5 |
Участник
|
Здесь было мое неправильное ТЗ, смотрите мое правильное ТЗ ниже
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход! |
|
05.10.2004, 13:00 | #6 |
Moderator
|
demID, а почему бы не передавать имя формы, как парамерт класса, а не через табличку ?
В случае нескольких клиентов, DemoTable станет узким местом. А вообще, я бы пересмотрел этот момент: Цитата:
В приложение есть кнопка "А как это выглядит в Axapta?", при нажатии на которую надо открыть Axapta и в ней открыть нужную форму.
COM-класс может возвращать искомое значение клиенту, которое само будет отображать данное значение + выполнять какую-либо логику в случае расхождения значений. |
|
05.10.2004, 13:03 | #7 |
Участник
|
Вот ТЗ на реализацию этого решения:
1. В Аксапте создать таблицу "MyDemoTable", в ней одно строковое поле "FormName". 2. В Аксапте создать класс "RunFormDemo", в этом классе создаем один статический метод "ShowThisForm(str _formName)". В качестве параметра в этот метод будет передаваться название той формы, которую нужно показать. Этот метод должен создавать новую запись в таблице MyDemoTable(если там еще нет ни одной записи) и в поле "FormName" этой таблицы записывать значение параметра _formName. 3. В Аксапте создать форму MyDemoForm. 4. В этой форме создать метод RunDemoForm. Этот метод будет считывать первую запись из таблицы MyDemoTable, показывать на экране указанную в поле FormName форму, и в конце удалять все записи из таблицы MyDemoTable. В конце метода RunDemoForm написать код PHP код:
PHP код:
7. Напишите для вызова формы в Аскапте примерно такой код (это пример на VB): PHP код:
9. Запустите в Вашей программе Ваш код, описанный в пункте 7. 10. В Аксапте должна открыться форма "Заказы". 11. Для полного счастья напишите в Вашей программе код, который устанавливает фокус на приложение Аксапты.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход! |
|
05.10.2004, 13:06 | #8 |
Участник
|
Вся идея указанного мной решения в том, что нужная форма вызывается не через COM connector напрямую, а косвенно, через таймер и через запущенную предварительно форму в Аксапте.
Это потому, что, как я представляю, напрямую в вызове Аксапты через COM формы открывать нельзя.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход! |
|
05.10.2004, 13:13 | #9 |
Участник
|
имхо, нужно как можно меньше программирования
имхо, не проще ли использовать стандартный батч-режим, уменьшив интервал опроса до нужного ? насколько вижу в class BatchRun, там явно задано: <b> sleep(1000);</b> |
|
05.10.2004, 13:18 | #10 |
Участник
|
2zabr. Может быть, лучше и так. Не рассматривайте мое ТЗ как хорошее решение. Это кривое, но решение такой же кривой задачи.
Я пишу в этом форуме потому, что учусь, а не потому, что все знаю.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход! |
|
05.10.2004, 13:29 | #11 |
Участник
|
demID, я Вас не критикую постановка задачи действительно может выглядеть кривой.. но мы же не знаем начальных условий постановки... возможно это какой-то учебный проект...
|
|
05.10.2004, 14:03 | #12 |
Участник
|
2 Andre
Если надо обеспечить "многопользовательскость", то в таблицу MyDemoTable добавить поле UserId. Далее фильтровать везде это поле по curUserId(). А чтобы эта форма открылась одноременно на всех компьютерах в учебном классе, то в эту таблицу вставлять столько записей, сколько юзеров в системе.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход! |
|
05.10.2004, 14:12 | #13 |
Moderator
|
Цитата:
2 Andre
Если надо обеспечить "многопользовательскость", то в таблицу MyDemoTable добавить поле UserId. Если задача стоит в проверке соответствия данных в Аксапте и внешнем приложении (причем проверка должна осуществляться из внешенего приложения), то данной цели можно достичь и без открытия формы в Аксапте Как именно, я писал выше. Хотя, может быть, что задача гораздо шире и предложеное мною решение не жизнеспособно. Ответить на этот вопрос может только mpogorelov, который пока не отвечает. А все остальное - это всего лишь предположения |
|
05.10.2004, 15:19 | #14 |
Участник
|
Если я правильно понял, то через AxaptaCOMConnector я пишу в некую табличку данные для запуска нужной формы.
Создаю метод формы где читаю из таблички эти данные и запускаю нужные формы, и вешаю на этотм метод таймер. Т.е. получается некий аналог батч-режима только с более частыми вызовами? |
|
05.10.2004, 15:23 | #15 |
Участник
|
Миша, почти всё уже придумано до нас
|
|
05.10.2004, 15:30 | #16 |
Участник
|
Цитата:
Если я правильно понял, то через AxaptaCOMConnector я пишу в некую табличку данные для запуска нужной формы.
Создаю метод формы где читаю из таблички эти данные и запускаю нужные формы, и вешаю на этотм метод таймер. Т.е. получается некий аналог батч-режима только с более частыми вызовами? Не в обиду Zabr'у будет сказано, Вы меня абсолютно точно поняли
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход! |
|
05.10.2004, 15:37 | #17 |
Участник
|
Спасибо, demID
Буду пробовать. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Создание Lookup формы | 9 | |||
Запуск пакетника без формы | 8 | |||
Запуск формы | 6 | |||
Русская локализация Axapta 3 ? | 59 | |||
Динамические Lookup формы. | 0 |
|