c# - job - quartz asp net
Quartz.NET, Recur cada x semanas (4)
Necesito implementar el siguiente escenario usando Quartz.NET:
Recurrir cada n semana (s) en:
Domingo y / o lunes, martes, miércoles, jueves, viernes, sábado ...
Entonces, por ejemplo, podría seleccionar: lunes y jueves, y repetir cada 2 semanas, ¿es esto posible?
Me doy cuenta de que el camino a seguir podría ser usar Cron Expressions, pero hasta ahora no he tenido suerte con las "Recur Every X Weeks"
¡Gracias!
¿Está ejecutando Quartz.Net 2.0 y la opción para usted? Todavía no se ha lanzado oficialmente, pero hay un nuevo tipo de activador que resuelve tu problema. Se llama disparador de intervalo de calendario. Básicamente lo defines tal como lo describiste en tu pregunta. Establece el intervalo en 2 y la unidad de intervalo en semanas, y se dispara cada 2 semanas. He escrito una publicación describiéndolo aquí . Puede acceder a la documentación del código fuente aquí .
Es un disparador de complext, puede administrarlo por 3 disparadores;
- activar cron de muestra de 2 semanas: "0 0 0 1 *"
- gatillo cron de muestra de 2 semanas: "0 0 0 15 *"
- trigger trig selected days sample cron: "0 0 0? * SUN-SAT"
primer gatillo creará 3. segundo gatillo eliminará 3.
Buena suerte.
Esta es la solución que utilicé ...
Cuando no hay ningún recuento utilizo un disparador de cron y selecciono los días y lo hago funcionar cada semana
EG 0 0 * * 1,2,3
cuando hay recursión para cada día seleccionado, agrego un SimpleTrigger, en pocas palabras, la fecha de inicio es el día de la semana, y luego calculo la recurrencia multiplicando el recuento de 7
Así que terminaré con un simple disparador por cada día.
¡Espero que esto ayude a alguien más!
Desafortunadamente, Quartz.Net 2 no se ha publicado, no está documentado y presenta cambios importantes.
Como dicen Aureliano y Bongo, una combinación de factores desencadenantes podría ayudar, pero no entiendo muy bien sus respectivas soluciones.
Mi solución es envolver un CronTrigger y omitir los eventos no deseados:
var ct = new CronTrigger();
ct.CronExpression = new CronExpression(
string.Format("0 {0} {1} ? * {2} *",
minuteOfHour, hourOfDay, daysList));
ct = new WeeklyTriggerWrapper(ct, 2);
public class WeeklyTriggerWrapper : CronTrigger
{
public CronTrigger Trigger
{
get;
private set;
}
public int WeekInterval
{
get;
private set;
}
public DateTime? LastFireDateTime
{
get;
private set;
}
public WeeklyTriggerWrapper(CronTrigger trigger, int weekInterval)
{
Trigger = trigger;
WeekInterval = weekInterval;
}
public override DateTime? ComputeFirstFireTimeUtc(ICalendar cal)
{
return Trigger.ComputeFirstFireTimeUtc(cal);
}
public override DateTime? GetFireTimeAfter(DateTime? afterTimeUtc)
{
var result = Trigger.GetFireTimeAfter(afterTimeUtc);
if (result.HasValue)
{
DateTime reference = StartTimeUtc;
if (LastFireDateTime.HasValue && LastFireDateTime.Value > reference)
reference = LastFireDateTime.Value;
reference = reference.AddDays(7 * WeekInterval);
while (result.HasValue && result.Value < reference)
result = Trigger.GetFireTimeAfter(result.Value);
}
LastFireDateTime = result;
return result;
}
// TODO: handle events...
}