Имам редица планирани задачи, зададени в 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минути и работи добре. Но сега искам да спра да се изпълнява тази задача между определени времена в определени дни. Има ли някакъв начин да добавя това чрез config?
Отговори:
4 за отговор № 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;
}
}