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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.12.2014, 10:18   #1  
kazpiez is offline
kazpiez
Участник
 
11 / 10 (1) +
Регистрация: 05.08.2013
Как запустить внешний процесс в окне AX2009
Всем доброго времени суток!

Коллеги может кто подскажет, есть такая задача запустить excel внутри рабочей области Axapta... Ну например отобразить excel на форме или в новом окне системы. Главное чтобы процесс запускался не во внешнем окне а как бы "внутри Axapta". Понимаю звучит абсурдно, но все же может кто подскажет?
Старый 04.12.2014, 10:38   #2  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Использовать на форме ActiveX и Microsoft Office Web Components в нём.
__________________
Дмитрий
Старый 04.12.2014, 10:49   #3  
kazpiez is offline
kazpiez
Участник
 
11 / 10 (1) +
Регистрация: 05.08.2013
Дело в том что Microsoft Office Web Components не подходит, потому как половина форматирования документа не отображается... у меня стоит OWC11 и я пытался использовать конкретно spreadSheet. А может есть OWC поновее, у которого более широкий набор функций? Я искал... Потратил пару дней на поиск но ничего так и не нашел... Ну конечно есть и другие компоненты ActiveX, но они все платные... А покупать в слепую не хочется, вдруг не подойдет...
Старый 08.12.2014, 13:34   #4  
kazpiez is offline
kazpiez
Участник
 
11 / 10 (1) +
Регистрация: 05.08.2013
всем доброго времени суток! Пытаясь решить вышеизложенную проблему, нашел статью в которой описано что можно подменить окно используя библиотеку USER32.dll метод setParent. Попытался написать джоб
X++:
static void arn_dzu_createOleObj(Args _args)
{
    Microsoft.Office.Interop.Excel.Workbook             wb;
    Microsoft.Office.Interop.Excel.Workbooks            wbs;
    Microsoft.Office.Interop.Excel.ApplicationClass     acExcel;
    DLL                                                 _dll = new DLL("user32.dll");
    DLLFunction                                         dllFunction = new DLLFunction(_dll,"SetParent"),
                                                        dllFunc;
    int                                                 iWindow,wind;
    FormRun                                             formRun;
    Form                                                form = new Form();
    Args                                                args = new Args();
    System.Reflection.Missing                           mising ;
    object                                              oMissing = mising;
    str                                                 fileName = "C:\\1234.xls";
    ;
    new InteropPermission(InteropKind::ClrInterop).assert();
    //dllFunc = new DLLFunction(_dll,"FindWindow");
    acExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();

    iWindow = WinApi::findWindow("XLMAIN","");
    
    form.addDesign('Design');
    args.object(form);
    form.design().width(1000);
    form.design().height(1000);



    formRun = classFactory.formRunClass(args);
    formRun.init();
    formRun.design().caption('excel');
    
    


    wind = any2int(formRun.form().design().handle());
    dllFunction.arg(Types::Integer,Types::Integer);
    dllFunction.returns();
    dllFunction.call(iWindow,wind);
    
    wbs = acExcel.get_Workbooks();
//    wb = wbs.Open(fileName,oMissing,false,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);
    wb = wbs.Add(filename);
    acExcel.set_Visible(true);
    acExcel.set_UserControl(true);
    
    formrun.run();
    formRun.wait();
    
    
    CodeAccessPermission::revertAssert();
     
}
Но что то пока не работает... Может кто подскажет в чем дело?
Старый 08.12.2014, 13:53   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от kazpiez Посмотреть сообщение
X++:
wind = any2int(formRun.form().design().handle());
Если вы так пытаетесь получить виндовый хэндл окна, то не правильно. FormRun.hWnd() его возвращает
__________________
Axapta v.3.0 sp5 kr2
Старый 08.12.2014, 17:18   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Попробуйте вот такой подход:
http://www.codeproject.com/Articles/...Form-Applicati
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как запустить процесс на 64 сервере??? kazpiez DAX: Программирование 1 04.09.2014 16:32
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25
axforum blogs: О заполнении Наименования и Кода номенклатуры в печатной форме Накладной (Ax2009 ru7) Blog bot DAX Blogs 0 07.06.2011 09:11
Khue Trinh: Fill Utility in AX2009 Blog bot DAX Blogs 0 28.09.2010 10:05
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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