Ssjs И Activexobject

  • Автор темы roddm
  • Дата начала
R

roddm

При выполнении следующего SSJS:
Код:
var objWord = new ActiveXObject("Word.Application")
сервер выдает ошибку:
20.05.2014 15:14:48 HTTP JVM: com.ibm.xsp.webapp.FacesServlet$ExtendedServletException: com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript computed expression
20.05.2014 15:14:48 HTTP JVM: CLFAD0134E: Exception processing XPage request. For more detailed information, please consult error-log-0.xml located in D:/Lotus/Domino/data/domino/workspace/logs
В log-файле ничего вразумительного не нашел.
В случае CSJS данная конструкция отрабатывает нормально.
В чем проблема с созданием объекта ActiveX на стороне сервера?

Кроме того, попробовал сделать аналогичный эксперимент с агентами. Простейший агент выполняется на клиенте отлично.
Код:
Sub Initialize
Dim session	As NotesSession
Dim db	As NotesDatabase
Dim agent	As NotesAgent

Set session	= New NotesSession
Set db	= session.CurrentDatabase
Set agent	= session.CurrentAgent

Dim Obj	As Variant

Set Obj = CreateObject("Word.Application")
Obj.Documents.Open "D:\Temp\test.doc"

If Obj.ActiveDocument.ReadOnly Then
Print "Obj.ActiveDocument.ReadOnly"
End If	

Obj.ActiveDocument.Save
Obj.Application.Quit(True)
End Sub
При запуске этого же агента на сервере (Call agent.RunOnServer()) Word запускается и виснет, при этом агент выдает сообщение, что файл открыт как ReadOnly.
В чем проблема? Почему ReadOnly? Почему Word виснет?
Сервер - Release 9.0.1FP1, Windows/Longhorn/64 6.1
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
На сервере запускать Word. Зачем?
ActiveX официально обрабатываются только Microsoft Internet Explorer и операционной системой Microsoft Windows/

В LS ты создаешь COM/OLE объект.
Нужен экспорт в Word - делай связку с агентом LS
 
R

roddm

Нужен экспорт в Word - делай связку с агентом LS
Вот я и сделал LS-агент.
Только при запуске на сервере (Call agent.RunOnServer()) Word почему-то открывает файл в режиме чтения. Соответственно при попытке сохранить файл Word подвисает.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
1. На сервере сам Office установлен?
2. Нужно обрабатывать ситуацию с заблокированным документом
Код:
	If Obj.ActiveDocument.ReadOnly Then
Print "Obj.ActiveDocument.ReadOnly"
End If	

Obj.ActiveDocument.Save
Obj.Application.Quit(True)
Странноватая конструкция. Если ты узнаешь, что документ заблокирован - зачем его пытаться сохранять?
 
R

roddm

1. На сервере сам Office установлен?
Конечно! Пробовал на разных серверах Domino 8.5.3 и 9.0.1.
2. Нужно обрабатывать ситуацию с заблокированным документом
<!--shcode--><pre><code class='lsscript'> If Obj.ActiveDocument.ReadOnly Then
Print "Obj.ActiveDocument.ReadOnly"
End If[/CODE]
Агент тестовый. Сообщение выведено для того, чтобы разобраться почему не сохраняется документ и виснет Word.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Конечно! Пробовал на разных серверах Domino 8.5.3 и 9.0.1.
Агент тестовый. Сообщение выведено для того, чтобы разобраться почему не сохраняется документ и виснет Word.
Зачем сохранять документ, если он заблокирован? даже если агент тестовый. Код надо писать правильно
 
R

roddm

Код надо писать правильно
1 шаг. Я написал агент, который только открывает документ и сохраняет его. Так правильно?
2 шаг. После того как Word подвис пришлось разбираться с причиной. Для этого прописал проверку на Obj.ActiveDocument.ReadOnly.
Так правильно?
3 шаг. Убедившись что Word открывает документ только для чтения попробовал:
а) запустить агент на другом сервере;
б) проверил права на доступ к папке, в которой находится документ;
в) проверил права локального администратора на сервере и запустил сервер Domino как сервис под аккаунтом локального администратора.
Так правильно?

