Документы не находятся агентом по расписанию

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

ozzyzello

#1
Приветствую всех.

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

Не могу понять в чем причина, у кого-нибудь есть варианты? Готов рассмотреть все возможные, буду очень признателен!!!
 

hosm

* so what *
18.05.2009
2 442
6
#2
ozzyzello а как он ищет их, кем подписан агент?
имеет ли доступ к док-там сервер и/или тот, кем подписан агент?
 

nvyush

Lotus team
22.04.2009
2 317
0
#3
Агент выдаёт какую-нибудь ошибку? Посмотрите в логах. Может в нём есть обращение к уи-свойствам/методам и он не отрабатывает.
Возможны проблемы в правах доступа к документам. Проверьте, от чьего имени агент запускается, кем подписан.
 

Xalet

Well-known member
08.08.2008
410
0
#4
Код:
	Set collection = db.UnprocessedDocuments
Вот эти документы не находит?
 
O

ozzyzello

#5
ozzyzello а как он ищет их, кем подписан агент?
имеет ли доступ к док-там сервер и/или тот, кем подписан агент?
Ищет по вьюхе, используя полнотекстовый поиск... примерно таким образом:
Call kart_view.Ftsearch({field Resp_Parents contains "9238181DCDF90F77C3526EE000341B10" & [User_Site]="Екатеринбург"}, 0)
Далее перебираю документы из вьюхи...

Агент подписан юзером, у которого есть права на запуск агентов на сервере, доступ на базе стоит Editor, документы видны для этого юзера

Добавлено:
Агент выдаёт какую-нибудь ошибку? Посмотрите в логах. Может в нём есть обращение к уи-свойствам/методам и он не отрабатывает.
Возможны проблемы в правах доступа к документам. Проверьте, от чьего имени агент запускается, кем подписан.
Агент не выдает ошибок, обращений к UI свойствам нет... target стоит по всем документам в базе... полнотектовый индекс по базе создан
 

hosm

* so what *
18.05.2009
2 442
6
#7
xalet по идее, это тоже поле... фт-синтаксис такое допускает, не обязательно field писать.


Добавлено: мб, вместо "&" использовать "and"? есть случаи, когда "&" не работает.
 
O

ozzyzello

#8
xalet по идее, это тоже поле... фт-синтаксис такое допускает, не обязательно field писать.


Добавлено: мб, вместо "&" использовать "and"? есть случаи, когда "&" не работает.

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

nvyush

Lotus team
22.04.2009
2 317
0
#9
при принудительном щзапуске все работает.... документы ищутся нормально, а вот по шедулеру такого не поисходит
При принудительном запуске агент запускается на клиенте от имени текущего пользователя. По расписанию агент запускается на сервере от имени Run on behalf of с учётом прав подписавшего агент.
Для отладки создайте агент, пускающий отлаживаемый на сервере типа:

Dim session As New NotesSession
Call session.CurrentDatabase.GetAgent("Имя_шедульного_агента").RunOnServer()
 
O

ozzyzello

#10
При принудительном запуске агент запускается на клиенте от имени текущего пользователя. По расписанию агент запускается на сервере от имени Run on behalf of с учётом прав подписавшего агент.
Для отладки создайте агент, пускающий отлаживаемый на сервере типа:

Dim session As New NotesSession
Call session.CurrentDatabase.GetAgent("Имя_шедульного_агента").RunOnServer()

Я создал подобного рода агент, запускаю шедулерный... а я не должен попадать в дебагере из агента в шедулерный и бежать по коду? :) По сути я просто прохожу через строку запуска агента, не попадая в код шедулерного...

А если явно прописать в агенте Run on behalf of определенное имя? Получается что агент запуститься от прописанного имени?
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Я создал подобного рода агент, запускаю шедулерный... а я не должен попадать в дебагере из агента в шедулерный и бежать по коду?
Нет. Либо используйте удалённую отладку (см. в справке "Using the Remote Debugger"), либо принтуйте в лог нужную информацию (не забудьте потом убрать Print'ы, чтоб не нервировать админа).
А если явно прописать в агенте Run on behalf of определенное имя? Получается что агент запуститься от прописанного имени?
Нужны соответствующие права, см. в справке "Setting up agent security using the Security tab", "Security for agents on servers and the Web"
 
O

ozzyzello

#12
Нет. Либо используйте удалённую отладку (см. в справке "Using the Remote Debugger"), либо принтуйте в лог нужную информацию (не забудьте потом убрать Print'ы, чтоб не нервировать админа).
Нужны соответствующие права, см. в справке "Setting up agent security using the Security tab", "Security for agents on servers and the Web"

Всем спасибо за ответы. Очень благодарен!!!

Все дело в том, что поле(Birthday), которое пытался обработать было заполнено текстом типа 03.02.2011 и если при запуске принудительно скрипта из дизайнера проходила строка:
if datenumber(year(doc.getitemvalue(Today),month(doc.getitemvalue("Birthday")(0)),day(doc.getitemvalue("Birthday")(0)))=today, так как скрипт запускался от меня, то при запуске от сервера по шедулеру такая строка терпела ошибку и пришлось значение today(на сервере в виде 03/02/11) приводить к виду, как прописано в поле и сравнивать... вот тогда пропала ошибка, все исправилось...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 572
265
#13
поля с датами не преобразуйте в текст - можете собрать кучу грабель
особливо с таймзонами
 
O

ozzyzello

#14
поля с датами не преобразуйте в текст - можете собрать кучу грабель
особливо с таймзонами

Поле добавлено искусственно, его нет на форме... задача - реализовать поздравление с днем рождения сотрудников ;) Другого способа решения не придумал - работает, будут проблемы, будем искать решение :)
 
P

Partizanka

#16
Можно мне вклиниться с вопросом. Вопрос по сути на ту же тему.
Есть база, в которую заносят некие документы, мне нужно осуществлять проверку на уникальность документов по нескольким полям, одно из которых "дата", столкнулась с той же проблемой: на сервере и клиенте разные форматы дат, не придумала ничего лучше как в колонке представления, по которому ищутся документы с теми же реквизитами, записывать @Text(@Day(DateK)) + @Text(@Month(DateK)) + @Text(@Year(DateK)), а при сохранении документа формировать ключ поиска как Ctr(Day(DateK)) + Ctr(Month(DateK)) + Ctr(Year(DateK)).... Интуитивно понимаю, что это неправильно, но больше ничего не придумалось.... Пните, пожалуйста, в нужном направлении ;)))
 

nvyush

Lotus team
22.04.2009
2 317
0
#17
Partizanka
Используйте поля типа дата. При формировании ключа поиска используйте NotesDateTime.
 
O

ozzyzello

#18
пока... работает
искать можно и по датам
Да да, работает и будет продолжать работать... :) Удобнее работать с датами - это факт, но необходимо было сделать так, чтобы не менять дизайна формы... поэтому сделали так...