Агент Before New Mail Arrives

Тема в разделе "Lotus - Программирование", создана пользователем Jhareg, 18 сен 2012.

  1. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    Доброго времени суток!

    Извините если вопрос повторяется. Просто ничем подобным еще не сталкивался.

    Вопрос вот в чем:

    Есть SCOM сообщения (уведомления о состоянии серверов), которые приходят по почте Lotus.
    Эти сообщения делятся на 3 вида критичности: критическое, тревожное, информационное.
    Нужно чтобы эти сообщения, сортировались и перенаправлялись другим пользователям по виду критичности.
    И это все нужно сделать на клиентском приложении.

    Мои действия:
    Создаю агент и делаю событие до прихода почты
    делаю код
    Код (Text):
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument, doc2 As NotesDocument
    Dim auth,subj As NotesItem

    Set session = New NotesSession
    Set doc = session.DocumentContext

    Set auth = doc.Getitemvalue("FROM")
    If auth="SCOM" Then
    Set subj = doc.Getitemvalue("Subject")
    If subj = "AD Op Master is inconsistent" Then
    Call doc.Replaceitemvalue("SendTo","Пользователь_1")
    Call doc.Replaceitemvalue("Subject", subj & " !!! Сообщение SCOM !!!")
    End If
    End if
    Call doc.send ( True )
    Но когда сохраняю пишет "You do not have execution access privileges for agent". It will not run.
    Почта где тестирую своя и я там дизайнер. Агент подписал.
    Не могу понять что не так помогите плиз.

    Скажите еще где надо что-то надо настроить?
    Просто я сам не админ а разработчик, нужно как-то обяснить нашим админам где и что делать

    Большая ли разница при запуске агента на сервере?

    ЗЫ: System Center Operations Manager (SCOM) (ранее Microsoft Operations Manager, MOM) — программа компании Microsoft для управления и мониторинга ИТ-сервисов, приложений, серверов
     
  2. NickProstoNick

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

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    А рули настроить не пробовали?
     
  3. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Jhareg
    Но когда сохраняю пишет "You do not have execution access privileges for agent". It will not run.
    Агент на сервере будет работать, надо на сервере права иметь на запуск.
     
  4. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    По Rules невозможно сделать выборку, т.к. необходимо делать выборку и распределять по теме сообщения.
    Название темы может быть разной.


    Добавлено:
    Не могли бы вы подробнее объяснить какие права и где задаются?
     
  5. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.019
    Симпатии:
    8
    В Domino Directory, в документе Server надо права прописать.
     
  6. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    права прописали
    спасибо!

    но код не работает
    пишет

    variable not set
     
  7. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Потому что в коде ошибки.
    Правильно так:
    Код (LotusScript):
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument, doc2 As NotesDocument
    Dim auth,subj As String

    Set session = New NotesSession
    Set doc = session.DocumentContext

    auth = doc.Getitemvalue("FROM")(0)
    If auth="SCOM" Then
    subj = doc.Getitemvalue("Subject")(0)
    If subj = "AD Op Master is inconsistent" Then
    Call doc.Replaceitemvalue("SendTo","Пользователь_1")
    Call doc.Replaceitemvalue("Subject", subj & " !!! Сообщение SCOM !!!")
    End If
    End if
    Call doc.send ( False )
     
  8. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    И Send в конце не обязательно делать. Достаточно просто изменить получателей.
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Jhareg
    Вставь обработчик ошибок в код:
    Код (LotusScript):
    Sub Initialize
    On Error GoTo handler
    Const FuncName = {Agent} ' имя агента

    Print FuncName & " Start"

    ' Твой код агента

    Print FuncName & " Finish"
    Goto endh

    handler:
    Print FuncName & ": " & Err &", в стр " & Erl & " " & Error$ 'будет писать в Log.nsf
    Resume endh
    endh:

    End Sub
    Поищешь по логам потом, искать по имени агента. Чуть упростит жизнь.
     
  10. ipopov

    ipopov Гость

    На клиенте есть ECL (Execution Control List), скорее всего там у тебя руки и оторваны. Посмотри в File - Security - UserSecurity
     
  11. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    Всем спасибо!
    вроде все работает, но я не могу понять почему размер сообщения значительно увеличился?
    раньше было 2 кб, теперь стал 100 кб
    думаю это от того что я делаю reply
    Код (Text):
    Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument, doc2 As NotesDocument
    Dim auth,subj As String
    Dim c_subj As Integer
    Set db = session.Currentdatabase
    Set session = New NotesSession
    Set doc = session.DocumentContext
    Set doc2 = New NotesDocument (db)
    auth = doc.Getitemvalue("FROM")(0)         
    If auth="scom" Then
    subj = doc.Getitemvalue("Subject")(0)
    If InStr(1,subj,"A problem has been detected with the trust relationship between two domains") > 1 _
    Or InStr(1,subj,"WMI Probe Module Failed Execution") >1
    Then
    doc2.Subject(0) = subj & " *** КРИТИЧЕСКОЕ ***"
    doc2.Body(0) = doc.Getitemvalue("Body")
    doc2.SendTo(0) = "автор1, автор2, автор3" ' пользователи по списку
    Call doc2.send(true)
    Else
    doc2.Subject(0) = subj & " *** НОВОЕ *** "
    doc2.Body(0) = doc.Getitemvalue("Body")
    doc2.SendTo(0) = "автор1"
    End If
    End If
    End Sub
    но код не работает. помогите
     
  12. ipopov

    ipopov Гость

    раз: права на запуск/создание агентов на сервере, закладка Security в Server Document
    два: ты уже сказал
    Dim session As New NotesSession
    Зачем потом
    Set session = New NotesSession ?!!
     
  13. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    1) права на запуск есть
    2) это уже убрал
    но код все равно не отрабатывает
    стоит обработчик ошибок, но ничего не показывает
    как посмотреть где тормозит?
     
  14. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    В логах что?
    Как обработчик выглядит? Если мой ищи в Log.Nsf сервера по имени агента.
    Если есть Start и Finish и без ошибок, то проблема может быть в условии:
    If auth="scom" Then - просто не выполняется и идет на выход.
    auth - если это имя сервера, то скорее всего ты неверно сравниваешь... Оно каноническое будет CN=..
     
  15. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    создать пускалку в интерактиве (агент, с целью None)
    @Command([ToolsRunMacro];"ProcessIn");
    @All
    где вместо "ProcessIn" имя своего маилин и отлаживать спокойно :mail:
     
  16. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    в логах агент запускается и вот что пишет
    189, в стр 76 Illegal use of PROPERTY

    76 строка это:
    Код (Text):
    75:  Then
    76:         doc2.Subject(0) = subj & " *** КРИТИЧЕСКОЕ ***"
    77:         doc2.Body(0) = doc.Getitemvalue("Body")
    78:         doc2.SendTo(0) = "автор1, автор2, автор3" ' пользователи по списку
    79:         Call doc2.send(true)
    80:     Else
    получается неправильно делаю присвоение темы и тело сообщении для нового документа.
    это я делаю для того, чтобы размер файла при отправке не изменялся, а то получается как reply и размер соответственно увеличивается
    может я что делаю не так?
     
  17. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.019
    Симпатии:
    8
    Ричтекст-поля так не присвоишь, RTFM.
     
  18. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Я ещё в посте #7 написал как надо делать. auth, subj должны быть типа String, а NotesItem.
     
  19. Jhareg

    Jhareg Member

    Регистрация:
    18 сен 2012
    Сообщения:
    20
    Симпатии:
    0
    а как надо присваивать?


    Добавлено:
    они сейчас стоят как String

    актуальный код в посте #11
     
  20. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Jhareg
    Используй копирование NotesItem.
    Код (LotusScript):
    Set BodyItem = doc.GetFirstItem( "Body" )
    if BodyItem is Nothing Then Error 5005, "No Body in mail" 'Это как проверка на существование, можно и убрать.
    Set BodyItem2 = BodyItem.CopyItemToDocument( doc2, "Body" )
     
Загрузка...

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