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

  • Автор темы goshanew
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

goshanew

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

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

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

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

Другие варианты?
 

Constantin A Chervonenko

Well-Known Member
Lotus team
30.05.2006
1 333
4
#2
Нужно найти механизм передачи события о сохранении данных в файле от приложения открытой базе данных Lotus. По этому событию, например, в БД текущий открытый документ должен заполниться данными из этого файла.

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

Другие варианты?
1.Исправить ошибки
2.Через СОМ доступны background-объекты. Что значит "заполнить текущий открытый документ"?
 

duchan

Well-Known Member
20.09.2006
108
3
#3
к UI через COM можно получить доступ через "Notes.NotesUIWorkspace", но будте осторожны т.к. где гарантия что документ у Вас открыт в UI... :( схлопотать "красного малевича" можно...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#4
<!--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?
 

morpheus

скриптописец
07.08.2006
3 915
1
#5
Для: 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 запускал агенты по времени... так шо сматрите в код
 

Constantin A Chervonenko

Well-Known Member
Lotus team
30.05.2006
1 333
4
#6
к UI через COM можно получить доступ через "Notes.NotesUIWorkspace", но будте осторожны т.к. где гарантия что документ у Вас открыт в UI... :( схлопотать "красного малевича" можно...
Читаем Help:

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

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

duchan

Well-Known Member
20.09.2006
108
3
#7
для Medevic: это так OLE объект лотуса называется... типа CreateObject("Notes.NotesUIWorkspace") и вы из внешнего приложения получаете OLE объект рабочей области, аналог NotesUIWorkspace в самом Lotuse...
+ через COM к Лотусу цепляется без проблем, работаел как с ранним так и поздним связыванием - без проблем... из под dotNET были некоторые проблемы, но не в плане падания....

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

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

Fossil Code

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

K-Fire

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

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

goshanew

Гость
#10
Именно через "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. серверные агенты не подходят - реакция на событие должна быть мгновенной.
 

duchan

Well-Known Member
20.09.2006
108
3
#12
Вопрос: как запустить нужный мне код в Лотусе не трогая документ и не прыгая по полям.
1. Зачем прыгать по полям? можно инициировать какое-либо событие, например Refresh, и на событии формы повести обработчик...
Конкретнее мне нужно выполнить метод класса, расположенного в подключаемой библиотеке из другого приложения.
Если лотус "не пнуть" то как он узнает что что-то произошло? получить доступ из вне к методам определенным в форме у вас не получится - видимость не та.... так что либо агент (back-end) либо инициировать некое событие в форме (Queryrecalc, Postrecalc, Querymodechange,Postmodechange, Querysave....)

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