Agent.cs:
using System; using Bitrix.DataLayer; using Bitrix.DataTypes; using Bitrix.IBlock; using Bitrix.Services; namespace Bitrix.Demo
{ public class AggregatorRssDownloadExecutor : IBXAgentExecutor
{ public bool Execute(BXSchedulerAgent agent, BXParamsBag<object> parameters) { object param; BXIBlockElement element; if (parameters == null || !parameters.TryGetValue("ElementId", out param) || (element = BXIBlockElement.GetById(param)) == null) { //Удаляем агент если элемента-подписки не существует agent.Delete(); return false; } RssFeedSettings settings = Aggregator.GetSettings(element); if (!element.Active || settings == null) { //если элемент неактивный - агент тоже неактивный agent.Active = false; return true; } try { Aggregator.LoadRssItems(settings); //выставляем период, заданный в настройках подписки agent.Period = TimeSpan.FromHours(settings.AgentPeriod); } catch (Exception ex) { BXLogService.LogAll(ex, BXLogMessageType.Error, String.Format("Aggregator. Ошибка загрузки RSS. (ID={0})", element.Id)); //увеличиваем период запуска agent.Period = agent.Period.Add(new TimeSpan(1,0,0)); } return true; } } public class AggregatorRemoveItemsInSection : IBXAgentExecutor
{ public bool Execute(BXSchedulerAgent agent, BXParamsBag<object> parameters) { object param; BXIBlockSection section; if (parameters == null || !parameters.TryGetValue("SectionId", out param) || (section = BXIBlockSection.GetById(param)) == null || section.CustomPublicValues.GetInt32("STORAGE_TIME", 0) <= 0) { agent.Delete(); return false; } int maxElements = 30; if (parameters.ContainsKey("MaxElements") && parameters["MaxElements"] is int) maxElements = (int)parameters["MaxElements"]; int days = section.CustomPublicValues.GetInt32("STORAGE_TIME", 30); BXIBlockElementCollection elements = BXIBlockElement.GetList( new BXFilter( new BXFilterItem(BXIBlockElement.Fields.CreateDate, BXSqlFilterOperators.LessOrEqual, DateTime.Now.AddDays(-(days + 1))), //+1 день - погрешность запусков агентов по загрузке и удалению записей. new BXFilterItem(BXIBlockElement.Fields.Sections.Section.ID, BXSqlFilterOperators.Equal, section.Id) ), null, new BXSelectAdd(BXIBlockElement.Fields.Sections.Section.ID), new BXQueryParams(new BXPagingOptions(0, maxElements)) ); foreach (BXIBlockElement element in elements) { //Если привязка к одной секции if (element.Sections.Count <= 1) { if (element.ActiveFromDate == DateTime.MinValue) { //деактивируем, если запись без даты element.Active = false; element.Save(); } else { //удаляем element.Delete(); } } else { //иначе отвязываем элемент от секции foreach (var link in element.Sections) { if (link.SectionId == section.Id) { element.Sections.Remove(link); element.Save(); break; } } } } return true; } } public class AggregatorRemoveInactiveIBlockItems : IBXAgentExecutor
{ public bool Execute(BXSchedulerAgent agent, BXParamsBag<object> parameters) { object param; BXIBlock iblock; if (parameters == null || !parameters.TryGetValue("IBlockId", out param) || (iblock = BXIBlock.GetById(param)) == null) { agent.Delete(); return false; } int maxElements = 30; if (parameters.ContainsKey("MaxElements") && parameters["MaxElements"] is int) maxElements = (int)parameters["MaxElements"]; BXIBlockElementCollection elements = BXIBlockElement.GetList( new BXFilter( new BXFilterItem(BXIBlockElement.Fields.ActiveDate, BXSqlFilterOperators.Equal, false), new BXFilterItem(BXIBlockElement.Fields.IBlock.ID, BXSqlFilterOperators.Equal, iblock.Id) ), null, null, new BXQueryParams(new BXPagingOptions(0, maxElements)) ); foreach (BXIBlockElement element in elements) element.Delete(); return true; } } }
Страница
3 - 3 из 6
Начало
|
Пред.
|
1
2
3
4
5
|
След. |
Конец