O
Omh
Привет!
Вот возникла проблемка, не знаю куда копнуть.
Ситуация: есть база, в ней есть background agent (который в отдельном триде запускается).
Агент там что-то процессит/генерит документы и т.д.
Я хотел после генерации доков попросить его выполнить ws.ViewRefresh, дабы показать свежесгенеренные документы.
Что бы не рефрешить ws, пока юзер работает с другими базами, в самом агенте я пытаюсь анализировать, что у меня в данный момент открыто.
Ну агент негодует адово:
то просто тупо фризиться, то кидает красный квадрат с unexpected handle, то nsd-шечку покажет.
В основном это происходит, если начинаешь лазить по документам, сохранять их и т.д.
Вся эта фигня происходит имеено в блоке определения текущей базы.
Если его закомментить, то начинает работать железно, но рефрешить лишние разы, что бесит.
ErrorHandler есть, но полчит как Исаев на допросе...
Код агента примерно такой:
Эни айдиас?
p.s. Сам знаю, что идея не очень хороша, но не хочется отказываться.
Вот возникла проблемка, не знаю куда копнуть.
Ситуация: есть база, в ней есть background agent (который в отдельном триде запускается).
Агент там что-то процессит/генерит документы и т.д.
Я хотел после генерации доков попросить его выполнить ws.ViewRefresh, дабы показать свежесгенеренные документы.
Что бы не рефрешить ws, пока юзер работает с другими базами, в самом агенте я пытаюсь анализировать, что у меня в данный момент открыто.
Ну агент негодует адово:
то просто тупо фризиться, то кидает красный квадрат с unexpected handle, то nsd-шечку покажет.
В основном это происходит, если начинаешь лазить по документам, сохранять их и т.д.
Вся эта фигня происходит имеено в блоке определения текущей базы.
Если его закомментить, то начинает работать железно, но рефрешить лишние разы, что бесит.
ErrorHandler есть, но полчит как Исаев на допросе...
Код агента примерно такой:
Код:
AgentSleep:
Sleep(SleepInterval)
Sleeps = Sleeps + SleepInterval
If Sleeps >= RefreshInterval Then
Sleeps = 0
If SOME_PROCESSING(Db) Then
Dim RefreshWsLocal As Boolean
RefreshWsLocal = False
Dim ws As New NotesUIWorkspace
Dim CurrUIDb As NotesUIDatabase
Dim CurrDb As NotesDatabase
If Not RefreshWsLocal Then
Set CurrUIDb = ws.CurrentDatabase
If CurrUIDb Is Nothing Then Goto RefreshTry
Set CurrDb = CurrUIDb.Database
If CurrDb Is Nothing Then Goto RefreshTry
RefreshWsLocal = (CurrDb.Title = AgentDbTitle) 'сравнивает название текущей базы и базы, в которой крутиться агент.
End If
RefreshTry:
If RefreshWsLocal Then Call ws.ViewRefresh
Set CurrDb = Nothing
Set CurrUiDb = Nothing
Set Ws = Nothing
Goto AgentSleep
End If
Else
Goto AgentSleep
End If
p.s. Сам знаю, что идея не очень хороша, но не хочется отказываться.