コード例 #1
0
        public static void DeleteWorkflowEventScheduledTask(ScheduledTaskEntity schedule)
        {
            var workflowEventTask = (schedule.Task as WorkflowEventTaskEntity);

            schedule.Delete(ScheduledTaskOperation.Delete);
            workflowEventTask.Delete(WorkflowEventTaskOperation.Delete);
        }
コード例 #2
0
 static IDisposable SchedulerLogic_ApplySession(ITaskEntity task, ScheduledTaskEntity scheduled, IUserEntity user)
 {
     return(IsolationEntity.Override(scheduled?.TryIsolation() ?? task?.TryIsolation() ?? user?.TryIsolation()));
 }
コード例 #3
0
        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);
                    }
                };
            }
        }
コード例 #4
0
 public ScheduledTaskPair(ScheduledTaskEntity scheduledTask, DateTime nextDate)
 {
     ScheduledTask = scheduledTask;
     NextDate      = nextDate;
 }
コード例 #5
0
 public static IQueryable <ScheduledTaskLogEntity> Executions(this ScheduledTaskEntity st) =>
 As.Expression(() => Database.Query <ScheduledTaskLogEntity>().Where(a => a.ScheduledTask == st));
コード例 #6
0
ファイル: SchedulerLogic.cs プロジェクト: ywscr/extensions
 public static IQueryable <ScheduledTaskLogEntity> Executions(this ScheduledTaskEntity e)
 {
     return(ExecutionsSTExpression.Evaluate(e));
 }