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

Тема в разделе "Lotus - Программирование", создана пользователем ozzyzello, 1 фев 2011.

  1. ozzyzello

    ozzyzello Гость

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

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

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ozzyzello а как он ищет их, кем подписан агент?
    имеет ли доступ к док-там сервер и/или тот, кем подписан агент?
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Агент выдаёт какую-нибудь ошибку? Посмотрите в логах. Может в нём есть обращение к уи-свойствам/методам и он не отрабатывает.
    Возможны проблемы в правах доступа к документам. Проверьте, от чьего имени агент запускается, кем подписан.
     
  4. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Код (LotusScript):
        Set collection = db.UnprocessedDocuments
    Вот эти документы не находит?
     
  5. ozzyzello

    ozzyzello Гость

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

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

    Добавлено:
    Агент не выдает ошибок, обращений к UI свойствам нет... target стоит по всем документам в базе... полнотектовый индекс по базе создан
     
  6. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    это что?
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    xalet по идее, это тоже поле... фт-синтаксис такое допускает, не обязательно field писать.


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

    ozzyzello Гость


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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    При принудительном запуске агент запускается на клиенте от имени текущего пользователя. По расписанию агент запускается на сервере от имени Run on behalf of с учётом прав подписавшего агент.
    Для отладки создайте агент, пускающий отлаживаемый на сервере типа:

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

    ozzyzello Гость


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

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

    nvyush Lotus team
    Lotus team

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

    ozzyzello Гость


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

    Все дело в том, что поле(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) приводить к виду, как прописано в поле и сравнивать... вот тогда пропала ошибка, все исправилось...
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    поля с датами не преобразуйте в текст - можете собрать кучу грабель
    особливо с таймзонами
     
  14. ozzyzello

    ozzyzello Гость


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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    пока... работает
    искать можно и по датам
     
  16. Partizanka

    Partizanka Гость

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Partizanka
    Используйте поля типа дата. При формировании ключа поиска используйте NotesDateTime.
     
  18. ozzyzello

    ozzyzello Гость

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

Поделиться этой страницей