Передача внешнего события в открытого клиента Lotus

Тема в разделе "Lotus - Программирование", создана пользователем goshanew, 31 янв 2007.

Статус темы:
Закрыта.
  1. goshanew

    goshanew Гость

    Задача состоит в следующем:
    Есть некое приложение, которое результаты своей работы сохраняет, например, в файл на диске.

    Есть база данных на лотусе, в которой работает пользователь.

    Нужно найти механизм передачи события о сохранении данных в файле от приложения открытой базе данных Lotus. По этому событию, например, в БД текущий открытый документ должен заполниться данными из этого файла.

    Попробовал подключить lotus через COM и стартануть агента - все умерло.

    Другие варианты?
     
  2. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    1.Исправить ошибки
    2.Через СОМ доступны background-объекты. Что значит "заполнить текущий открытый документ"?
     
  3. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    106
    Симпатии:
    3
    к UI через COM можно получить доступ через "Notes.NotesUIWorkspace", но будте осторожны т.к. где гарантия что документ у Вас открыт в UI... :( схлопотать "красного малевича" можно...
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-DuChan+1:02:2007, 06:39 -->
    <span class="vbquote">(DuChan @ 1:02:2007, 06:39 )</span><!--QuoteEBegin-->к UI через COM можно получить доступ через "Notes.NotesUIWorkspace", но будте осторожны т.к. где гарантия что документ у Вас открыт в UI... smile.gif схлопотать "красного малевича" можно...
    [snapback]54625" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Что такое Notes?
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: DuChan
    а стоит ли?


    <!--QuoteBegin-goshanew+31:01:2007, 20:09 -->
    <span class="vbquote">(goshanew @ 31:01:2007, 20:09 )</span><!--QuoteEBegin-->Попробовал подключить lotus через COM и стартануть агента - все умерло.
    [snapback]54620" rel="nofollow" target="_blank[/snapback]​
    [/quote] - брэхня, смотрите агента! у меня так отдельный рутер работал... давно это было, работал с лотусом как с OLE запускал агенты по времени... так шо сматрите в код
     
  6. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Читаем Help:

    NotesUIWorkspace class
    Represents the current Notes workspace window.
    Note This class is not supported in COM.

    Возможно, вы имели в виду OLE?
     
  7. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    106
    Симпатии:
    3
    для Medevic: это так OLE объект лотуса называется... типа CreateObject("Notes.NotesUIWorkspace") и вы из внешнего приложения получаете OLE объект рабочей области, аналог NotesUIWorkspace в самом Lotuse...
    + через COM к Лотусу цепляется без проблем, работаел как с ранним так и поздним связыванием - без проблем... из под dotNET были некоторые проблемы, но не в плане падания....

    для Morpheus: мне тоже кажется что не стоит, но человеку хотса... тем более по той информации что предоставлена нельзя судить о самой задаче, можно ее как-то еще решить или нет....

    для Constantin A Chervonenko:
    вообщето это именно OLE объект.... а не COM... но суть тажа.... :(
    COM: Lotus.NotesSession
    OLE: Notes.NotesSession и Notes.NotesUIWorkspace - они считаются "устаревшими", но они есть и работают...
     
  8. Fossil Code

    Fossil Code Гость

    Есть способ запустить из операционной системы нечто лотусовое: C API toolkit. В его составе есть пример, как из командной строки с параметрами запустить агента в лотусовой базе. Вот пусть после работы Вашего приложения (из батника, скажем) и запускается агент, который сделает все, что Вы захотите.
     
  9. K-Fire

    K-Fire Гость

    Чтобы не заморачиваться с Lotus API и подобными вещами, можно сделать несколько проще:

    На сервере запускается агент каждые 5 минут и проверяет папку с файлами. Новый файл появился - делается что-то что вам надо.
     
  10. goshanew

    goshanew Гость

    Именно через "Notes.NotesUIWorkspace" и решил. Единственное что мне кажется кривовато.

    из VBA например

    Dim n, d As Object
    Set n = CreateObject("Notes.NOTESUIWORKSPACE")
    Set d = n.CURRENTDOCUMENT
    d.EditMode = True
    d.GOTOFIELD ("Field1")
    d.GOTOFIELD ("Field2")

    А в событие Exiting поля Field1 впихнул то что мне надо

    Sub Exiting(Source As Field)
    'необходимый код
    End Sub

    Вопрос: как запустить нужный мне код в Лотусе не трогая документ и не прыгая по полям.
    Конкретнее мне нужно выполнить метод класса, расположенного в подключаемой библиотеке из другого приложения.

    Насчет открыт ли документ - проверить можно. И тот ли это тип документа - тоже.

    P.S. серверные агенты не подходят - реакция на событие должна быть мгновенной.
     
  11. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Ну так и используйте локальные агенты
     
  12. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    106
    Симпатии:
    3
    1. Зачем прыгать по полям? можно инициировать какое-либо событие, например Refresh, и на событии формы повести обработчик...
    Если лотус "не пнуть" то как он узнает что что-то произошло? получить доступ из вне к методам определенным в форме у вас не получится - видимость не та.... так что либо агент (back-end) либо инициировать некое событие в форме (Queryrecalc, Postrecalc, Querymodechange,Postmodechange, Querysave....)

    Еще, например, можно пересмотреть подход, и отслеживать изменения из лотуса, по таймеру например... у меня так, например, было реализованно сохранение измененных аттачей (по кнопке деатачился файл, запускался его редактор и на таймер вешалась проверка сохранения файла, после чего, файл аттачился в док и сохранялся (надо было чтобы как только в ворде нажали "саве" файл тут же сохранялся в лотусе и не надо было бы жать сохранить еще и в лотусах))
     
Загрузка...
Статус темы:
Закрыта.

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