• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы DNT
  • Дата начала
D

DNT

Дайте совет плиз...

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

...
'выбираем все доки в отложенных
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

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

DNT

<!--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

А 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.
 
D

DNT

<!--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
 
D

DNT

<!--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]

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

fedotxxl

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")
 
D

DNT

2 fedotxxl

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

Domino6

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


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

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

DNT

<!--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


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

DNT

<!--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

<!--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
 
Мы в соцсетях:

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