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

Тема в разделе "Lotus - Программирование", создана пользователем paclord, 22 фев 2012.

  1. paclord

    paclord Гость

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

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

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

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    paclord
    1. Документ в режиме редактирования?
    2. Можно не использовать скрипт, а вызвать агента через SimpleActions
    3. Как настроен вызов и таргет агента? (см. свойства, 1я закладка)
     
  3. AndyOrlov

    AndyOrlov Гость

    Если этот код скопирован из проги, то лично я вижу просто ошибку в классе NotesSession нет св-ва GurrentDatabase, а есть СurrentDatabase
    Если это простая описка на форуме то согласен с Morpheus
     
  4. paclord

    paclord Гость

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

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

    AndyOrlov Гость

    Значит и в @Command([EditInsertFileAttachement];"C:/Temp/1.tif); тоже опечатка @Command([EditInsertFileAttachment];"C:/Temp/1.tif);

    Тут проблема не в агенте. Он точно запускается. Просто он работает в фоновом режиме (Back-End), а команды относятся к интерфейсу (UI). Агент просто не видит открытый документ. То что агент запускается должно быть видно в журнале агента. Попробуй его запустить из интерфейса и я думаю что файл вложится в поле.
    Я думаю что так не получится вложить.
    А весь код где агент запускается можно увидеть?
     
  6. turumbay

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

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

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Можно и я задам вопрос, у меня схожая проблема?
    Имею 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

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Скорее всего Trigger: On Schedule поможет
     
  9. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Не-а.
    Trigger: On Schedule

    Never

    Target: None

    То же самое
     
  10. doka

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Anonimous
    у тебя есть строчка в агенте >Dim ws As New NotesUIWorkspace
    ты через ws что-то потом получаешь или просто забыл убрать?
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Если я ничего не путаю - ничего страшного если агент не запускается на сервере

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

    doka Well-Known Member

    Регистрация:
    18 фев 2010
    Сообщения:
    118
    Симпатии:
    0
    Как вариант можно создать поле-флаг и по нему сформировать вьюху.
    В базе А записывать это поле, потом в агенте базы В получать через вью этот документ, записывать нужные поя, а поле-флаг затирать
     
  13. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    если агент запускается так, как указали выше, то сообщений на уи не будет.
    Кстати, насчет прав и доступа сервера к базам все проверено? (установлен требуемый уровень безопасности агента в зависимости от его кода, правильно установлен ACL и серверные настройки для запуска агентов, возможно, еще нужна настройка trusted servers)
    Попробуйте посмотреть лог агента, добавить обработчик ошибок и использовать запись в лог агента для отладки или в агенте создать временный документ и логировать туда все действия.
     
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ну так таки да! Все работает! Если в рамках сервера - то вообще без проблем.
    Вчера лень было проверять. Сегодня на скорую руку...
    Кнопка в виде
    Код (LotusScript):
    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
    код агента:
    Код (LotusScript):
    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

    Добавлено:
    Может путаю... но если агент запускается на клиенте - разве важны серверные настройки?
     
  15. Anonimous

    Anonimous Well-Known Member

    Регистрация:
    15 июн 2012
    Сообщения:
    120
    Симпатии:
    0
    Спасибо, в log.nsf отследил :blink:
     
Загрузка...

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