public static void DeleteWorkflowEventScheduledTask(ScheduledTaskEntity schedule) { var workflowEventTask = (schedule.Task as WorkflowEventTaskEntity); schedule.Delete(ScheduledTaskOperation.Delete); workflowEventTask.Delete(WorkflowEventTaskOperation.Delete); }
static IDisposable SchedulerLogic_ApplySession(ITaskEntity task, ScheduledTaskEntity scheduled, IUserEntity user) { return(IsolationEntity.Override(scheduled?.TryIsolation() ?? task?.TryIsolation() ?? user?.TryIsolation())); }
public static void Start(SchemaBuilder sb, DynamicQueryManager dqm) { if (sb.NotDefined(MethodInfo.GetCurrentMethod())) { var ib = sb.Schema.Settings.FieldAttribute <ImplementedByAttribute>(PropertyRoute.Construct((ScheduledTaskEntity e) => e.Rule)); sb.Schema.Settings.FieldAttributes((WorkflowEventTaskModel a) => a.Rule).Replace(new ImplementedByAttribute(ib.ImplementedTypes)); sb.Include <WorkflowEventTaskEntity>() .WithDelete(WorkflowEventTaskOperation.Delete) .WithQuery(dqm, () => e => new { Entity = e, e.Id, e.Workflow, e.TriggeredOn, e.Event, }); new Graph <WorkflowEventTaskEntity> .Execute(WorkflowEventTaskOperation.Save) { AllowsNew = true, Lite = false, Execute = (e, _) => { if (e.TriggeredOn == TriggeredOn.Always) { e.Condition = null; } e.Save(); }, } .Register(); sb.Schema.EntityEvents <WorkflowEventTaskEntity>().PreUnsafeDelete += tasks => tasks.SelectMany(a => a.ConditionResults()).UnsafeDelete(); ExceptionLogic.DeleteLogs += ExceptionLogic_DeleteLogs; sb.Include <WorkflowEventTaskConditionResultEntity>() .WithQuery(dqm, () => e => new { Entity = e, e.Id, e.CreationDate, e.WorkflowEventTask, e.Result, }); SchedulerLogic.ExecuteTask.Register((WorkflowEventTaskEntity wet, ScheduledTaskContext ctx) => ExecuteTask(wet)); sb.AddIndex((WorkflowEventTaskConditionResultEntity e) => e.CreationDate); WorkflowEventTaskModel.GetModel = (@event) => { if ([email protected]()) { return(null); } var schedule = @event.ScheduledTask(); var task = (schedule?.Task as WorkflowEventTaskEntity); var triggeredOn = task?.TriggeredOn ?? TriggeredOn.Always; return(new WorkflowEventTaskModel { Suspended = schedule?.Suspended ?? true, Rule = schedule?.Rule, TriggeredOn = triggeredOn, Condition = triggeredOn == TriggeredOn.Always ? null : new WorkflowEventTaskConditionEval() { Script = task.Condition.Script }, Action = new WorkflowEventTaskActionEval() { Script = task?.Action.Script ?? "" } }); }; WorkflowEventTaskModel.ApplyModel = (@event, model) => { var schedule = @event.IsNew ? null : @event.ScheduledTask(); if ([email protected]()) { if (schedule != null) { DeleteWorkflowEventScheduledTask(schedule); } return; } if (schedule != null) { var task = (schedule.Task as WorkflowEventTaskEntity); schedule.Suspended = model.Suspended; if (!object.ReferenceEquals(schedule.Rule, model.Rule)) { schedule.Rule = null; schedule.Rule = model.Rule; } task.TriggeredOn = model.TriggeredOn; if (model.TriggeredOn == TriggeredOn.Always) { task.Condition = null; } else { if (task.Condition == null) { task.Condition = new WorkflowEventTaskConditionEval(); } task.Condition.Script = model.Condition.Script; }; task.Action.Script = model.Action.Script; if (GraphExplorer.IsGraphModified(schedule)) { task.Execute(WorkflowEventTaskOperation.Save); schedule.Execute(ScheduledTaskOperation.Save); } } else { var newTask = new WorkflowEventTaskEntity() { Workflow = @event.Lane.Pool.Workflow.ToLite(), Event = @event.ToLite(), TriggeredOn = model.TriggeredOn, Condition = model.TriggeredOn == TriggeredOn.Always ? null : new WorkflowEventTaskConditionEval() { Script = model.Condition.Script }, Action = new WorkflowEventTaskActionEval() { Script = model.Action.Script }, }.Execute(WorkflowEventTaskOperation.Save); schedule = new ScheduledTaskEntity() { Suspended = model.Suspended, Rule = model.Rule, Task = newTask, User = AuthLogic.SystemUser.ToLite(), }.Execute(ScheduledTaskOperation.Save); } }; } }
public ScheduledTaskPair(ScheduledTaskEntity scheduledTask, DateTime nextDate) { ScheduledTask = scheduledTask; NextDate = nextDate; }
public static IQueryable <ScheduledTaskLogEntity> Executions(this ScheduledTaskEntity st) => As.Expression(() => Database.Query <ScheduledTaskLogEntity>().Where(a => a.ScheduledTask == st));
public static IQueryable <ScheduledTaskLogEntity> Executions(this ScheduledTaskEntity e) { return(ExecutionsSTExpression.Evaluate(e)); }