Не Вызывается Агент

  • Автор темы paclord
  • Дата начала
P

paclord

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

Код:
@Command([EditGotoField];"Body");
@Command([EditInsertFileAttachement];"C:/Temp/1.tif);
@all
Вызываю я его вот так:

Код:
 Dim s As New NotesSession
Dim agent As NotesAgent
Set agent = s.СurrentDatabase.GetAgent("Test1")
Call agent.Run
Но после нажатия кнопки агент не отрабатывает, в чем может быть проблема ? :) Пробывал таким методом запускать других агентов написаных на LS, они отлично работают, а этот нехочет :)
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
paclord
1. Документ в режиме редактирования?
2. Можно не использовать скрипт, а вызвать агента через SimpleActions
3. Как настроен вызов и таргет агента? (см. свойства, 1я закладка)
 
A

AndyOrlov

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

Код:
@Command([EditGotoField];"Body");
@Command([EditInsertFileAttachement];"C:/Temp/1.tif);
@all
Вызываю я его вот так:

Код:
 Dim s As New NotesSession
Dim agent As NotesAgent
Set agent = s.GurrentDatabase.GetAgent("Test1")
Call agent.Run
Но после нажатия кнопки агент не отрабатывает, в чем может быть проблема ? :) Пробывал таким методом запускать других агентов написаных на LS, они отлично работают, а этот нехочет :)
Если этот код скопирован из проги, то лично я вижу просто ошибку в классе NotesSession нет св-ва GurrentDatabase, а есть СurrentDatabase
Если это простая описка на форуме то согласен с Morpheus
 
P

paclord

#4
AndyOrlov
На форуме это опечатка :) уже исправил..

Morpheus
1. Да в режиме редактирования
2. Дело в том что на кнопке присутствует еще код на LS, возможно ли туда вставить SimpleActions ? :)
3. Вызов Agent list selection, таргет None
 
A

AndyOrlov

#5
AndyOrlov
На форуме это опечатка :) уже исправил..

Morpheus
1. Да в режиме редактирования
2. Дело в том что на кнопке присутствует еще код на LS, возможно ли туда вставить SimpleActions ? :)
3. Вызов Agent list selection, таргет None
Значит и в @Command([EditInsertFileAttachement];"C:/Temp/1.tif); тоже опечатка @Command([EditInsertFileAttachment];"C:/Temp/1.tif);

Тут проблема не в агенте. Он точно запускается. Просто он работает в фоновом режиме (Back-End), а команды относятся к интерфейсу (UI). Агент просто не видит открытый документ. То что агент запускается должно быть видно в журнале агента. Попробуй его запустить из интерфейса и я думаю что файл вложится в поле.
Я думаю что так не получится вложить.
А весь код где агент запускается можно увидеть?
 
13.03.2009
625
1
#6
забить на агента и юзать древнюю технику нажатия кнопки жаваскриптом:
- перевесить аттач-собаку на (скрытую) кнопку на форме.
- на исходную кнопку повесить js: document.form[0].attachBtn.click()

Если в процессе требуется выполнить ls код - то его тоже вешаем на (другую) скрытую кнопку и жмем их последовательно:
document.form[0].lsCodeBtn.click()
document.form[0].attachBtn.click()
Т.о. можем комбинировать ls, собак и жаваскрипт в любой последовательности. Передавать значение из ls в js и обратно можно через поле документа. Работает уверенно, в т.ч. в диалоговых окнах...
 
A

Anonimous

#7
Можно и я задам вопрос, у меня схожая проблема?
Имею 2 базы на разных серверах, назову их база А и база В. Мне надо выполнить код в базе А, но при этом воспользоваться библиотекой из базы В (библу перенести нельзя в силу некоторых причин). Я написал агент в базе В, который не надо выполнять на сервере. В базе А есть вьюха с кнопкой, при нажатии которой надо вызывать агент в базе В.

Кусочек кода в кнопке такой, код в базе А

Dim docThis As New NotesDocument (База А)

docThis.Save True, False

