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

Тема в разделе "Lotus - Программирование", создана пользователем fedotxxl, 25 дек 2008.

  1. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Странно, всегда думал, что метод run для этого и сделан - чтобы агенты отрабатывались на локале.... но нет =(
    Нужно запустить агент через LS (пусть кнопкой), чтобы работали messagebox'ы и т.д.
     
  2. Azrael

    Azrael Гость

    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:
     
  3. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Прости, не понял тебя...
     
  4. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    а чё понимать-то "наливай - да пей" :unsure:...
    зачем вызывать агент из агента? Если код используется более одного раза (зависимо от контекста) - его надо вынести в библу (ИМХО)
     
  5. Azrael

    Azrael Гость

    угу :unsure:
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    и шо? библиотечный код, вызванный из агента, не считается кодом вызванным из агента? :wacko:
     
  7. dobozy

    dobozy Гость

    Тогда не потребуется notesAgent.Run, что собсвтенно автору и надо я так понял.
     
  8. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а хз... шо ему надо )) неужто fedotxxl не знает, что код можно поместить в либу и вызвать оттуда, а не писать для этого агент?
    что-то сомневаюсь...
    мне вот почему-то кажется, что его агент должен был как-то умно собрать документы, либо чего-то еще... поэтому и агент...
     
  9. Azrael

    Azrael Гость

    Akupaka
    О чем, собсно, и речь, что в агентах, запускаемых через NotesAgent.Run не работают UI-функции
     
  10. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а я-то глупый и не заметил!... спасибо, что подсказал! :D))
    я это тоже читал и понял, в чем проблема, но боюсь, что ни запуская агент собаками, ни вызывая из агента библиотечный код, мессаджи не появятся...

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

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Что мне нужно:
    мне нужно "динамически" исполнять UI код. Т.е. аналитик указал, что перед кнопка должна отображать messageBox. В кнопке я это прокодировать не могу (не спрашивайте почему), я могу "динамически" подтянуть нужный мне агент и запустить его... но тут облом получился
    Единственное, что пришло на ум - execute... прийдется так
     
  12. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    пажди... в кнопке не можешь закодить мессаджбокс, а закодить нужный агент проще?! О_О
    в чем динамичность вообще? и что за "динамичность" нужна?

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    дык почему UI код низя в библе создать?
    Кнопка же не диктует цепочку агентов, она могет тока один вызвать, или она и вызывает агент через скрипт?
     
  14. fedotxxl

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Akupaka
    Угу =) У меня кнопка настраивается настроечными документом. Почти все можно учесть, но что-то нужно позволить прокодить. Соотв. это кодирует разработчик, а налитик должен указать, что нужно (в теории) запустить такой-то агент.
    Этот агент должен испонять UI методы... сейчас я сделал так - разработчик добавляется в класс метод, а аналитик указывает какой метод запустить. Метод запускается при помощи execute. Есть какое другое решение?
     
  15. dobozy

    dobozy Гость

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

    Или я ошибаюсь?
     
  16. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    работает, на сколько мне известно...
     
  17. dobozy

    dobozy Гость

    Если вы пишите

    str_LS = "g_MyClass.Method1()"

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

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

    On Error Goto ErrorHandler

    Set g_s = New NotesSession
    Exit Function

    ErrorHandler:
    Messagebox "Error"
    Exit Function

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    наскока я помню... Print тоже не будет работать в таком коде
     
  19. Azrael

    Azrael Гость

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    короче, мы тут с dobozy пообщались и пришли к выводу, что:

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

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

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

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

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

    Код (Text):
    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, поправь меня, если в чем-то твои мысли не сошлись )))
     
Загрузка...

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