Запуск Ui агента из скрипта...

fedotxxl

Well-Known Member
09.11.2005
614
0
#1
Странно, всегда думал, что метод run для этого и сделан - чтобы агенты отрабатывались на локале.... но нет =(
Нужно запустить агент через LS (пусть кнопкой), чтобы работали messagebox'ы и т.д.
 
A

Azrael

Гость
#2
notesAgent.Run( [ noteID$ ] )

This method runs any agent regardless of source language (simple action, formula, LotusScript, Java).
You cannot run an agent recursively (cannot call it from itself).
The user cannot interact directly with a called agent. User output goes to the Domino log.
You cannot debug a called agent.
You cannot use the Notes UI classes in an agent called by this method.
For COM applications, the Notes program directory must be in the application path.

Только последовательностью агентов, запускаемых на @-формулах, либо централизацией - задать в LotusScript-библиотеке функцию, вызывать из агента и из других мест, где понадобилось :unsure:
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#4
а чё понимать-то "наливай - да пей" :unsure:...
зачем вызывать агент из агента? Если код используется более одного раза (зависимо от контекста) - его надо вынести в библу (ИМХО)
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#6
зачем вызывать агент из агента? Если код используется более одного раза (зависимо от контекста) - его надо вынести в библу (ИМХО)
и шо? библиотечный код, вызванный из агента, не считается кодом вызванным из агента? :wacko:
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#8
а хз... шо ему надо )) неужто fedotxxl не знает, что код можно поместить в либу и вызвать оттуда, а не писать для этого агент?
что-то сомневаюсь...
мне вот почему-то кажется, что его агент должен был как-то умно собрать документы, либо чего-то еще... поэтому и агент...
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#10
а я-то глупый и не заметил!... спасибо, что подсказал! :D))
я это тоже читал и понял, в чем проблема, но боюсь, что ни запуская агент собаками, ни вызывая из агента библиотечный код, мессаджи не появятся...

просто, автор как бы не указал, что ему нужно в действительности, т.е. чего он хочет добиться вызывая агент...
возможно, если автор не знает, что код можно поместить в библиотеку и вызвать его из любого другого места, то есть смысл рекомендовать ему это сделать... но, может автор преследует другие цели... хз :wacko:)
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#11
Что мне нужно:
мне нужно "динамически" исполнять UI код. Т.е. аналитик указал, что перед кнопка должна отображать messageBox. В кнопке я это прокодировать не могу (не спрашивайте почему), я могу "динамически" подтянуть нужный мне агент и запустить его... но тут облом получился
Единственное, что пришло на ум - execute... прийдется так
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#12
пажди... в кнопке не можешь закодить мессаджбокс, а закодить нужный агент проще?! О_О
в чем динамичность вообще? и что за "динамичность" нужна?

воркфлов строите, что ли? ;)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#13
дык почему UI код низя в библе создать?
Кнопка же не диктует цепочку агентов, она могет тока один вызвать, или она и вызывает агент через скрипт?
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#14
Akupaka
Угу =) У меня кнопка настраивается настроечными документом. Почти все можно учесть, но что-то нужно позволить прокодить. Соотв. это кодирует разработчик, а налитик должен указать, что нужно (в теории) запустить такой-то агент.
Этот агент должен испонять UI методы... сейчас я сделал так - разработчик добавляется в класс метод, а аналитик указывает какой метод запустить. Метод запускается при помощи execute. Есть какое другое решение?
 
D

dobozy

Гость
#15
Если всё так динамично, то наверное Execute и есть самое оптимальное решение. Только тут надо помнить, что всередине его не работает
On Error ...

Или я ошибаюсь?
 
D

dobozy

Гость
#17
работает, на сколько мне известно...
Если вы пишите

str_LS = "g_MyClass.Method1()"

И перехватчик ошибок зашит в методе, то всё будет хорошо.

А если вы пишите в строке код типа

On Error Goto ErrorHandler

Set g_s = New NotesSession
Exit Function

ErrorHandler:
Messagebox "Error"
Exit Function

То метки не отработают...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 483
360
#18
наскока я помню... Print тоже не будет работать в таком коде
 
A

Azrael

Гость
#19
У меня похожий проект есть, либа, в ней функции, со стандартным набором параметров (документ, над которым совершается действие, карточка действия), в функции On Error Goto ErrLabel, мессаджбоксы, принты, ui-шные классы - все робит). Единственное неудобство, код внутри Execute отлаживать низзя.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#20
короче, мы тут с dobozy пообщались и пришли к выводу, что:

1) метки в execute в виде (ниже) не будут работать

Код:
exec_str = |
on error goto label1
...
|
execute(exec_str)
2) обработчик вызывающего execute кода, если есть, успешно справляется с обработкой ошибок в execute, но имеет несколько странный вид :o
а именно, обработчик такого вида

Код:
Messagebox Error & " (" & Cstr(Erl) & ")"
выдаст

$EXECUTE$+11: Division by zero (28)
где, 28 - строка соотв. вызову execute, $EXECUTE$+11 - место в коде, который передан в execute

3) для того, чтобы корректно создать обработчик, если все-таки понадобиться свой, в execut'e, необходимо описать в коде execute процедуру, в которой будет обработчик, а потом ее же вызвать

Код:
Sub Initialize
On Error Goto errh

Dim execStr As String

execStr = |
sub TestSub()
on error goto errh
dim i as Integer
dim r as Double
i = i + 5
r = i/0
eos:
Exit Sub
errh:
Messagebox Error & " (" & Cstr(Erl) & ")"
Resume eos
end sub

call TestSub()
|

Execute(execStr)

eos:
Exit Sub

errh:
Messagebox Error & " (" & Cstr(Erl) & ")"
Resume eos
End Sub
dobozy, поправь меня, если в чем-то твои мысли не сошлись )))