Планирование задач 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;
}
}