Послать сообщение конкретному пользователю

dimat

Lotus team
31.07.2008
516
0
#1
Всем привет!
Задача такая: Есть шедульный агент, который при запуске проверяет наличие документов в папке, если документы имеются, то необходимо каким то образом уведомить пользователя.
вопрос какими способами можно отослать сообщение пользователю?

зы: хотел сделать с помощью консольной команды broadcast notesSession.SendConsoleCommand, но как я понял из справки ее можно отправлять только на другой сервер.
This method can be used in a scheduled agent on a server to send console commands to another server
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#3
Имеешь ввиду аналог Brodcast Message как в админке?
Я думаю через net send
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#5
зы: хотел сделать с помощью консольной команды broadcast notesSession.SendConsoleCommand, но как я понял из справки ее можно отправлять только на другой сервер.
Можно и на текущий.
В справке, кстати, нет слова "только".
 

dimat

Lotus team
31.07.2008
516
0
#7
Забыл агенту права поставить, поэтому он никак не хотел отсылать команду.
Всем спсаибо, вопрос закрыт
 

dimat

Lotus team
31.07.2008
516
0
#10
А результат этого всего что? Окно сообщения у клиента?
При обноружении шедульным агентом документов в папке, выполняется:
notesSession.SendConsoleCommand
пользователю, который указан в документе.
У пользователя появлется окошко сообщения с текстом: ServerName/OrgName: текст сообщения

Добавлено:
Из консольной справки по Broadcast: BROADCAST "msg" ["user/database"] Broadcast a message to user(s)
Если в тексе сообщения перед msg поставить (!), сообщение показывается ввиде окошка
 

azzza

Well-known member
26.04.2011
65
0
#12
Приветствую всех !

Используя Brodcast Message накатал агентика, по отправке сообщений, но возникли грабли :)

При тестировании на кошках (я и фейковый юзер), проблем не наблюдалось.
А потом время показало, что после запуска агента проходит мин 5-10, пока появиться сообщение об успешной отправке.
Написал логирование и словил ошибку ОШИБКА: " 4000:Notes error: No response from server for this command " см в приложенных текстах далее.

Прошу плиззз гуру наставьте на путь истинный "начинающего".

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Вызов агента (вырезки из кода)</div></div><div class="sp-body"><div class="sp-content">

Dim pardoc As NotesDocument
Dim item As NotesItem
Dim session As New NotesSession
Dim user As NotesName
Dim agent As NotesAgent
Dim db As NotesDatabase

Set db=session.currentdatabase

Set user = New NotesName(CStr(session.UserName))

' Создаем документ для параметров

Set pardoc = db.CreateDocument

' Наполняем полями
Set item = pardoc.AppendItemValue("singer", user.Common)
item.IsAuthors=True

Call pardoc.save(True, True)

' Устанавливаем привязку параметрического документа

Set agent = db.GetAgent("(Broadcasting)")
Call agent.RunOnServer(pardoc.Noteid)
MessageBox "Сообщение отправлено, попробуйте войти в документ позже...",64,"Сообщение успешно отправлено."


Параметры запуска Агента:

Runtime Trigger On event Agent list selection
Target None
Options Shared и Profile this agent
Run of behalf of - Administrator
Runtime security level 3.Allow restrict operations with full administration rights
галки стоят All readers and above и Allow Public access users to view and run this agent

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Агент</div></div><div class="sp-body"><div class="sp-content">
Option Public


Sub Initialize()
On Error GoTo err1
Dim s As New NotesSession
Dim agent As NotesAgent
Dim doc As NotesDocument
Dim db As NotesDatabase

Dim mes As Variant

Set db = s.CurrentDatabase
' db.delayupdates = False
Set agent = s.CurrentAgent

agentName$=agent.name
agentSigner$ = agent.Owner
agentDb$=db.Title
agentServer$=db.Server

Dim agentLog As New NotesLog("Agent log")
Call agentLog.OpenAgentLog
Call agentLog.LogAction("Start")
'---------------------------начало основного кода агента здесь
' Получение параметрического дока через запуск агента
Set doc = db.GetDocumentById(agent.ParameterDocID) <--вот здесь получаю после отправки ОШИБКА: " 4000:Notes error: No response from server for this command ". Как следствие сообщение не доходит до адресата.

mes = "Пользователь "+doc.singer(0)+" просит Вас освободить сообщение ..."


Call s.Sendconsolecommand(db.server, |BROADCAST "(!) BROADCAST "(!) |+mes+|" "|+doc.locker(0)+|"|)

' Прощаемся с док-ом
Call doc.remove(True)

Call agentLog.LogAction("Success")
Call agentLog.Close

'---------------------------конец основного кода агента
Exit Sub
err1:
tema$={Произошла ошибка в агенте "}+agentName$+{" в БД "}+agentDb$+{" на сервере "}+agentServer$+{"}
Call agentLog.LogAction(tema$)
Call agentLog.Close
mess$={ОШИБКА: "} & Str(Err) & {:} & Error$ & { " в строке } & Erl() & {.}
Call errormail(tema$,mess$,agentSigner$)
Exit Sub
End Sub

Sub errormail(tema As String, mess As String, who As String)
Dim s As New NotesSession
Dim db As NotesDatabase
Set db=s.currentdatabase
Set mdoc=db.createdocument
mdoc.form="Memo"
mdoc.Subject=tema
mdoc.SendTo=who
Set rtitem = New NotesRichTextItem( mdoc, "Body" )
Call rtitem.AppendText(mess)
Call mdoc.Send(False)
End Sub
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#13
прежде всего непонятно - зачем полные админские права, и зачем исполнять от лица к-л?
 

azzza

Well-known member
26.04.2011
65
0
#14
прежде всего непонятно - зачем полные админские права, и зачем исполнять от лица к-л?
т.к. код вызова напускается при нажатии юзером на кнопку в окне типа Да Нет. Таким образом он выполняется с правами ограниченной записи(юзера). а бродкастовые сообщаги можно запускать только под админами, есть настройки которые трогати низя :rolleyes:

Если я где-то неправ, тогда просветите как верно плизз.
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#15
Таким образом он выполняется с правами ограниченной записи(юзера)
нет, на сервере - с правами подписавшего агент
а бродкастовые сообщаги можно запускать только под админами, есть настройки которые трогати низя
дык и подпишите тем, у кого есть права на запуск

Добавлено: бродкасты не обязаны ходить "как по часам", но 5-10 мин - это многовато :rolleyes:
"ошибка" в логах КМК - к теме никак не относится
 

azzza

Well-known member
26.04.2011
65
0
#16
нет, на сервере - с правами подписавшего агент
дык и подпишите тем, у кого есть права на запуск

благодарю, т.е получается что зря запускаю из-под админа, т.к. я подписал - агент выполниться под моей учеткой (даже если я не в лотусе). т.е behalf можно убрать, попробую так

Добавлено: бродкасты не обязаны ходить "как по часам", но 5-10 мин - это многовато :)
"ошибка" в логах КМК - к теме никак не относится
Глупо , но заметил что даже на кошках (я и фейк) , если передавать короткое сообщение типа "Привет" срабатывает влет, а если длинное и со вставленными переменными - тормозит, прям и не знаю, куда рыть. Применяю бродкаст, чтобы один пользователь информировал другого, но что-то тормозит передачу бродкастов. Может поможете где косячок. Код весь выкладывал, может по нему можно что подсказать.
:rolleyes:
Почему тогда возникает ошибка и что можно по ней решить.

Заранее спасибо за помощь...