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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.01.2012, 18:19   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Win2008 и вызов методов COM-объектов
Продолжение темы Новые счет-фактура и его друзья - Постановление от 26 декабря 2011 г. N 1137

Цитата:
Сообщение от Logger Посмотреть сообщение
Можно подробнее ?
Не понял вашу мысль.
Насчет ComDispFunction - я уже писал, что с помощью этого класса вызовы методов COM-классов происходят без ошибок. По-моему, при этом применяется раннее связывание

Насчет ООП - вспоните, что класс Com в аксапте это точно такой же класс, как и любой другой и что от него можно создавать наследников.
Так же вспоните, что у этого класса есть замечательный метод attach(), позволяющий подключить к созданному экземпляру класса уже существующий COM-класс
Еще вспомните про то, что можно перекрывать методы и создавать в них собственный код.


В общем, идея была такая - необходимо создать иерархию классов, наследующих от класса Com и соотвествующую иерархии вызываемых COM-объектов.
В метод new() классов иерархии передавать ссылку на созданный COM-объект и с помощью вызова метода attach() создавать привязку
Перекрыть вызываемые методы COM-объекта. Внутри этих методов делать вызов с помощью класса ComDispFunction
Если вызываемый метод возвращает ссылку на другой COM-объект, то возвращать ссылку на экземпляра класса иерархии, в вызов new() которого передавать COM-объект


В результате, для корректной работы, требется изменить вызов первоначального создания COM-объекта в Аксапте на создание соответствующей класса из иерархии с передачей в него COM-объекта
Для Excel это будет выглядеть примерно так
X++:
COM excel;
;

excel = new DEV_ExcelApplication(new Com('Excel.Application'));
И отследить прямое создание COM-объектов в коде. Такие как, например, в методе SysExcelCells.Item()
X++:
public SysExcelCell item(int _row, int _column)
{
    return SysExcelCell::construct(version,cells.item(_row,_column));
//    return SysExcelCell::construct(version,COM::createFromVariant(cells.item(_row,_column)));
}
Если не перекрывать какие-либо методы из вызываемого COM-объекта, то ничего страшного не случится. При вызове будет ипользоваться позднее связывание - с ненулевой вероятностью напороться на ошибку при вызове

Ну и в качестве иллюстрации - во вложении пример иерарихии из нескольких классов, реализующий вышеизложенный подход для Excel (в чисто иллюстративных целях).


Замечу, что с помощью подобной иерархии и небольших изменения в классе COMExcelDocument_RU делается выгрузка в Excel на терминальном сервере под 2008R2, на котором тусуется под сотню пользователей, а загрузка процессоров редко опускается ниже 70%, а зачастую составляет все сто

Кстати, ко всему прочему, вызовы методов еще и быстрее выполняются
Вложения
Тип файла: xpo DEV_Excel.xpo (27.8 Кб, 648 просмотров)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: raz (15), belugin (3), ZVV (7), sukhanchik (10), Bishop (3), Logger (15), Ace of Database (10), lev (13), MikeR (3), gl00mie (10), Максимка (1), S.Kuskov (10), pedrozzz (4), БАХ43 (1).
Теги
com-объект, excel, excel com формат, windows server 2008

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пакетная печать com-объектов на терминальном сервере Serg DAX: Программирование 1 22.10.2010 07:06
Gustav: Unsorted, или Записки DAX-дилетанта - II Gustav DAX Blogs 39 20.05.2009 15:34
Developer for Microsoft Dynamics AX Certification Roadmap Blog bot DAX Blogs 1 13.05.2009 16:17
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05
Com Connector и вызов статического метода Gorlum DAX: Программирование 2 11.08.2005 01:39

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

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

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