Background Client Thread & Ui

  • Автор темы D!m@n
  • Дата начала
D

D!m@n

Гость
#1
Добрый день, уважаемые соучастники!

Всю сознательную жизнь думал, что в фоновых агентах нельзя создавать объекты лотусных фронт-энд классов и вызывать их методы.
Об этом нас предупреждает и хелп:
To run an agent without having to wait until it completes, check "Run in background client thread."
Note that you should check this option only if the agent (or the top-level agent that calls this agent) is triggered by "On event - Action menu selection."
To get the full benefit of this feature, the database should reside on a server and the agent must be invoked via the client.
If you check this box and the agent references front end classes, the user receives a run-time error.
Интернет подтверждает:
http://www.breakingpar.com/bkp/home.nsf/0/...7256FC40074B111

А тут как-то решил попробовать... и получилось. Создал объект NotesUIWorkspace, вызвал его методы Prompt и SaveFileDialog - все работает, никаких ошибок.
Клиент 8.5.2 на винде.

Не сомневаюсь, что узнал секрет Полишинеля, но все-таки вопрос: а в чем подвох? :)
 
D

D!m@n

Гость
#3
Какой сервер? :)
Речь о background client agent.
 

Вложения

  • 3.2 КБ Просмотры: 230
D

D!m@n

Гость
#5
Дык я ж и говорю - работает!

Создайте агента со следующим кодом:
Код:
Sub Initialize
On Error GoTo ErrCatch	
Dim uiw As New NotesUIWorkspace
Dim sResult As String
sResult = uiw.Prompt(3, "Заголовок", "Введите че-то", "че-то")
MsgBox "Вы ввели: " + sResult
GoTo es
ErrCatch:
MsgBox "Ошибка " & Err & ": " & Error$ & " в строке " & Erl
Resume es
es:
End Sub
Затем поднимите флажок "Run in background client thread" и запустите агента.
У меня на клиенте 8.5.2 работает (т.е. в данном случае на экране появляется сначала Prompt, потом MessageBox с введенным в Prompt'е текстом).
С файловыми диалогами тоже работает.
С EditDocument не проверял.
 
D

D!m@n

Гость
#7
Мышкой (см. прилагаемый рисунок :)). А Вы как обычно запускаете агентов с триггером On Event\Action menu selection? :)
 

Вложения

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#8
Да уж сто лет как работает.
Я как-то даже делал тему и выкладывал базку, что-то там про псевдо-аджакс под нотесом. (я знаю, что "аджакс" не правильно, но мне так нравится).
Все нативные ws ф-ии (Save/OpenFileDialog, Prompt, PickList...) работают.
Не работает тока DialogBox.

Вообще, бекграундные треды - офигенная вещь!
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#9
Мышкой (см. прилагаемый рисунок ). А Вы как обычно запускаете агентов с триггером On Event\Action menu selection?
и что если назвать агент фоновым он становится фоновым? ;)
мдя, логика зачотная ;)
 
D

D!m@n

Гость
#10
и что если назвать агент фоновым он становится фоновым? ;)
мдя, логика зачотная ;)
Будете к словам придираться?..

Ну хорошо:
Во-первых, фоновым он называется в документации.
Во-вторых, учитывая то, что такой агент отрабатывает в background client thread, что в переводе с английского означает "фоновый клиентский поток", название "фоновый агент" представляется мне достаточно корректным (см. перевод на Lingvo Online).
В-третьих, отрабатывает он реально в фоновом режиме, пользователь во время работы этого агента может спокойно продолжать работу с клиентом Lotus Notes.

Ну и чем Вам не фоновый агент?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#12
вот именно!