Тогда как правильнее?
Возможно Вы знаете ПОЧЕМУ Word открывает документ только для чтения?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Ты явно упускаешь один момент и не хами!

ты привел код
Код:
	If Obj.ActiveDocument.ReadOnly Then
Print "Obj.ActiveDocument.ReadOnly"
End If	

Obj.ActiveDocument.Save
Obj.Application.Quit(True)
Согласно твоего кода документ сохраняется в любом случае (доступен документ на редактирование или нет). Думаю это может привести к ошибке и объект не выгрузится. И при следующем запуске ты получишь ошибку, что документ занят и получишь его только для чтения.
Проверь процессы ОС. Возможно в памяти висят не закрытые процессы Word.
В общем обрабатывай ошибки и удаляй объекты.
Ну и надеюсь что Wodr-документ не ограничен внутренними средствами офиса

А в принципе - твой код рабочий. У меня никаких проблем не возникло.
 
R

roddm

И при следующем запуске ты получишь ошибку, что документ занят и получишь его только для чтения.
Документ открывается в режиме чтения при первом (и единственном) запуске агента после перезагрузки Windows и старта Domino.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
а может проще POI или использовать, а не решать проблемы кот. создает интерактив от МСО ? :rolleyes:
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
а может проще POI или использовать, а не решать проблемы кот. создает интерактив от МСО ? :rolleyes:
Не думаю что в этом случае будет проще.
К тому же XDocReport держит только новые форматы docx
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
я из сугубо практических соображений, - это жуткий месс и избавление от него дает положительный сдвиг
 
R

roddm

Почитал на форуме о проблемах с выгрузкой данных в Excel и попробовал по аналогии создать папку Desktop в подкаталогах:
C:\Windows\SysWOW64\config\systemprofile\
C:\Windows\System32\config\systemprofile\

После этого при ПЕРВОМ запуске агент нормально открывает документ Word-a на чтение-запись, вносит данные, сохраняет. Все красиво.
При последующих запусках агента - снова открытие файла в режиме только чтения.

Однако есть интересная закономерность!!!
После блокировки клиента (Ctrl-F5) и подключения к LN агент снова ПЕРВЫЙ раз отрабатывает нормально, а затем начинает открывать файлы в режиме только чтения.

В тоже время при Web-доступе к базе и запуске агента из SSJS - работает на УРА. По крайней мере пару десятков документов подряд для теста выгрузил в Word без проблем.

С одной стороны проблема решена, но с другой - остается вопрос с обычным клиентом LN.
Как блокировка клиента может влиять на работу агента?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
roddm лучше потратьте время на изучение альтернативных технологий, чем на борьбу МСО :rolleyes:
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Автор просто что-то мутит и сам не понимает чего мутит.
В системные каталоги полез зачем-то...
МСО в принципе нормально работает. Да и разбирательства с альтернативной технологией тоже не поможет.
Помимо методов записи не стоит забывать про политики пользователей на данном компе.
Я в таких случаях работаю либо с каталогом data в директории сервера Lotus. Пользователь, под которым крутится сервере - имеет туда полный доступ.
Либо с временным каталогом ОС. Туда у всех пользователей есть полные права.
Так что надо разбираться с правами, а потом пениться почему что-то не работает
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
МСО в принципе нормально работает
на сервере это не совсем так..
вот именно что надо разбираться с правами и в т.ч. взаимодействии с UI винды, без кот. МСО может вести себя непредсказуемо ( )

Добавлено: вот тут тоже человек боролся и возможно забил :rolleyes:
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Не знаю... МСО пользуюсь уже очень давно. Проблем не наблюдал. Главное делать все по порядку
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!