Отображение задачи в календаре

  • Автор темы oleg7
  • Дата начала
O

oleg7

скажите пожалуйста, как посмотреть в дебагере агент, если его выполнение не отображается?
 
N

nvyush

скажите пожалуйста, как посмотреть в дебагере агент, если его выполнение не отображается?
Сорри за ввод в заблуждение, правильнее так:
mailfile = Evaluate({@NameLookup([Exhaustive];} + adr + {;"MailFile")})
Set mailDB = s.GetDatabase(db.Server, mailfile(0))

Для отладки агента советую жёстко прописать в нём NoteID тестового документа и запускать его из меню. В тестовом документе в качестве адресата прописать себя, чтоб был доступ к почтовой базе. В тексте агента добавить msgbox'ы или print'ы с контролируемыми переменными.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
Включить отладчик и запустить его по кнопке, но локально.
Или/и поставить обработчик ошибок.
 
H

hosm

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

Не знаю, насколько это понятно для Вас написано, если что, пусть кто-то еще пояснит.
Разве что не уверена, будет ли в таком случае доступ к почтовым БД пользователей, лучше тогда проверять на своей или тестовых, к которым доступ имеете...
 
O

oleg7

спасибо вам всем за советы, но я уже с эти агентом окончательно запутался :newconfus:
 
H

hosm

выкладывай, что вышло, посмотрим.
базу получить удалось или нет?
 
O

oleg7

OKEN
У меня уже вообще почти все то закоментено, то удалено...
из того что осталось:
в форме на Postsave:
Код:
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim agent As NotesAgent
Set agent = db.GetAgent("Test")
'	agent.RunOnServer(Source.Document.NoteId)

агент Test:
Код:
Dim s As New NotesSession
Dim agent As NotesAgent
Set agent = s.CurrentAgent
Dim NoteId As String
NoteId = agent.ParameterDocID
Dim db As NotesDatabase
Set db = s.CurrentDatabase
Dim doc As NotesDocument
'	NoteId="90E"
Set doc = db.GetDocumentByID(NoteId) 
Forall adr In doc.GetItemValue("EnterOwner") 'перебираем адресатов, кому назначена задача
mailfile = Evaluate({@NameLookup([Exhaustive];} + adr + {;"MailFile")}) 	
Set mailDB = s.GetDatabase(db.Server, mailfile(0))


'Set collection = mailfile.Search({(DocUNID="} & doc.UniversalId & {")}, Nothing, 0)
End Forall
 
A

amigolinx

Set collection = mailfile.Search({(DocUNID="} & doc.UniversalId & {")}, Nothing, 0)
эта строка проклинит как минимум потому что:
1) collection не задекларена до использования (Dim collection As NotesDocumentCollection)
2) метод Search следует вызывать не у переменной mailfile, а у mailDB
 
N

nvyush

oleg7
Думаю, нужно:
1) раскомментировать NoteId="90E"
2) проверить, чтобы в поле EnterOwner документа с NoteId="90E" было только собственное имя
3) добавить перед концом цикла msgbox "IsOpen" = + cstr(mailDB.IsOpen)
4) запустить агента из меню
Если получим сообщение "IsOpen = True", можно копать дальше
 
H

hosm

nvy, имхо, следует между 2 и 3
2.1) проверить, что mailfile(0) <> "", т.е. у человека есть почтовый файл?
mailfile = Evaluate({@NameLookup([Exhaustive]; "} + adr + {";"MailFile")}) ' кавычки?!!!

if mailfile(0) <> "" then
Set mailDB = s.GetDatabase(db.Server, mailfile(0))
и т.д.
end if


amigolinx прав:
и добавьте в агенте Option declare в раздел (Options)
и описания
Dim mailDB As Notesdatabase
Dim mailfile as variant
Dim collection As NotesDocumentCollection

<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">
кстати, ребят: может проще сделать сразу получение почты для всех?
mailfile = Evaluate({@NameLookup([Exhaustive]; EnterOwner ;"MailFile")}, doc)



Добавлено: тут внимательней:
3) добавить перед концом цикла msgbox "IsOpen=" + cstr(mailDB.IsOpen)
 
O

oleg7

у меня в Forall adr In doc.GetItemValue("EnterOwner") выдает Object variable not set, до этого не было, появилась после того как открыл строку NoteId="90E"
 
N

nvyush

OKEN
' кавычки?!!! - не понял, это о чём?
<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">
кстати, ребят: может проще сделать сразу получение почты для всех?
Согласен, кучерявей будет:
Код:
mailfile = Evaluate({@NameLookup([Exhaustive]; EnterOwner;"MailFile")}, doc)	 
Forall mailfilename in mailfile
...



Добавлено:
у меня в Forall adr In doc.GetItemValue("EnterOwner") выдает Object variable not set, до этого не было, появилась после того как открыл строку NoteId="90E"
Видимо NoteId неправильный, посмотрите в свойствах документа на последней закладке что написано после NT
 
H

hosm

а документ такой с NoteId="90E" есть сейчас вообще в текущей БД и доступен Вам?
подчеркнула:
mailfile = Evaluate({@NameLookup([Exhaustive]; "} + adr + {";"MailFile")}) ' кавычки?!!!

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

P.S. nvy, сорри, не увидела Ваш ответ внутри спойлера - он заглючил у меня :newconfus:
 
R

RAJ

а документ такой с NoteId="90E" есть сейчас вообще в текущей БД и доступен Вам?
подчеркнула:
mailfile = Evaluate({@NameLookup([Exhaustive]; "} + adr + {";"MailFile")}) ' кавычки?!!!

вопрос - не к Вам (как топикстартеру), а к тому, кто предложил решение, просто по справке можно получить вроде почтовую БД сразу для всех, т.е. подсунуть список имен. Я не экспериментировала с этим, поэтому просто вынесла вопрос-предложение (тогда надо будет код поправить)

из хелпа:
Return value
valuelist
Text list. When other flags besides [Exhaustive] have been specified, @NameLookup returns a list of single values for each specified user.

т.е. ваше решение замечательно будет работать
 
O

oleg7

так от ошибки избавился. Теперь такая ситуация:
в adr- только один пользователь, тот кто указан в поле Owner (т.е. я)
mailfile - моя почта
IsOpen - false
 
H

hosm

"mailfile - моя почта": т.е. путь к почтовой БД относительно каталога data сервера корректный (ну, т.е. mailfile(0))
и почта на том же сервере, что и БД?
 
O

oleg7

да на одном сервере, почтовый ящик в папке mail
mailfile - ["mail\test"] - в дебагере
mailfile(0) - "mail\test"
 
H

hosm

а расширения у него нет, что ли? %)
т.е. почтовый файл называется не "test.nsf"?
 
O

oleg7

у mailfile нет nsf, а вот если в дебагере смотреть параметры mailBD, то в filename - "test.nsf", а filepath - "mail\test.nsf"
 
H

hosm

ну, по идее правильно всё. странно, конечно: IsOpen = false if the database cannot be opened.
можно попробовать, конечно
if not mailDB.IsOpen then mailDB.Open( "", "" )
но вряд ли поможет.
mailDB или mailBD проверьте, как имя правильно написано.
и права доступа к почтовой базе test того, кем агент запускается?
 
Мы в соцсетях:

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