Во-вторых, учитывая то, что такой агент отрабатывает в background client thread, что в переводе с английского означает "фоновый клиентский поток", название "фоновый агент" представляется мне достаточно корректным (см. ]]>перевод на Lingvo Online]]>).
В-третьих, отрабатывает он реально в фоновом режиме, пользователь во время работы этого агента может спокойно продолжать работу с клиентом Lotus Notes.
фоновый агент это агент отрабатывающийся на сервере, у сервера воркспейса нету - лишь текстовая консолька оттого такие агенты на сервере никогда не запустятся, отого я и не согласен с лихим переводом и натягиванием background client thread как "фоновый агент" правильно его так и называть как его вам переводит лингво, с чётким указанием, что КЛИЕНТСКИЙ
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#13
фоновый агент это агент отрабатывающийся на сервере
Из серии "белое — это пушистое". Серверный — это агент, исполняющийся на сервере. Фоновый — это агент, исполняющийся в фоновом, т.е. не основном потоке. Речь здесь об агенте, исполняющемся в фоновом клиентском потоке (background client thread), и о том, что вопреки утверждения IBM, некоторые уи-методы в нём доступны.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#14
у нотусни есть несколько (а вот скока не знаю) тредов, для разных нужд...
что из них индусы называют фоновой - это дело их личной гигиены :trash:
просто для них любая треда, не связанная (напрямую) с циклом основного виндового окна клиента - будет фоновой :crash:
мосх виндовс прогерра - он такой...
 
D

D!m@n

Гость
#15
фоновый агент это агент отрабатывающийся на сервере, у сервера воркспейса нету - лишь текстовая консолька оттого такие агенты на сервере никогда не запустятся, отого я и не согласен с лихим переводом и натягиванием background client thread как "фоновый агент" правильно его так и называть как его вам переводит лингво, с чётким указанием, что КЛИЕНТСКИЙ
nvy Вам правильно ответил:
Серверный — это агент, исполняющийся на сервере. Фоновый — это агент, исполняющийся в фоновом, т.е. не основном потоке. Речь здесь об агенте, исполняющемся в фоновом клиентском потоке (background client thread), и о том, что вопреки утверждения IBM, некоторые уи-методы в нём доступны.
Тут и добавить нечего.

ToxaRat, ну перепутали, с кем не бывает... но зачем спорить-то, за слова цепляться?..
По большому счету тут все свои :crash:
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#16
ToxaRat, ну перепутали, с кем не бывает... но зачем спорить-то, за слова цепляться?..
я не спорю, я уточняю :(
мне вот дальше интересней а применение этой фичи чем вообще хорошо?
и чем она лучше того-то таймера?

вот думаю, как бы удачнее этот тренд повесить на формирование отчёта, пока юзер там себе еще чо-то вояет, однако быстрее отчёт не сформируется и каков максимум тренд потоков можно задать? ;)
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#17
как бы удачнее этот тренд повесить
В лёгкую. Почитав сию тему, попробовал агентику, экспортирующий данные из Лотус-базы в файл, поставить эту замечательную галку "Run in background client thread". В начале агента пользователю открывается ws.SaveFileDialog для указания файла экспорта. Так вот, диалог открылся, но вот ввести имя файла и нажать ОК не получилось — максимум можно было таскать окно диалога по экрану. Пришлось тушить клиента (8.0.1 en на WinXP). Другие диалоги пока не пробовал.
 
D

D!m@n

Гость
#19
В лёгкую. Почитав сию тему, попробовал агентику, экспортирующий данные из Лотус-базы в файл, поставить эту замечательную галку "Run in background client thread". В начале агента пользователю открывается ws.SaveFileDialog для указания файла экспорта. Так вот, диалог открылся, но вот ввести имя файла и нажать ОК не получилось — максимум можно было таскать окно диалога по экрану. Пришлось тушить клиента (8.0.1 en на WinXP). Другие диалоги пока не пробовал.
Буквально в пятницу ввел в действие аналогичного агента. У меня клиент, как я уже говорил, 8.5.2 эклипснутый, у юзеров - 8.5.1 Basic. И у меня, и у них диалоги работают... B)

Добавлено:

вот о каких ограничениях я говорю, если кто не понял
Это попытка запустить 2-х бэкграундных агентов параллельно на одном клиенте?..
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#20
вот о каких ограничениях я говорю, если кто не понял
Ну так это скорее всего попытка показать ws.DialogBox.
DialogBox, да - не работает, но все промты, пиклисты и прочие сейвфайлдиалоги - работают.
Почти всегда их хватает.