Агенты

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

Hedg

#1
В агентах не силён, так как никогда ещё не пользовался.

Возник вопрос, пользователи имет статус Reader но должны иметь возможность изменить занчения нескольких полей. Что бы не котролировать список полей на доступ и не давать автора пришла в голову идея использовать агент. Соотетственно вопрос, можно ли выполнить агент а режиме просмотра документа или это уже UI (соответственно агент не пашут), если да то как указать агенту изменить текущий документ.
 
F

Fossil Code

#2
Верно, если агент выполняется на сервере, то он может выполняться с правами дизайнера или самого сервера. Агенты работают и в режиме просмотра, и UI, только они изменяют "бэкенд" документа, док. придется пересохранять и обновлять передний план, т.е. UI. Агенту не нужно ничего указывать, его нужно вызвать по кнопке из самого документа, т.е. явно вызывать агента, когда требуется редактирование. Если имелось в виду, "как из агента получить доступ к текущему документу", то есть такая метода в скрипте:
Collecting all documents and all unprocessed documents, см. хелп дизайнера, первый необработанный и есть текущий.
 
H

Hedg

#3
А можно поподробнее про Unprocessed статус документа, а то что-то мои знания английского меня подводят, не могу никак понять я этого в хелпе.
Ещё вопрос если из вью открыт на просмотр документ(любой т.е не первый и не последний) то при создании колекции Unprocessed документов он будет первый???
 
F

Fossil Code

#4
Это способ получить доступ к коллекции документов вида. Если ни один из них не выбран, то единственный документ в коллекции будет текущий, на котором кликнули в виде. Если выбрано несколько, то коллекция их и содержит. Называется так потому, что в основном используется в агентах для получения списка документов, которые следует обработать. Вот пример из хелпа, который выбирает из вида текущий или все выбранные документы и проставляет им статус по условию.

Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
Set item = doc.GetFirstItem( "Approver" )
If item.Contains( session.UserName ) Then
doc.Approved = "Yes"
Call doc.Save( False, True )
End If
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
 

LuMee

Well-known member
02.05.2006
477
0
#5
Тоже есть глупый вопрос по агентам: а как указать агенту, от имени какой учетки он будет работать на сервере?
 
H

Hedg

#6
Для: LuMee
В свойствах агента выставляется, в последней вкладке от имени кого он будет работать.

Для: Fossil Code
А если агент запускается из открытого дока в режиме просмотра?? он будет единственнным в коллекции?
 
30.05.2006
1 345
11
#8
Тоже есть глупый вопрос по агентам: а как указать агенту, от имени какой учетки он будет работать на сервере?
До 6-ки - никак. Фоновый агент работает от имени своего автора.
В 6-ке появилась возможность запускать агент от чужого имени. Но на это надо получить особые права
 

LuMee

Well-known member
02.05.2006
477
0
#9
Для: LuMee
В свойствах агента выставляется, в последней вкладке от имени кого он будет работать.
Забыл в свое время отписаться: не нашел я ничего похожего в свойствах агента. На последней вкладке только всякие ID, редактировать нечего. Кстати, у меня Лотус 5
 
E

Elena Nefedova

#10
Для: Hedg
Почему бы не использовать в нужных формах флаг
"Available to Public Access Users" и сделать описанные в хелпе добавления к формам?
А нужным пользователям просто дать право на редактирование публичных документов.
Примечание: после включения этого флага в св-вах формы надо в ранее созданные документы добавить поле $PublicAccess="1"
 
30.05.2006
1 345
11
#11
Для: Hedg
Почему бы не использовать в нужных формах флаг
"Available to Public Access Users" и сделать описанные в хелпе добавления к формам?
А нужным пользователям просто дать право на редактирование публичных документов.
Гм.. В исходной постановке требовалось обеспечить доступ к некоторым полям, а не всему документу. Если, конечно, я правильно понял автора
 
E

Elena Nefedova

#12
Для: Constantin A Chervonenko
Ну, учитывая, что доступ Reader не предполагает возможности создания собственных форм, что существуют разделы с управляемым доступом, и что не обязательно всем разрешать создание агентов, можно и ограничить доступ к полям документа :lol:
 
30.05.2006
1 345
11
#13
Для: Constantin A Chervonenko
Ну, учитывая, что доступ Reader не предполагает возможности создания собственных форм....
... в ЭТОЙ базе. А в соседних? А SmartIcon? Не.. если действительно речь идет о защите.
 
E

Elena Nefedova

#14
Для: Constantin A Chervonenko
<!--QuoteBegin-Constantin A Chervonenko+12:03:2007, 23:55 -->
<span class="vbquote">(Constantin A Chervonenko @ 12:03:2007, 23:55 )</span><!--QuoteEBegin-->... в ЭТОЙ базе. А в соседних? А SmartIcon? Не.. если действительно речь идет о защите.
[snapback]58826" rel="nofollow" target="_blank[/snapback]​
[/quote]В общем, да - "соседние" базы не обязательно подконтрольны менеджеру текущей.
Опять мы возвращаемся к вашей старой мудрости, что "надо лучше проектировать" :)
Ну, а раз не спроектировали лучше, то обходим препятствия в зависимости от текущих потребностей безопасности :p
 
H
#15
Пытаюсь из QuerySave запустить агента
Код:
.................
If Len(doc.FieldGetText("RunAgent"))=1 Then
Set agent = db.GetAgent("AuthorClear")
Call agent.RunOnServer
End If
И не получается, пишет Notes error: Unsupported trigger and search in thr background or embedded agent
 
H
#16
Решил пока проблему используя шедулер, но там минимальное время срабатывания 5 минут, никак нельзя сделать меньше???
 

morpheus

скриптописец
07.08.2006
3 915
1
#18
Можно, в администраторе в документе сервера, закладка Notes.ini Settings
поиграйтесь с AMGR_ xxxx так точно не помню какой параметр, там подсказки есть, помню шо по дефолту - 30 минут
 
H
#19
Для: Medevic
А как тогда он работаь будет??? Какие условия его срабатывания???
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#20
<!--QuoteBegin-Hedg+19:03:2007, 17:07 -->
<span class="vbquote">(Hedg @ 19:03:2007, 17:07 )</span><!--QuoteEBegin-->А как тогда он работаь будет??? Какие условия его срабатывания???
[snapback]59479" rel="nofollow" target="_blank[/snapback]​
[/quote]
Шедульный агент. Время срабатывания - never. Цель - все документы.
Запускаешь методом RunOnServer. В параметрах указываешь NoteID текущего документа.
В агенте получаешь этот документ методом: notesDatabase.GetDocumentByID(notesAgent.ParameterDocID)

И обрабатываешь его.