Я может конечно что-то путаю, но у агента есть свойство "работать на любом сервере"
А код написать так, чтоб работал на текущем сервере.
Именно это свойство и указали, агент запускается из-под автора, считаю что по этому и проблемы:
1. На сервере Б агент отрабатывает , но пишет, что запустился на сервере А (см. вывод "Запуск агента на "+agentServer$+" ..." )
2. На серверах А и В агент отрабатывает как нужно.
<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">Существуют еще два ньюанса, связанных с выполнением почтовых агентов. Первое, почтовые агенты, по умолчанию, запускаются на почтовых серверах автора агента (пользователя, сохранившего этот агент). То есть, на сервере, указанном как главный (почтовый) в документе пользователя серверной адресной книги. В репликах почтовой базы, расположенной на других серверах, эти агенты запускаться не будут. Для отключения проверки почтового сервера автора агента, администратор сервера может прописать в файле настроек переменную AMgr_DisableMailLookup со значением 1.
У меня ограничен доступ на Б и В (консоль и т.д.) , поэтому проверить параметр не могу
<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"><!--shcode--><pre><code class='LS'>Option Public
Sub Initialize
On Error GoTo err1
Dim s As New NotesSession <----------------- Видимо сессия получается для Б как сервера А т.к.
подписан агент автором с почтой на А (брррбред)
Dim agent As NotesAgent
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim bb As NotesRichTextItem
Dim maildoc As NotesDocument
Dim doc As NotesDocument
Set agent = s.CurrentAgent
Set db=s.currentdatabase
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("Запуск агента на "+agentServer$+" ...") <--------------------Здесь на А и В показывает корректно,
а на Б кажет А сервер
'---------------------------начало основного кода агента здесь
' нашли почтовую БД
Dim ServerName As New NotesName(db.Server)
Dim maildb As New NotesDatabase(ServerName.Canonical,"mail1.box")
If Not maildb.IsOpen Then
Set maildb = New NotesDatabase(ServerName.Canonical,"mail.box")
End If
If Not maildb.IsOpen Then
tema$={Произошла ошибка в агенте "}+agentName$+{" в БД "}+agentDb$+{" на сервере "}+agentServer$+{"}
mess$={ОШИБКА: не могу открыть почтовую базу mail.box}
Call errormail(tema$,mess$,agentSigner$)
Exit Sub
End If
search$={Form="Memo" & Mail_Server="}+ServerName.Canonical+{" & Mailed!="1"}
Set col=db.search(search$,Nothing,0)
If col.count=0 Then
Call agentLog.LogAction("Нет документов для обработки...")
GoTo endy
End If
Set maildoc=col.getfirstdocument
unid=maildoc.ID(0)
While Not maildoc Is Nothing
' проверяем, пришел ли документ на сервер
If Trim(unid)<>"" Then Set doc=db.getdocumentbyunid(unid)
If Not doc Is Nothing Then ' если документ пришел - записываем в почтовую базу сервера уведомление
Set bb = maildoc.Getfirstitem("body")
If bb Is Nothing Then Set bb = maildoc.createrichtextitem("body")
Set docProfile=db.GetProfileDocument("ProfileForm",db.server)
If Not docProfile Is Nothing Then
Call bb.appendtext(maildoc.txt(0))
Call bb.addnewline(2)
Call bb.AppendDocLink( doc, {ссылка на документ }+type_mail$+{.})
Call bb.appendtext({ - ссылка на документ }+type_mail$+{.})
Call bb.addnewline(1)
Call bb.AppendDocLink( db, "ссылка на базу данных")
Call bb.appendtext({ - ссылка на базу данных "}+db.title+{"})
maildoc.Recipients=maildoc.SendTo(0)
maildoc.Mailed="1"
Call maildoc.Save(True,True)
Call maildoc.CopyToDatabase(maildb)
End If
End if
nextmail:
Set maildoc=col.getnextdocument(maildoc)
If Not maildoc Is Nothing Then unid=maildoc.ID(0)
Wend
endy:
'---------------------------конец основного кода агента здесь
Call agentLog.LogAction("Завершение работы агента ...")
Call agentLog.Close()
Exit Sub
err1:
tema$={Произошла ошибка в агенте "}+agentName$+{" в БД "}+agentDb$+{" на сервере "}+agentServer$+{"}
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[/CODE]
<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">
1.Запуск по расписанию каждые 5 мин весь день.
2. Выполняться на любом сервере - не могу указывать конкретные, тогда нет смысла в репликации и надо после нее опять по всем серверам прописывать в таком агенте локальный сервер.
3.Выполняется из-под автор
4. уровень без-и 1 - запрещенны ограниченные операции.