none
Ежегодный (Yearly) Timer Job RRS feed

  • Вопрос

  • Доброго времени суток!

    Потребовалось создать свой Timer Job, который должен запускаться раз в год. С созданием и развертыванием проблем нет, для указания расписания использовал SPYearlySchedule.

    Проблема в том, что когда Timer Job уже развернут в его свойствах нельзя(!) выбрать ежегодный (Yearly) режим запуска. Там просто нет такого пункта (!). И при этом расписание Job'а сбрасывается на почасовое (hourly).

    И, собственно, вопрос: что за баг, и как с ним бороться?

    Пока придумал только, что при каждом запуске заного устанавливать ему ежегодный запуск. Но это при запуске. А если пользователь зайдет и просто решит посмотреть свойста, то планировщик слетит. Можно, конечно, в таких случах фичу перективировать, чтобы она удалила и заного создала Timer Job. Но это придется прописывать в документации, и не факт, что ее кто-нибуть прочитает.

    Или же прямиком MS "пинать" по этому поводу?

    1 февраля 2012 г. 5:28

Ответы

  • Остановился на таком решении.

    Переопределяем методы Update() в классе Timer Job'а, и там указываем требуемый ежегодный запуск. В итого получаем, что и в ручную можно запустить, и сам job будет ещегодно отрабатывать в указанный день, и не требуется дополнительных списком/скриптов. Последнее упрощает доставку клиенту.

    Минус такого решения только один - нельзя сменить расписание запуска на другое, отличное от ежегодного.

    2 февраля 2012 г. 6:25

Все ответы

  • Можно, как обходной вариант, создать скрытый список и там хранить дату последнего запуска (или в базе это можно хранить). Сам Timer Job сделать monthly. При запуске каждый месяц сверяться с датой в списке и если год не прошел, то ничего не делать.

    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts
    1 февраля 2012 г. 6:35
    Отвечающий
  • Тоже вариант, но тогда ручной пуск будет затруднителен. А это иногда требуется. 
    1 февраля 2012 г. 8:56
  • Перед ручным запуском чистить лист/базу, только так. Раз уж OOTB возможностей нет для запуска раз в год, то придется, к сожалению, изворачиваться. Кстати в Windows Task Scheduler, так же нет возможности запуска раз в год, видимо это считается экзотикой :-)

    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts

    1 февраля 2012 г. 9:13
    Отвечающий
  • А чем он собственно будет затруднён. 

    Можно добавить в скрытый список дополнительный параметр, который если будет true, то job выполнится не проверяя даты. 

    1 февраля 2012 г. 9:18
  • В том, что нужно будет вносить данные в скрытый список. Следовательно, нужен будет скрипт, который это будут делать. И документация для клиента, как запустить джобу вручную. Переактивацию фичи в данном случае будет проще описать.
    1 февраля 2012 г. 10:29
  • Тут, конечно, как клиенту удобнее. Можно сделать простенький power shell скрипт, который ставит параметр/чистит лист/чистит базу.

    Можете например создать второй TimerJob(он будет отвечать за ручной запуск), который будет всегда Disable, но если нужно будет нужен ручной запуск, то активируете его и он запускает работу, не глядя уже ни на какие значения, потом снова его делаете Disable.

    Вариантов масса.


    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts
    1 февраля 2012 г. 10:44
    Отвечающий
  • Все спасибо, кто ответил.

    В общем, как обычно, масса костылей - один круче другого. Ок, тему можно закрыть.

    И напоследок риторический вопрос: кого бы в МС пнуть, чтобы это поправили. Баг же очевидный.

    • Предложено в качестве ответа Dmitry KaloshinEditor 2 февраля 2012 г. 6:32
    • Отменено предложение в качестве ответа Dmitry KaloshinEditor 2 февраля 2012 г. 6:32
    2 февраля 2012 г. 1:05
  • Остановился на таком решении.

    Переопределяем методы Update() в классе Timer Job'а, и там указываем требуемый ежегодный запуск. В итого получаем, что и в ручную можно запустить, и сам job будет ещегодно отрабатывать в указанный день, и не требуется дополнительных списком/скриптов. Последнее упрощает доставку клиенту.

    Минус такого решения только один - нельзя сменить расписание запуска на другое, отличное от ежегодного.

    2 февраля 2012 г. 6:25
  • И напоследок риторический вопрос: кого бы в МС пнуть, чтобы это поправили. Баг же очевидный.
    Вы можете, во первых, аналогичный вопрос задать на англоязычном SharePoint форуме (там среди участников/модераторов много сотрудников Microsoft и MVP знатоков), а, во-вторых, отправьте ваш вопрос сюда Do you have a question? Contact Microsoft

    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts
    2 февраля 2012 г. 6:37
    Отвечающий
  • Спасибо, попробую.
    2 февраля 2012 г. 6:52
  • Александр, если станете обладателем знаний о там как данную задачу решить лучше или когда ждать исправлений, поделитесь, пожалуйста, в этой ветке с сообществом.

    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts
    2 февраля 2012 г. 7:31
    Отвечающий
  • Дмитрий,

    обязательно. Спасибо за участие.

    2 февраля 2012 г. 8:21
  • Нет возможности проверить свое предложение.

    Вы пробовали сделать так? Создатть политики на эти итемсы? И по их изменению от политик раз в год запускать определенный воркфлоу?

    Андрей


    AOsinniy
    5 февраля 2012 г. 4:43
  • Antenor3000,

    не совсем понял ваше предложение, но судя по описанию, это уже совсем через заднюю дверь получается (политики, воркфлоу).

    5 февраля 2012 г. 7:02
  • http://avishnyakov.wordpress.com/2011/10/19/sharepoint-no-code-solutions-2-%d0%b6%d0%b8%d0%b2%d1%8b%d1%85-%d1%81%d1%86%d0%b5%d0%bd%d0%b0%d1%80%d0%b8%d1%8f-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f/

     

    Это ссылка на описание использования политик. Ну а воркфлоу, я имел ввиду рабочий процесс.

    Ну в общем, если бы стояла задача модифицировать элементы раз в год, я бы искал решение по этому пути.

     

     


    AOsinniy
    5 февраля 2012 г. 13:07