AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.10.2004, 12:07   #1  
mpogorelov is offline
mpogorelov
Участник
 
20 / 10 (1) +
Регистрация: 29.04.2004
запуск формы в Ахаpta сторонним приложением
Здравствуйте.

Есть Axapta и стороннее приложение в которое частично передаются какие-то данные из Axapta.
В приложение есть кнопка "А как это выглядит в Axapta?", при нажатии на которую надо открыть Axapta и в ней открыть нужную форму.
Когда у пользователя ещё не запущена Axapta, то можно через Shell вызвать командную строку где передать какие-то параметры. В Axapta при запуске анализировать эти параметры и запускать нужную форму.
Но как это сделать если Axapta уже запущена?

Заранее благодарю.
Старый 05.10.2004, 12:18   #2  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Пусть внешнее приложение что-то пишет в файл. А Аксапту запустить в батч-режиме с периодической операцией, поверяющей этот файл.
Только нужно иметь в виду, что не любая же форма откроется сама по себе независимо.. часто же требуется сначала передача каких-то параметров.. например, строки журнала не открыть без открытия самого журнала (=передачи <u>конкретной записи</u> "шапки" этого журнала). Миш, как ты будешь это разруливать для произвольных форм?
Старый 05.10.2004, 12:28   #3  
mpogorelov is offline
mpogorelov
Участник
 
20 / 10 (1) +
Регистрация: 29.04.2004
Цитата:
Пусть внешнее приложение что-то пишет в файл. А Аксапту запустить в батч-режиме с периодической операцией, поверяющей этот файл.
Минимальный интервал для батч режима 1 минута.
Это много. Нужна более адкватная реакция Axapta.

Цитата:
Миш, как ты будешь это разруливать для произвольных форм?
Не понял.
Есть какие-то проблемы с передачей параметров в форму?
Старый 05.10.2004, 12:38   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Честно говоря, не нравится сама постановка задачи Ну да ладно.
Если есть лицензии на COM-пользователя, то можно использовать этот механизм.
В аксапте пишем класс, который получает парамеры, открывает форму и делает какие-либо еще действия. Из своего класса используем этот класс, как COM-класс с помощью Business Connector.
Старый 05.10.2004, 12:49   #5  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Регистрация: 16.08.2004
Адрес: Москва
Здесь было мое неправильное ТЗ, смотрите мое правильное ТЗ ниже
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 05.10.2004, 13:00   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
demID, а почему бы не передавать имя формы, как парамерт класса, а не через табличку ?
В случае нескольких клиентов, DemoTable станет узким местом.

А вообще, я бы пересмотрел этот момент:

Цитата:
В приложение есть кнопка "А как это выглядит в Axapta?", при нажатии на которую надо открыть Axapta и в ней открыть нужную форму.
Что нам надо ? Узнать как это выглядит в Аксапте. Но открыть Аксапту - это не единственный способ получить данную информацию.

COM-класс может возвращать искомое значение клиенту, которое само будет отображать данное значение + выполнять какую-либо логику в случае расхождения значений.
Старый 05.10.2004, 13:03   #7  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Регистрация: 16.08.2004
Адрес: Москва
Вот ТЗ на реализацию этого решения:
1. В Аксапте создать таблицу "MyDemoTable", в ней одно строковое поле "FormName".
2. В Аксапте создать класс "RunFormDemo", в этом классе создаем один статический метод "ShowThisForm(str _formName)". В качестве параметра в этот метод будет передаваться название той формы, которую нужно показать. Этот метод должен создавать новую запись в таблице MyDemoTable(если там еще нет ни одной записи) и в поле "FormName" этой таблицы записывать значение параметра _formName.
3. В Аксапте создать форму MyDemoForm.
4. В этой форме создать метод RunDemoForm. Этот метод будет считывать первую запись из таблицы MyDemoTable, показывать на экране указанную в поле FormName форму, и в конце удалять все записи из таблицы MyDemoTable. В конце метода RunDemoForm написать код
PHP код:
this.setTimeout(identifierstr(RunDemoForm), 100true); 
5. В этой же форме перекрыть метод Run. В методе Run после вызова super() поместить такой же код
PHP код:
this.setTimeout(identifierstr(RunDemoForm), 100true); 
6. В коде вашей программы подключите Axapta COM Connector Type Library.
7. Напишите для вызова формы в Аскапте примерно такой код (это пример на VB):
PHP код:
    Dim ax As New AxaptaCOMConnector.Axapta2
    
    ax
