• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

paclord

Здравствуйте, я еще чайник, и может быть мой вопрос покажется тупым но мне необходима помощь, я пытаюсь запустить агента через 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, они отлично работают, а этот нехочет :)
 
M

morpheus

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

AndyOrlov

Здравствуйте, я еще чайник, и может быть мой вопрос покажется тупым но мне необходима помощь, я пытаюсь запустить агента через 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

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

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

AndyOrlov

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). Агент просто не видит открытый документ. То что агент запускается должно быть видно в журнале агента. Попробуй его запустить из интерфейса и я думаю что файл вложится в поле.
Я думаю что так не получится вложить.
А весь код где агент запускается можно увидеть?
 
T

turumbay

забить на агента и юзать древнюю технику нажатия кнопки жаваскриптом:
- перевесить аттач-собаку на (скрытую) кнопку на форме.
- на исходную кнопку повесить js: document.form[0].attachBtn.click()

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

Anonimous

Можно и я задам вопрос, у меня схожая проблема?
Имею 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

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

Anonimous

Не-а.
Trigger: On Schedule

Never

Target: None

То же самое
 
D

doka

Anonimous
у тебя есть строчка в агенте >Dim ws As New NotesUIWorkspace
ты через ws что-то потом получаешь или просто забыл убрать?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Anonimous
у тебя есть строчка в агенте >Dim ws As New NotesUIWorkspace
ты через ws что-то потом получаешь или просто забыл убрать?
Если я ничего не путаю - ничего страшного если агент не запускается на сервере

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

doka

Как вариант можно создать поле-флаг и по нему сформировать вьюху.
В базе А записывать это поле, потом в агенте базы В получать через вью этот документ, записывать нужные поя, а поле-флаг затирать
 
H

hosm

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Ну так таки да! Все работает! Если в рамках сервера - то вообще без проблем.
Вчера лень было проверять. Сегодня на скорую руку...
Кнопка в виде
Код:
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)...
Может путаю... но если агент запускается на клиенте - разве важны серверные настройки?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!