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

Тема в разделе "Lotus - Программирование", создана пользователем dimat, 15 апр 2011.

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет!
    Задача такая: Есть шедульный агент, который при запуске проверяет наличие документов в папке, если документы имеются, то необходимо каким то образом уведомить пользователя.
    вопрос какими способами можно отослать сообщение пользователю?

    зы: хотел сделать с помощью консольной команды broadcast notesSession.SendConsoleCommand, но как я понял из справки ее можно отправлять только на другой сервер.
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Call notesDocument.Send( attachForm [, recipients ] )
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Имеешь ввиду аналог Brodcast Message как в админке?
    Я думаю через net send
     
  4. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Забыл указать, у нас не используется почтовая система Domino
    можно поподробнее что это?
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Можно и на текущий.
    В справке, кстати, нет слова "только".
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Сетевая команда
     
  7. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Забыл агенту права поставить, поэтому он никак не хотел отсылать команду.
    Всем спсаибо, вопрос закрыт
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    А результат этого всего что? Окно сообщения у клиента?
     
  9. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    При обноружении шедульным агентом документов в папке, выполняется:
    notesSession.SendConsoleCommand
    пользователю, который указан в документе.
    У пользователя появлется окошко сообщения с текстом: ServerName/OrgName: текст сообщения

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
  12. azzza

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Приветствую всех !

    Используя 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
     
  13. lmike

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

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

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    т.к. код вызова напускается при нажатии юзером на кнопку в окне типа Да Нет. Таким образом он выполняется с правами ограниченной записи(юзера). а бродкастовые сообщаги можно запускать только под админами, есть настройки которые трогати низя :rolleyes:

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

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
    нет, на сервере - с правами подписавшего агент
    дык и подпишите тем, у кого есть права на запуск

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

    azzza Well-Known Member

    Регистрация:
    26 апр 2011
    Сообщения:
    54
    Симпатии:
    0
    Глупо , но заметил что даже на кошках (я и фейк) , если передавать короткое сообщение типа "Привет" срабатывает влет, а если длинное и со вставленными переменными - тормозит, прям и не знаю, куда рыть. Применяю бродкаст, чтобы один пользователь информировал другого, но что-то тормозит передачу бродкастов. Может поможете где косячок. Код весь выкладывал, может по нему можно что подсказать.
    :rolleyes:
    Почему тогда возникает ошибка и что можно по ней решить.

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

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