Ssjs И Activexobject

Тема в разделе "Lotus - Xpages", создана пользователем roddm, 20 май 2014.

  1. roddm

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    При выполнении следующего SSJS:
    Код (Text):
    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 на стороне сервера?

    Кроме того, попробовал сделать аналогичный эксперимент с агентами. Простейший агент выполняется на клиенте отлично.
    Код (Text):
    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
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    На сервере запускать Word. Зачем?
    ActiveX официально обрабатываются только Microsoft Internet Explorer и операционной системой Microsoft Windows/

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

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    Вот я и сделал LS-агент.
    Только при запуске на сервере (Call agent.RunOnServer()) Word почему-то открывает файл в режиме чтения. Соответственно при попытке сохранить файл Word подвисает.
     
  4. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    1. На сервере сам Office установлен?
    2. Нужно обрабатывать ситуацию с заблокированным документом
    Код (Text):
        If Obj.ActiveDocument.ReadOnly Then
    Print "Obj.ActiveDocument.ReadOnly"
    End If 

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

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    Конечно! Пробовал на разных серверах Domino 8.5.3 и 9.0.1.
    Агент тестовый. Сообщение выведено для того, чтобы разобраться почему не сохраняется документ и виснет Word.
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Зачем сохранять документ, если он заблокирован? даже если агент тестовый. Код надо писать правильно
     
  7. roddm

    roddm New Member

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

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ты явно упускаешь один момент и не хами!

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

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

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

    roddm New Member

    Регистрация:
    4 ноя 2011
    Сообщения:
    4
    Симпатии:
    0
    Документ открывается в режиме чтения при первом (и единственном) запуске агента после перезагрузки Windows и старта Domino.
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    вложи свой документ Word сюда
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    а может проще POI или https://code.google.com/p/xdocreport/ использовать, а не решать проблемы кот. создает интерактив от МСО ? :rolleyes:
     
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Не думаю что в этом случае будет проще.
    К тому же XDocReport держит только новые форматы docx
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    зависит от уровня взаимодействия
    и это скорей хорошая новость :rolleyes:
     
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Зависит от умений
    Ну как сказать :rolleyes:
     
  15. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    я из сугубо практических соображений, ОЛЕ ФС и прочая бинарная хэрь от МС - это жуткий месс и избавление от него дает положительный сдвиг
     
  16. roddm

    roddm New Member

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

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

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

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

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    roddm лучше потратьте время на изучение альтернативных технологий, чем на борьбу МСО :rolleyes:
     
  18. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Автор просто что-то мутит и сам не понимает чего мутит.
    В системные каталоги полез зачем-то...
    МСО в принципе нормально работает. Да и разбирательства с альтернативной технологией тоже не поможет.
    Помимо методов записи не стоит забывать про политики пользователей на данном компе.
    Я в таких случаях работаю либо с каталогом data в директории сервера Lotus. Пользователь, под которым крутится сервере - имеет туда полный доступ.
    Либо с временным каталогом ОС. Туда у всех пользователей есть полные права.
    Так что надо разбираться с правами, а потом пениться почему что-то не работает
     
  19. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    на сервере это не совсем так..
    вот именно что надо разбираться с правами и в т.ч. взаимодействии с UI винды, без кот. МСО может вести себя непредсказуемо (по словам самого МС)

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Не знаю... МСО пользуюсь уже очень давно. Проблем не наблюдал. Главное делать все по порядку
     
Загрузка...
Похожие Темы - Ssjs Activexobject
  1. lmike
    Ответов:
    23
    Просмотров:
    736
  2. lmike
    Ответов:
    11
    Просмотров:
    359
  3. Dragon108
    Ответов:
    5
    Просмотров:
    741
  4. lionk
    Ответов:
    26
    Просмотров:
    3.613
  5. Cleric-Lviv
    Ответов:
    4
    Просмотров:
    1.260

Поделиться этой страницей