Обработка поступающих вложений doc

anna

Lotus team
03.06.2014
400
7
#1
Уважаемый all! Я понимаю, что ворд на сервере это плохо, но пока увы. Проблема в том, что никак не удается наладить четкую обработку на стороне сервера - открыли ворд - первый файл обработали - n-ный файл обработал и- закрыли ворд, ждем пока новые файлы придут.
Что-то ломается после первого прохода, приходится его убивать taskkill и запускать обработку по новой. Это на сервере, на клиенте все ок.
И да, лотусскрипт, на жаву переписывать 3000 строк кода нет желания, нормально будем реализовывать новую уже схему (я надеюсь, что сделаем интеграцию хотя бы через xml).
Как бы минимизировать taskkill и количество запусков ворда?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 569
263
#2
И да, лотусскрипт, на жаву переписывать 3000 строк кода нет желания
и не надо - делается рапер, для основных манипуляций
на жаву переписывать 3000 строк кода нет желания
когда-то это делать придется (почти в принудительном порядке) ибо ИБМ забросила LS
обработал и- закрыли ворд
попытаться не закрывать Application и искать его по GetObject, но для агентов, кмк, анриал (агент похачит хендлы)...
если внешним кодом только, крутить в цикле WS к-л, кот. по событию в ФС будет обрабатывать виндятскими примочками файло
как пример вот такая
Для просмотра контента необходимо: Войти или зарегистрироваться

а вопщем - POI/XML + veloicity и никаких вордей :)
можно еще jasperreports заюзать
 

erdi

Well-known member
20.08.2008
265
17
#4
пойдите от обратного...перед обработкой убивайте все процессы word, если они остались от прошлой обработки. Т.,о перед свой обработкой вы точно будете гарантировать что остатков word-a нет на машине и они не приведут к поломке текущей обработки
Код:
Sub CloseMSWord()
	On Error GoTo ErrH
	Dim objs As Variant
	Dim strSQL As String
	Dim strWMI As String
	strWMI = "winmgmts:"
	strSQL = "Select * From Win32_Process "
	strSQL = strSQL & "where Name = 'WINWORD.EXE'"
	Set objs = GetObject(strWMI).ExecQuery(strSQL)
	ForAll obj In objs
		obj.Terminate
	End ForAll
Quit:
	Exit Sub
ErrH:
	Error Err, Error$ & " in " & GetThreadInfo(1) & " line " & CStr(Erl)
End Sub
 
Последнее редактирование модератором:
Симпатии: Понравилось duchan

anna

Lotus team
03.06.2014
400
7
#5
и не надо - делается рапер, для основных манипуляцийкогда-то это делать придется (почти в принудительном порядке) ибо ИБМ забросила LS
попытаться не закрывать Application и искать его по GetObject, но для агентов, кмк, анриал (агент похачит хендлы)...
если внешним кодом только, крутить в цикле WS к-л, кот. по событию в ФС будет обрабатывать виндятскими примочками файло
как пример вот такая
Для просмотра контента необходимо: Войти или зарегистрироваться

а вопщем - POI/XML + veloicity и никаких вордей :)
можно еще jasperreports заюзать
А зачем весь этот обвес, если в mail-in базу будет просто попадать xml? В день ~200 штук по 4кб. Если, конечно, устраивать конвейер на сотни тысяч файликов.....
 

anna

Lotus team
03.06.2014
400
7
#7
На что может так ругаться?


Ошибка (New) 213, Microsoft Word: Недостаточно памяти. Немедленно сохраните документ., Microsoft Word: Недостаточно памяти. Немедленно сохраните документ. on line 139
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 569
263
#8
@erdi, иногда ;) желательно еще и подождать
этим англицизмом (wrapper - обертка) я назвал набор из
Для просмотра контента необходимо: Войти или зарегистрироваться
типа Адаптер и ему аналогичные
[DOUBLEPOST=1425373264,1425373196][/DOUBLEPOST]
На что может так ругаться?
именно на недостаток памяти процесса ;)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 569
263
#10
А зачем весь этот обвес, если в mail-in базу будет просто попадать xml?
ни задачи ни реализации я не видел ;)
дополнение по раперу - все вызовы типа CreateObject будут заменены на соответ. класс рапера
а его инстанс будет подменять используемые методы на свою реализацию
[DOUBLEPOST=1425376133,1425375940][/DOUBLEPOST]
[DOUBLEPOST=1425373264,1425373196][/DOUBLEPOST]
именно на недостаток памяти процесса ;)
Какой памяти? вроде все свободно: на диске много и оперативка пустая
какбэ домина использует "свою" память в своем процессе
у ЛС ограничения на стэк и хип - все вместе 2Гб (32бит и т.п.), вот сколько осталось для передачи КОМе - уже вопрос
[DOUBLEPOST=1425376313][/DOUBLEPOST]короче - без кода и окружения невозможно понять суть ваших ошибок