|
26.08.2011, 14:55 | #1 |
Участник
|
Единственная, может, особенность (или это мне так повезло): объект Thread должен по возможности явно создаваться на клиенте, например, через classFactory::makeObjectOnClient()
|
|
26.08.2011, 15:16 | #2 |
Administrator
|
Цитата:
Я действительно создавал объект Thread на клиенте, ибо там же создавал экземпляр COMExcelDocument_RU (или Word). Но у меня была реализована более сложная схема. Фактически, я продублировал (неполностью конечно) классы COMExcel/WordDocument_RU. Т.е. создал класс, у которого сделал параметр - требуется ли запускать код в потоке или нет. Для Word запуск в потоке обязателен, а для Excel - нет (ибо можно сделать через .NET). Но можно и Excel запустить в потоке - ограничений нет. А дальше - этот класс-обертка запускает начальный метод, строящий отчет. Собственно - все. Все расчеты при желании - всегда можно сделать и на сервере.
__________________
Возможно сделать все. Вопрос времени |
|
26.08.2011, 15:28 | #3 |
Участник
|
У меня в ходе экспериментов вообще не получилось запустить дополнительный поток на сервере - даже с простеньким тестовым статическим серверным методом, не то что с каким-то рабочим кодом Что характерно, при реализации класса TutorialThread, похоже, эти попытки тоже остались безуспешными.
Цитата:
С SysExcel* в этом плане куда проще, потому что классы написаны "прямее", и достаточно заложить нужную логику принятия решения о том, как работать с Excel (через COM или .NET) в одно-единственное место - SysExcelApplication::construct(). Хотя предварительно, разумеется, нужно вычистить в коде "нарушения абстракции" - работу напрямую с COM-объектами, обертками для которых выступают классы в приложении Аксапты. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
26.08.2011, 16:30 | #4 |
Участник
|
Цитата:
Сообщение от gl00mie
Вот чем мне не нравятся классы ComExcel/WordDocument_RU - это что они везде в коде создаются через new(), а не через статический construct(), как следствие, просто так подменить штатный класс таким вот, к примеру, наследником, реализующим работу в отдельном потоке, уже не получится - придется править все места, в которых создаются экземпляры этих классов,
Делается проект с нужным набором классов-отчктов. Выгружается в ХРО Заменой текста по заменяемым названиям Загрузка ХРО Проверка компилом - правки. Мы так 60 классов оптом меняли, иначе, конечно, озвереть |
|
26.08.2011, 17:20 | #5 |
Участник
|
Цитата:
|
|
26.08.2011, 17:41 | #6 |
Administrator
|
Цитата:
В контексте данного обсуждения - я хотел сказать - что сделав класс-обертку, описав механизм его использования и следя за тем, что его используют правильно - можно в рамках отчетов, использующих этот класс-обертку забыть про способ обхода падений Word/Excel (поток, .NET и т.д.). Собсно - это один из принципов ООП - инкапсуляция. А так-то понятно - если бы решение проблемы было бы реализовано и поддерживалось вендором - то само собой для рядовых разработчиков проблемы не существовало бы.
__________________
Возможно сделать все. Вопрос времени |
|
26.08.2011, 19:07 | #7 |
Участник
|
Цитата:
Сообщение от gl00mie
У меня в ходе экспериментов вообще не получилось запустить дополнительный поток на сервере - даже с простеньким тестовым статическим серверным методом, не то что с каким-то рабочим кодом Что характерно, при реализации класса TutorialThread, похоже, эти попытки тоже остались безуспешными.
__________________
Axapta v.3.0 sp5 kr2 |
|
Теги |
ax2009, excel |
|
|