Dim ag As NotesAgent
Set ag = База В.GetAgent("CreateListOrder")
If ag Is Nothing Then Exit Sub
If ag.Run(docThis.NoteID) = 0 Then
Messagebox "Agent ran",, "Success"
Else
Messagebox "Agent did not run",, "Failure"
End If

В ходе выполнения агента CreateListOrder (который использует библу базы В) документ docThis должен обзавестись рядом полей.

Кусочек агента docThis

Print "Start running"
MsgBox "Уже работаю"
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument

Set docThis = База А.GetDocumentByID( session.CurrentAgent.ParameterDocID ) // т.е. агент лезет в базу, из к-рой его вызвали, берет только что созданный docThis, добавляет ему поля и сохраняет

docThis.ReplaceItemValue "Поле1", "Значение1"

docThis.ReplaceItemValue "Поле2", "Значение2"
...
docThis.Save True,True
Print "End running"
End Sub

При нажатии кнопки появляется сообщение "Agent ran", будто все в порядке, но результата выполнения агента нет, документ полями не обзаводится, сигналы
Print "Start running"
MsgBox "Уже работаю"

не подаются.

В св-х агента указано

Trigger: On event
Action menu selection

Target: None

Я ничего не забыл, подскажите, плиз.
Заранее спасибо
 

doka

Well-known member
18.02.2010
118
0
#10
Anonimous
у тебя есть строчка в агенте >Dim ws As New NotesUIWorkspace
ты через ws что-то потом получаешь или просто забыл убрать?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#11
Anonimous
у тебя есть строчка в агенте >Dim ws As New NotesUIWorkspace
ты через ws что-то потом получаешь или просто забыл убрать?
Если я ничего не путаю - ничего страшного если агент не запускается на сервере

Добавлено: как вариан - наверное правильнее сделать агент серверным
Ну и тогда убрать все UI-классы и методы
Ну и переделать вызов ag.RunOnServer
И разберись с параметром агента... я писал про это выше
 

doka

Well-known member
18.02.2010
118
0
#12
Как вариант можно создать поле-флаг и по нему сформировать вьюху.
В базе А записывать это поле, потом в агенте базы В получать через вью этот документ, записывать нужные поя, а поле-флаг затирать
 

hosm

* so what *
18.05.2009
2 442
6
#13
если агент запускается так, как указали выше, то сообщений на уи не будет.
Кстати, насчет прав и доступа сервера к базам все проверено? (установлен требуемый уровень безопасности агента в зависимости от его кода, правильно установлен ACL и серверные настройки для запуска агентов, возможно, еще нужна настройка trusted servers)
Попробуйте посмотреть лог агента, добавить обработчик ошибок и использовать запись в лог агента для отладки или в агенте создать временный документ и логировать туда все действия.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#14
Ну так таки да! Все работает! Если в рамках сервера - то вообще без проблем.
Вчера лень было проверять. Сегодня на скорую руку...
Кнопка в виде
Код:
Sub Click(Source As Button)

Dim session As New NotesSession	
Dim db As NotesDatabase
Dim agent As NotesAgent
Dim doc As NotesDocument

Set db = session.CurrentDatabase
Set doc = db.CreateDocument
doc.form = "Main"
Call doc.Save(True, False, True)

Set db = session.GetDatabase( "data1", "templates\\testdb.nsf" )
Set agent = db.GetAgent("agent")
Call agent.Run(doc.NoteID)

End Sub
код агента:
Код:
Sub Initialize

Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument

Set db = session.Getdatabase("data1", "templates\\test.ntf")
Set doc = db.Getdocumentbyid(session.CurrentAgent.ParameterDocID)
doc.body = "заработало"
Call doc.Save(True, False, True)
End Sub
Runtime агента наверное все таки не влияет. Проверял и на шедульном и по событию Menu selection/
Security агента - 1

Добавлено:
...Кстати, насчет прав и доступа сервера к базам все проверено? (установлен требуемый уровень безопасности агента в зависимости от его кода, правильно установлен ACL и серверные настройки для запуска агентов, возможно, еще нужна настройка trusted servers)...
Может путаю... но если агент запускается на клиенте - разве важны серверные настройки?