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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.08.2011, 14:55   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Единственная, может, особенность (или это мне так повезло): объект Thread должен по возможности явно создаваться на клиенте, например, через classFactory::makeObjectOnClient()
Старый 26.08.2011, 15:16   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,283 / 3491 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Единственная, может, особенность (или это мне так повезло): объект Thread должен по возможности явно создаваться на клиенте, например, через classFactory::makeObjectOnClient()
Может это связано с тем, что класс COMExcelDocument_RU клиентский?
Я действительно создавал объект Thread на клиенте, ибо там же создавал экземпляр COMExcelDocument_RU (или Word).

Но у меня была реализована более сложная схема. Фактически, я продублировал (неполностью конечно) классы COMExcel/WordDocument_RU. Т.е. создал класс, у которого сделал параметр - требуется ли запускать код в потоке или нет. Для Word запуск в потоке обязателен, а для Excel - нет (ибо можно сделать через .NET). Но можно и Excel запустить в потоке - ограничений нет.

А дальше - этот класс-обертка запускает начальный метод, строящий отчет. Собственно - все. Все расчеты при желании - всегда можно сделать и на сервере.
__________________
Возможно сделать все. Вопрос времени
Старый 26.08.2011, 15:28   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Может это связано с тем, что класс COMExcelDocument_RU клиентский?
У меня в ходе экспериментов вообще не получилось запустить дополнительный поток на сервере - даже с простеньким тестовым статическим серверным методом, не то что с каким-то рабочим кодом Что характерно, при реализации класса TutorialThread, похоже, эти попытки тоже остались безуспешными.
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
у меня была реализована более сложная схема. Фактически, я продублировал (неполностью конечно) классы COMExcel/WordDocument_RU.
Вот чем мне не нравятся классы ComExcel/WordDocument_RU - это что они везде в коде создаются через new(), а не через статический construct(), как следствие, просто так подменить штатный класс таким вот, к примеру, наследником, реализующим работу в отдельном потоке, уже не получится - придется править все места, в которых создаются экземпляры этих классов, что не совсем вписывается в эту формулировку:
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Эта проблема одноразовая - один раз сделал, а потом забыл.
С SysExcel* в этом плане куда проще, потому что классы написаны "прямее", и достаточно заложить нужную логику принятия решения о том, как работать с Excel (через COM или .NET) в одно-единственное место - SysExcelApplication::construct(). Хотя предварительно, разумеется, нужно вычистить в коде "нарушения абстракции" - работу напрямую с COM-объектами, обертками для которых выступают классы в приложении Аксапты.
За это сообщение автора поблагодарили: sukhanchik (2).
Старый 26.08.2011, 16:30   #4  
BOAL is offline
BOAL
Участник
Аватар для BOAL
MCBMSS
Злыдни
1C
Лучший по профессии 2015
 
619 / 453 (17) +++++++
Регистрация: 28.04.2003
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вот чем мне не нравятся классы ComExcel/WordDocument_RU - это что они везде в коде создаются через new(), а не через статический construct(), как следствие, просто так подменить штатный класс таким вот, к примеру, наследником, реализующим работу в отдельном потоке, уже не получится - придется править все места, в которых создаются экземпляры этих классов,
Ну, автоматизацию и тут никто не отменял.
Делается проект с нужным набором классов-отчктов.
Выгружается в ХРО
Заменой текста по заменяемым названиям
Загрузка ХРО
Проверка компилом - правки.

Мы так 60 классов оптом меняли, иначе, конечно, озвереть
Старый 26.08.2011, 17:20   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от BOAL Посмотреть сообщение
Ну, автоматизацию и тут никто не отменял. Делается проект с нужным набором классов-отчктов. Выгружается в ХРО Заменой текста по заменяемым названиям
Да дело вовсе не в автоматизации замены - я тоже умею поиском-и-заменой в текстовых редакторах пользоваться, даже с регулярными выражениями Фигня в том, что это нельзя назвать решением "сделал один раз и забыл", потому что
  1. в любой момент может появиться код, написанный коллегой-программистом, забывшим про эти исправления, либо локализаторами в очередном hotfix rollup'е, который будет использовать старый класс - и эти дыры надо будет условно постоянно латать.
  2. когда меняешь что-то в хрендцати местах (а на ComExcelDocument_RU.new() в моем случае есть 82 перекрестных ссылки ниже usr-слоя), то на usr-слой поднимается фигова туча объектов приложения, которые потом приходится поддерживать: обновлять при переходе на очередной hotfix rollup/service pack, учитывать при накатывании отдельных hotfix'ов, etc. Причем подниматься могут не только методы классов, но и целые формы, например, LedgerRRGEHistoryCompare_W. Это очень удорожает сопровождение приложения
Старый 26.08.2011, 17:41   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,283 / 3491 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Фигня в том, что это нельзя назвать решением "сделал один раз и забыл", потому что
Ну ... сюда же можно приплести и переход на новую версию. В таком случае принцип "сделал один раз и забыл" вообще никогда неприменим - всегда может появиться новый код, который надо суппортить - будь то код от коллеги-программиста или от МС.

В контексте данного обсуждения - я хотел сказать - что сделав класс-обертку, описав механизм его использования и следя за тем, что его используют правильно - можно в рамках отчетов, использующих этот класс-обертку забыть про способ обхода падений Word/Excel (поток, .NET и т.д.). Собсно - это один из принципов ООП - инкапсуляция.

А так-то понятно - если бы решение проблемы было бы реализовано и поддерживалось вендором - то само собой для рядовых разработчиков проблемы не существовало бы.
__________________
Возможно сделать все. Вопрос времени
Старый 26.08.2011, 19:07   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от gl00mie Посмотреть сообщение
У меня в ходе экспериментов вообще не получилось запустить дополнительный поток на сервере - даже с простеньким тестовым статическим серверным методом, не то что с каким-то рабочим кодом Что характерно, при реализации класса TutorialThread, похоже, эти попытки тоже остались безуспешными.
Для этого классом AOSLoadGen можно воспользоваться.
__________________
Axapta v.3.0 sp5 kr2
Теги
ax2009, excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Выгрузка данных в Excel и их группировка... NetBus DAX: Программирование 8 09.12.2013 11:28
Очень медленно происходит выгрузка отчетов в Excel Leopold Stotch DAX: Программирование 8 31.05.2011 13:47
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13
Не идет выгрузка отчета в Excel. Слабая машина. asabin DAX: Администрирование 27 29.06.2005 10:48

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:09.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.