Планирование задач Sitecore с исключением периода времени

У меня есть несколько запланированных задач, настроенных в Sitecore. Некоторые бегут каждые 15 минут, другие каждые несколько часов.

Пример конфигурации:

  <sitecore>
    <scheduling>
      <agent type="Acme.Tasks.SitemapProducts, AcmeSitecore" method="Run" interval="00:15:00" site="website">
        <param desc="filename">~/products.xml</param>
        <param desc="Site">website</param>
        <param desc="HasVariants">false</param>
      </agent>
    </scheduling>
  </sitecore>

Это запускает задачу, которая создает файл xml каждые 15 минут и работает нормально. Однако теперь я хочу, чтобы эта задача не выполнялась в определенные дни в определенные дни. Есть ли способ добавить это через конфиг?

1 ответ

Решение

Нет. Нет способа сделать это только через конфиг.

Что вы можете сделать, так это передать дополнительные параметры запланированной задаче и установить время начала и окончания. А затем в коде запланированного задания просто проверьте, находится ли текущее время между временем начала и окончания.

Задание будет выполнено, но оно не будет генерировать новый xml.

<sitecore>
    <scheduling>
      <agent type="Acme.Tasks.SitemapProducts, AcmeSitecore" method="Run" interval="00:15:00" site="website">
        <param desc="filename">~/products.xml</param>
        <param desc="Site">website</param>
        <param desc="HasVariants">false</param>
        <StartTime>08:00</StartTime>
        <Endtime>21:00</Endtime>
      </agent>
    </scheduling>
</sitecore>

Код должен быть примерно таким (не проверенным):

public class SitemapProducts
{
    public string StartTime { get; set; }
    public string EndTime { get; set; }

    public void Run()
    {
      if (!string.IsNullOrEmpty(StartTime) && DateTime.Now.ToString("HH:mm") < StartTime)
      {
          return;
      }
      if (!string.IsNullOrEmpty(EndTime) && DateTime.Now.ToString("HH:mm") > EndTime)
      {
          return;
      }
    }
Другие вопросы по тегам