Вопросик по агенту

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#1
Дайте совет плиз...

Есть агент, первая его функция - изменить поля в коллекции документов:

...
'выбираем все доки в отложенных
search = "(Form='MainForm') & (Faza = '3') & (@Date(MDateNext) = @Date(@Now))"
Set col = db.Search(search, Nothing, 0)
For i =1 To col.Count
Set doc = col.GetNthDocument(i)
doc.faza="1"
doc.status = "0"
doc.exec = "0"
doc.MDateNext = ""
Call doc.save(False,False)
Next
...

Вторая часть - отправить сообщение пользователю:
...
'Отправляем уведомление инициатору проекта
Set memo=New NotesDocument (db)
memo.Form="Memo"
...
Call memo.Send(False)
...

Так вот, этот агент у меня есть в базе в двух вариантах запуска - из меню и по расписанию. Из меню всё замечатьно - поля меняет письма рассылает. По расписанию не работает - запускается (вижу в логе), поля не меняет, сообщение присылает. Что может быть?????
 
G

Guest

#2
Может быть ты использовал один из UI-классов?
Они в агентах по рассписанию не работают.
 

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#3
<!--QuoteBegin-Юлия+28:03:2006, 13:48 -->
<span class="vbquote">(Юлия @ 28:03:2006, 13:48 )</span><!--QuoteEBegin-->Может быть ты использовал один из UI-классов?
Они в агентах по рассписанию не работают.
[snapback]32640" rel="nofollow" target="_blank[/snapback]​
[/quote]

Нет UI классы не использовал, доки получал поиском и перебором по коллекции документов:

...
search = "(Form='MainForm') & (Faza = '3') & (@Date(MDateNext) = @Date(@Now))"
Set col = db.Search(search, Nothing, 0)
For i =1 To col.Count
Set doc = col.GetNthDocument(i)
...

А что есть ограничения на лотус скрипт при написании агентов???? Если да то где о них написано???? В хелпе вроде нет ничего...
 
G

Guest

#4
А db как определял?

В UI-классах написано.
Из хелпа:
You cannot use the UI classes in a background agent, an agent called through an API, or an agent called by the NotesAgent Run method. Only workstation users can run scripts that access UI objects.
 

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#5
<!--QuoteBegin-Юлия+28:03:2006, 14:22 -->
<span class="vbquote">(Юлия @ 28:03:2006, 14:22 )</span><!--QuoteEBegin-->А db как определял?

В UI-классах написано.
Из хелпа:
[snapback]32645" rel="nofollow" target="_blank[/snapback]​
[/quote]


Dim Session As New NotesSession
Dim DB As NotesDatabase
Dim View As NotesView
Dim Doc As NotesDocument
Dim SetupDoc As notesdocument
Dim Num As Variant
Dim DC As NotesDocumentCollection

Set DB = Session.CurrentDatabase
 

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#7
<!--QuoteBegin-Юлия+28:03:2006, 14:49 -->
<span class="vbquote">(Юлия @ 28:03:2006, 14:49 )</span><!--QuoteEBegin-->Попробуй Save(True, True)
[snapback]32649" rel="nofollow" target="_blank[/snapback]​
[/quote]

Попробую конечно. Спасибо.
 

fedotxxl

Well-known member
09.11.2005
614
0
#8
search = "(Form='MainForm') & (Faza = '3') & (@Date(MDateNext) = @Date(@Now))"
Set col = db.Search(search, Nothing, 0)
For i =1 To col.Count
Set doc = col.GetNthDocument(i)
doc.faza="1"
doc.status = "0"
doc.exec = "0"
doc.MDateNext = ""
Call doc.save(False,False)
Next
Гм.... по теме я ничего сказать не могу, но что за странный код?... Насчет мотода db.Search я впервые узнал.... По-моему, если можно, то лучше брать документы из представления.
For i =1 To col.Count
Set doc = col.GetNthDocument(i)
Такой конструкцией опять же никогда не пользовался
Set currentDoc = docColl.GetFirstDocument
Do While Not currentDoc is nothing
Set currentDoc = docColl.getNextDocument(currentDoc)
Loop
Опять первый раз вижу).
currentDoc.ReplaceItemValue("faza","1")
 

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#9
2 fedotxxl

Что сказать.... Если вручную запускаю - все ОК.
 
