Background

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

Гость
#1
Привет!!!

Кто знает как можно запустить агент в background режме?
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#2
Привет!!! :)
Поставить галку в пропертях агента "Run in background client thread" (на первой закладке)
И шмальнуть на собаках или из меню "Actions"
Всё это начиная с 6-ки.
 

Гость
#3
Что то сразу не заметил это свойство :)

Спсасибо огромное!!!
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#4
А если на собаках не подходит? Если надо только по NotesAgent.Run(agentName$)?

Ну или...
Можно ли сделать кнопку, на ней посадить собачный вызов агента, а потом программно из LS инициировать нажание кнопки?
 

TIA

:-)
Lotus team
15.05.2009
790
2
#5
Из LS:
1. создаёте форму, у которой в PO Call source.Close, а на QC @Command([ToolsRunMacro];<поле с именем агента>)
2. если не надо чтоб агент отображался в меню, программно заключите имя агента в скобки (поле $Title)
3. для запуска агента создайте вспомогательный документ, поместите в него имя агента и имя формы из п.1
4. ws.EditDocument этому документу

Вспомогательная форма откроется и закроется, а агент продолжит работу.

Развитие идеи: Иметь одного агента запускающего любой код в фоне.
Для чего передать агенту имя библиотеки, класса и метода для запуска.
Агентом Execute нужной библиотеки и метода.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#7
Вообще, бекграуд агенты классная штука.
Меня очень радуют.

Можно сделать жалкое(?) подобие AJAX - подгружать данные на лету...
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#9
Ну например в форме на PO шмаляем бекграунд агента на собаках.
В самом начале агента ловим текущий док:
Код:
Dim ws As New NotesUIWorkspace
Dim uiDoc As NotesUiDocument
Dim Doc As NotesDocument
Set uiDoc = ws.CurrentDocument
Set Doc = uiDoc.Document
Дальше агент собирает тяжёлую информацию, допустим по базам ближлежащим и постепенно постит её в документа.
Получается кагбэ асинхронная подгрузка информации :)
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#10
Это уже есть и работает или идея?

Разве в бэкграунде будут работать UI-методы?
Каким образом будет производиться обновление текущего дока "по мере поступления информации"?
 

duchan

Well-Known Member
20.09.2006
108
3
#12
В хелпе написано, шо не должно.
Че-то мне кажется, что нас пытаются обмануть... О-оо-мх, а ну выхади :)
ну, вообще-то можно если осторожно...
Потрясая основы (только для Win).

НО! если из backend'а лезть в UI, то можно легко уронить клиент, например когда пользователь откроет какой-либо диалог...
{теоризируя :) } лучше что бы UI сам брал информацию, возможно по мере сбора инфы backend агентом, котротый ее куда сохраняет. например можно использовать очереди...
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#13
Ща, чуть подразгребу работу и в течении часа выложу прототипчик базы, где это работает.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#14
Посмотреть вложение 3242
Вот прототипчик.
Что делает: на открытие документа запускается агент, который заполняет этот самый документ.
Можно открыть сразу несколько доков, будут заполнятся несколько параллельно.

ПсевдоАджакс в массы :newconfus:

Жду отзывов!!!

Там без всяких мега проверок, просто концепт.
 

divankin

Senjor developer
13.08.2009
182
0
#15
Вот прототипчик.
Что делает: на открытие документа запускается агент, который заполняет этот самый документ.
Можно открыть сразу несколько доков, будут заполнятся несколько параллельно.

Жду отзывов!!!
То есть промышленно вы этот метод еще не применяете? Мне лично боязно так вольно обращаться с UI объектами в силу их некоторой неустойчивости.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#16
У меня в некоторых базах применяется.
 

VladSh

начинающий
Lotus team
11.12.2009
1 248
2
#17
Omh
Толково! Теперь только придумать, где это можно использовать...)
 
D

Darker

Гость
#18
Мы применяем фоновые агенты при сохранении документа, так как в QC многое что происходит, а юзер жалуется, что долго сохраняется
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#19
И ещё, там UI объекты не задействованы:
В самом начала агента ловится NotesDocument от ws.CurrentDocument и вся инфа постится в него.
Т.е. никаких UiDoc.SetЧто-тоТам, всё через бекграунд объекты, поэтому можно лазить по другим документам/базам, а наш инициированый документ будет заполнятся сам по себе :newconfus: