• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Агенты

  • Автор темы Hedg
  • Дата начала
H

Hedg

Для: Medevic
Мне нада обрабатывать коллекцию документов, и вылавливать из каждого NoteID - не есть удобно.
Для: Morpheus
Что не видно никаких подходяших параметров. За тов хелпе нашёл вот такой AMGR_SCHEDULINGINTERVAL
Specifies a delay (in minutes) between running of the Agent Manager's scheduler. Valid values are 1 minute to 60 minutes. Это оно???
 
H

Hedg

Снова трабла с агентом.
Сделал View для доков которых агент должен обрабатывать, и доступ дал к нейтолько себе, агент подписан мной, что бы юзвери не трогали документы пока агент их не отработает.
Агент стартует по рассписанию, каждую минут.
Всё отрабатывает на ура, но потребовалось сделать отправку письма юзверю что всё ОК с документом, и трабла начинается тогда когда создаю в письме ссылку на документ, ссылка генерируется на основе вьюхи из которой агент берёт доки, но юзвери к ней не имеют доступ, соответственно при переходе по линку получае ошибку. Как можно это решить по другому???
 
I

Idea

Если позволите, я тут тоже с агентом своим влезу. Пишу впервые такую штуку и от мануалов уже голова пухнет, потому прошу мне на примитивном русском объяснить такую вещь.
Агент у меня запускается на WebQuerySave, сам он написан на Lotus Script, Run on behalf of не задаю.
То есть, насколько я понимаю, агент подписывается текущим пользователем или как?
Суть агента - если выставлена галочка в неком поле, создавать в календаре текущего пользователя Reminder. Аналогичный код для клиента, висящий на PostSave работает как надо. Соответственно все скопировала, Dim-ы вынесла в declarations и заменила
Код:
 	Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Set uidoc = ws.CurrentDocument
на
Set session= New NotesSession
uidoc=session.documentcontext.universalid
Set curdoc=db.getdocumentbyunid(uidoc)
И всё. Ошибок не пишет, но и не работает. Куда копать?
 
H

Hedg

Агент не подписывается текущим пользователем, агент подипывается от имени кого он будет работать в свойствах агента, там же можео задать тех кто имеет право его запускать.

Для: Idea
Уверены что в uidoc=session.documentcontext.universalid попдает UID документа???
 
O

oshmianski

Для: Idea
Set curdoc=session.documentcontext - это и есть документ, в контексте которого запускается ваш агент.
если он ничего не делает, значит ошибка где-то. смотрите лог сервака. а может вы просто не сохраняете документ Remainder. или может не имеете доступа к календарю этого пользователя. это все так.. пальцем в небо. СМОТРИТЕ лог, там должна быть ошибка. в агенте сделайте обработчик ошибки и Print эту ошибку (или просто окончание работы агента), он должен распечатать ее, если у вас при сохранении еще и FileCloseWindow делается.
 
I

Idea

Так вот я и пытаюсь выяснить, чей это будет агент, когда (ещё раз повторю) в Run on behalf of никого нет?
На сколько я понимаю, писать в свой календарь с помощью моего кода может только его владелец, то есть надо чтоб агент запускался от имени того, кто жмет кнопку сохранения. Как это обеспечить?

Вопрос: как посмотреть лог сервака? сразу говорю, я не его админ.

Для Hedg
uidoc=session.documentcontext.universalid - это строка, а не NotesUIDocument
так как далее
Set curdoc=db.getdocumentbyunid(uidoc)
см Help:
public Document getDocumentByUNID(String unid)
throws NotesException
 
O

oshmianski

Для: Idea
1. еще раз повторяю - не надо делать никаких GetDocumentByUNID!!!!
Set curdoc=session.documentcontext - и се!!!

2. на серваке (в корне обычно) лежит базка log.nsf, вот этот лог и смотрите.
 
H

Hedg

Для: Idea
Смотрю и вижу

Finds a document in a database, given the document universal ID (UNID).
Defined in
NotesDatabase
Syntax
Set notesDocument = notesDatabase.GetDocumentByUNID( unid$ )
Parameters
unid$
String. The universal ID of a document.
 
I

Idea

Ок, с universalID уговорили :))

А кроме как log.nsf смотреть, средств диагностики нету? Щас опять буду сидеть пол дня - админа ждать, прав на эту базу у меня нет.

ыыыы....что и требовалось доказать) доступ мне дали. легче не стало, как в ЭТОМ найти лог своего агента?))
 
O

oshmianski

Для: Idea
если сделать сохранение так: @Command([FileSave]); @Command([FileCloseWindow]), то агент, который отрабатывает в WebQuerySave может "печатать" прямо в страницу броузера. т.е. любой print в таком агенте будет выводить соответствуюший текст в страницу броузера.
я вам советую добавить в своего агента обработчик ошибок и пару принтов в промежуточных важных узлах скрипта. таким образом можно организовать своеобразный дебагер таких агентов.

по поводу log.nsf. жестко однако админ работает, что даже читателя разработчику не дает. смотреть можно еще консоль сервака, но судя по всему, прав на него у вас тоже нету
 
H

Hedg

Предыдущую проблему решил.
используя вместо AppendDocLink
AppendText (ссылка на вьюху в которой будет находится документ)
когда приходит письмо пользователю хотелось бы, чтобы ссыка была похоже на AppendDocLink,
т.е. в виде иконки или текста.
Подскажите пожалуйста как это сделать?
 
I

Idea

Для: Idea
я вам советую добавить в своего агента обработчик ошибок и пару принтов в промежуточных важных узлах скрипта. таким образом можно организовать своеобразный дебагер таких агентов.

добавила я обработчика, выдал он мне, что ошибка
Error # 4063 : Database has not been opened yet
Код:
 		mailDBName = Evaluate({@MailDbName})
Set maildb = session.GetDatabase(mailDBName(0), mailDBName(1), False)

Set doc = maildb.CreateDocument
в последней строчке. а как с этим бороться - я без понятия
 
I

Idea

Вышла из положения вот так вот:
Код:
Dim session As NotesSession
Dim reg As NotesRegistration
Dim maildb As NotesDatabase
Dim curdoc As NotesDocument
Dim user As Variant
Dim mailDBName As String
Dim mailDBServ As String

Set session= New NotesSession
Set reg = New NotesRegistration
reg.RegistrationServer = "lotus2/IATE"

Set curdoc=session.documentcontext
user = curdoc.CurrUser

Call reg.GetUserInfo(user(0), mailserver$, mailfile$, maildomain$, mailsystem%, profile$)
mailDBServ = mailserver$
mailDBName = mailfile$+".nsf"

Set maildb = session.GetDatabase(mailDBServ, mailDBName, False)

Просто создала поле CurrUser, а вот session.CurrentUser не сработало почему-то. Очень жаль, создавать такие вот новые поля не очень удобно. Может есть более изящное решение?
 
N

nor

Для: Idea


Выводи записи от своего агента в log.nsf, опредеденным образом отформатированные. Например, добавь в начало каждой записи имя бд и имя агента.

Код:
04.04.2007 10:03:35  Agent printing: 'WIND@IBM R1.4.2 Template' database generated '$UpdateDepartmentAccess' agent error 183 in line 795: Variant does not contain an object.
 
I

Idea

Для: Idea
Выводи записи от своего агента в log.nsf, опредеденным образом отформатированные. Например, добавь в начало каждой записи имя бд и имя агента.

Я думаю, что проблема в том, что я в принципе вообще не знаю, как что-то можно записать в лог.нсф) а уж тем более отформатированно)
 
K

K-Fire

В теле серверного агента просто используйте MsgBox или Print, и Агентменеджер сам запишет в лог инфу типа:

11.04.2007 16:09:41 AMgr: Agent ('OS Domino Workflow Backgrounder' in 'test.nsf') message box: (unknown constant -MsgText002-)
 
I

Idea

Новая проблема. Вот такой вот агент:
Код:
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim nav As NotesViewNavigator
Dim entry As NotesViewEntry

Dim doc As NotesDocument
Dim cldoc As NotesDocument
Dim uidoc As NotesUIDocument
Dim prid As Variant
Dim stat As Variant

Set session= New NotesSession
Set doc=session.documentcontext
prid= doc.GetItemValue( "ProjectID" )


Set db = session.CurrentDatabase
Set view = db.GetView("ForClose")
Set nav = view.CreateViewNavFromCategory(prid (0))
Set entry = nav.GetFirstDocument

While Not(entry Is Nothing)
Set cldoc = entry.Document
If cldoc.Status(0)<> "2" Then
Exit Sub
End If 
Set entry = nav.GetNextDocument(entry)
Wend

stat = "Close"
doc.PStatus = stat

Суть - поставить статус "Закрыт" проекту в поле комбобокс, если все его подзадачи имеют статус завершенных (это надо проверит естессно).
Вставила обработчик ошибок в вебе - он не срабатывает, по моей версии, потому что до него даже дело не доходит. Браузер выдает: HTTP Web Server: Lotus Notes Exception - Unsupported trigger and search in the background or embedded agent (кнопку жму из дока на редактировании)
Пробовала тестить это же в клиенте. Запускаю агент по кнопке, когда док открыт на редактировании. он пишет Document has not yet been saved.
Если жать кнопку в документе на чтение, все прорабатывается, но никакое поле не меняется.
Где косяк?
 
H

Hedg

И так снова траблы.
Агент отрабатывает только если пользоветль которым он подписан залогинен. Почему?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!