D

Domino6

#10
Для: fedotxxl учи матчасть


Для: DNT попробуй убрать @now

Посмотри что в логе агента (Стань на агента в дизайнере в меню Агент\Журнал)
 

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#11
<!--QuoteBegin-Domino6+29:03:2006, 16:05 -->
<span class="vbquote">(Domino6 @ 29:03:2006, 16:05 )</span><!--QuoteEBegin-->Для: fedotxxl учи матчасть
Для: DNT попробуй убрать @now

Посмотри что в логе агента (Стань на агента в дизайнере в меню Агент\Журнал)
[snapback]32738" rel="nofollow" target="_blank[/snapback]​
[/quote]

Вобщем вот что удалось выяснить:

если я становлюсь на агента в дизайнере в меню Агент\Журнал - там запись что он стартанул, потом запустился скрипт, потом агент завершил работу. Информации не много. Я пошел дальше - посмотрел в базе log.nsf :

29.03.2006 01:00:40 AMgr: Agent ('DefCheck' in 'Имя базы.nsf') error message: Error creating product object


Чё бы это могло значить?
 

DNT

Постоялец форума
Lotus team
12.10.2005
590
2
#13
<!--QuoteBegin-Domino6+30:03:2006, 09:00 -->
<span class="vbquote">(Domino6 @ 30:03:2006, 09:00 )</span><!--QuoteEBegin-->Для: DNT
Дай полный код
[snapback]32758" rel="nofollow" target="_blank[/snapback]​
[/quote]

Sub Initialize
Dim Session As New NotesSession
Dim DB As NotesDatabase
Dim View As NotesView
Dim Doc As NotesDocument
Dim SetupDoc As notesdocument
Dim Num As Variant
Dim DC As NotesDocumentCollection
Set DB = Session.CurrentDatabase
Print "### Started DefferredCheck Agent (" + Cstr(Time) +") ###"
'определяем документ настроек
Set view = db.GetView( "wSetup" )
If view.TopLevelEntryCount=0 Then
Messagebox "Нет документа настройки!", 48,"Свяжитесь с администратором!"
End
End If
If view.TopLevelEntryCount>0 Then
Set setupdoc = view.GetLastDocument
End If

'выбираем все доки в отложенных
search = "(Form='MainForm') & (Faza = '3') & (@Date(MDateNext) = @Date(@Now))"
Set col = db.Search(search, Nothing, 0)
For i =1 To col.Count
Set doc = col.GetNthDocument(i)
doc.faza="1"
doc.status = "0"
doc.exec = "0"
doc.MDateNext = ""
Call doc.save(True,True)
Next
setupdoc.MoveToFaza1 = col.count 'запоминаем кол-во переданных доков
Call setupdoc.save(False,False)
'определяем вью
Set view = db.GetView( "wAutorization" )
'Отправляем уведомление инициатору проекта
Set memo=New NotesDocument (db)
memo.Form="Memo"
memo.Subject = "База данных 'Документы [Фин. отдел]' " & " Запрос на авторизацию документов..."
memo.SendTo = SetupDoc.sAutName(0)
Set rtitem = New NotesRichTextItem (memo,"Body")
If rtitem.type=RICHTEXT Then
Call rtitem.AddNewLine(1)
Call rtitem.Appendtext( "Наступил день авторизации документов находившися в 'отложенных'. Они перемещены и ждут авторизации." )
Call rtitem.AddNewLine(1)
Call rtitem.Appendtext("Требуется Ваша авторизация.")
Call rtitem.AddNewLine(2)
Call rtitem.Appendtext("Чтобы открыть БД для авторизации щелкните мышью по ссылке на иконке --->>> ")
Call rtitem.AppendDocLink(view,"Не авторизованные документы")
Call rtitem.AddNewLine(1)
End If
Call memo.Send(False)
Print "### Stoped DefferredCheck Agent (" + Cstr(Time) +") ###"
End Sub
 
D

Domino6

#14
<!--QuoteBegin-DNT+30:03:2006, 09:06 -->
<span class="vbquote">(DNT @ 30:03:2006, 09:06 )</span><!--QuoteEBegin-->Dim DC As NotesDocumentCollection
[snapback]32759" rel="nofollow" target="_blank[/snapback]​
[/quote]

Замени на
Dim col As NotesDocumentCollection