.Logon2 "dem""", , , , , "Test" // "dem" - имя пользователя, второй параметр - пароль, "Test" - название аксаптовской конфигурации(из конфигурационной утилиты)
    
ax.CallStaticClassMethod "RunFormDemo""ShowThisForm""SalesTable" 
8. Запустите в Аксапте форму, описанную в пункте 3.
9. Запустите в Вашей программе Ваш код, описанный в пункте 7.
10. В Аксапте должна открыться форма "Заказы".
11. Для полного счастья напишите в Вашей программе код, который устанавливает фокус на приложение Аксапты.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 05.10.2004, 13:06   #8  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Регистрация: 16.08.2004
Адрес: Москва
Вся идея указанного мной решения в том, что нужная форма вызывается не через COM connector напрямую, а косвенно, через таймер и через запущенную предварительно форму в Аксапте.
Это потому, что, как я представляю, напрямую в вызове Аксапты через COM формы открывать нельзя.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 05.10.2004, 13:13   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
имхо, нужно как можно меньше программирования
имхо, не проще ли использовать стандартный батч-режим, уменьшив интервал опроса до нужного ? насколько вижу в class BatchRun, там явно задано: <b> sleep(1000);</b>
Старый 05.10.2004, 13:18   #10  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Регистрация: 16.08.2004
Адрес: Москва
2zabr. Может быть, лучше и так. Не рассматривайте мое ТЗ как хорошее решение. Это кривое, но решение такой же кривой задачи.
Я пишу в этом форуме потому, что учусь, а не потому, что все знаю.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 05.10.2004, 13:29   #11  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
demID, я Вас не критикую постановка задачи действительно может выглядеть кривой.. но мы же не знаем начальных условий постановки... возможно это какой-то учебный проект...
Старый 05.10.2004, 14:03   #12  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Регистрация: 16.08.2004
Адрес: Москва
2 Andre
Если надо обеспечить "многопользовательскость", то в таблицу MyDemoTable добавить поле UserId. Далее фильтровать везде это поле по curUserId(). А чтобы эта форма открылась одноременно на всех компьютерах в учебном классе, то в эту таблицу вставлять столько записей, сколько юзеров в системе.
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 05.10.2004, 14:12   #13  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
2 Andre
Если надо обеспечить "многопользовательскость", то в таблицу MyDemoTable добавить поле UserId.
Я говорил не о возможности "многопользовательской" работы. А о соответствии задачи решению.
Если задача стоит в проверке соответствия данных в Аксапте и внешнем приложении (причем проверка должна осуществляться из внешенего приложения), то данной цели можно достичь и без открытия формы в Аксапте Как именно, я писал выше.
Хотя, может быть, что задача гораздо шире и предложеное мною решение не жизнеспособно. Ответить на этот вопрос может только mpogorelov, который пока не отвечает. А все остальное - это всего лишь предположения
Старый 05.10.2004, 15:19   #14  
mpogorelov is offline
mpogorelov
Участник
 
20 / 10 (1) +
Регистрация: 29.04.2004
Если я правильно понял, то через AxaptaCOMConnector я пишу в некую табличку данные для запуска нужной формы.
Создаю метод формы где читаю из таблички эти данные и запускаю нужные формы, и вешаю на этотм метод таймер.
Т.е. получается некий аналог батч-режима только с более частыми вызовами?
Старый 05.10.2004, 15:23   #15  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Миша, почти всё уже придумано до нас
Старый 05.10.2004, 15:30   #16  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Регистрация: 16.08.2004
Адрес: Москва
Цитата:
Если я правильно понял, то через AxaptaCOMConnector я пишу в некую табличку данные для запуска нужной формы.
Создаю метод формы где читаю из таблички эти данные и запускаю нужные формы, и вешаю на этотм метод таймер.
Т.е. получается некий аналог батч-режима только с более частыми вызовами?
2 mpogorelov
Не в обиду Zabr'у будет сказано, Вы меня абсолютно точно поняли
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 05.10.2004, 15:37   #17  
mpogorelov is offline
mpogorelov
Участник
 
20 / 10 (1) +
Регистрация: 29.04.2004
Спасибо, demID

Буду пробовать.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Запуск пакетника без формы Jox DAX: Программирование 8 25.01.2006 12:33
Запуск формы Акавешка DAX: Программирование 6 03.08.2005 12:30
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:04.