Ejemplo n.º 1
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }


            Runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Change state name
            if (!e.IsSubprocess)
            {
                var nextState = e.ProcessInstance.CurrentState;
                if (nextState == null)
                {
                    nextState = e.ProcessInstance.CurrentActivityName;
                }
                var nextStateName = Runtime.GetLocalizedStateName(e.ProcessId, nextState);

                var orderRepository = new OrderRepository();

                orderRepository.ChangeState(e.ProcessId, nextState, nextStateName);
            }
        }
Ejemplo n.º 2
0
        private static void _processStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            try
            {
                //Это проверка на то. что состояние в котором стоит воркфлоу - существует в ее схеме
                var currentActivityName = Runtime.GetCurrentActivityName(e.ProcessId);
                var scheme = Runtime.GetProcessScheme(e.ProcessId);
                if (!scheme.Activities.Any(a => a.Name.Equals(currentActivityName, StringComparison.InvariantCultureIgnoreCase)))
                {
                    return;
                }
            }
            catch (Exception)
            {
                return;
            }

            // Уничтожаем инбокс
            var oldInbox = DeleteInbox(e.ProcessId);

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                PreExecuteAndFillInbox(e, oldInbox);
            }
            else
            {
                DeleteNotUsedHistory(e);
            }
        }
 private void ProcessChanged(ProcessStatusChangedEventArgs args, WorkflowRuntime runtime)
 {
     Log.Information($":::::::::: ProcessChanged: pid={args.ProcessId.ToString()}, scheme={args.SchemeCode}, new={args.NewStatus.StatusString()}, old={args.OldStatus.StatusString()}");
     if (String.IsNullOrWhiteSpace(args.ProcessInstance.CurrentActivityName))
     {
         return;
     }
 }
Ejemplo n.º 4
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            DataServiceProvider.Get <IDocumentRepository>().DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Inbox
            var ir = DataServiceProvider.Get <IInboxRepository>();

            ir.DropWorkflowInbox(e.ProcessId);

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                Task.Run(() => PreExecuteAndFillInbox(e));
            }

            //Change state name
            if (!e.IsSubprocess)
            {
                var nextState     = e.ProcessInstance.CurrentState;
                var nextStateName = Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);

                var docRepository = DataServiceProvider.Get <IDocumentRepository>();

                docRepository.ChangeState(e.ProcessId, nextState, nextStateName);
            }
            if (e.ProcessInstance.CurrentActivity.IsFinal == true)
            {
                var docRepository = DataServiceProvider.Get <IDocumentRepository>();
                docRepository.UpdateFinishHoSo(e.ProcessId);
            }
            //If run timer
            if (e.ProcessInstance.ExecutedTimer != null && e.ProcessInstance.CurrentCommand == "Timer")
            {
                var newActors      = WorkflowInit.Runtime.GetAllActorsForAllCommandTransitions(e.ProcessId, true, e.ProcessInstance.CurrentActivityName);
                var nextActorFirst = "";
                foreach (var act in newActors)
                {
                    nextActorFirst = act;
                }
                if (!string.IsNullOrEmpty(nextActorFirst))
                {
                    var docRepository = DataServiceProvider.Get <IDocumentRepository>();
                    docRepository.UpdateCurrentUserWithTimer(nextActorFirst, e.ProcessInstance.ExecutedTimer, e.ProcessId, e.ProcessInstance.PreviousState, e.ProcessInstance.CurrentState);
                }
            }
        }
Ejemplo n.º 5
0
        private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
        {
            var processId = e.ProcessId;

            using (var session = Provider.Store.OpenSession())
            {
                FillInbox(processId, session);
                session.SaveChanges();
            }
        }
Ejemplo n.º 6
0
        private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
        {
            var processId = e.ProcessId;

            using (var context = new DataModelDataContext())
            {
                FillInbox(processId, context);

                context.SubmitChanges();
            }
        }
Ejemplo n.º 7
0
        static async Task ProcessStatusChanged(ProcessStatusChangedEventArgs args, WorkflowRuntime runtime)
        {
            var serviceProvider = app.ApplicationServices.GetService <IServiceProvider>();

            using (var scope = serviceProvider.CreateScope())
            {
                if (args.NewStatus != ProcessStatus.Idled && args.NewStatus != ProcessStatus.Finalized)
                {
                    return;
                }

                if (string.IsNullOrEmpty(args.SchemeCode))
                {
                    return;
                }

                // DataServiceProvider.Get<IDocumentRepository>().DeleteEmptyPreHistory(e.ProcessId);
                runtime.PreExecuteFromCurrentActivity(args.ProcessId);

                //Inbox
                //var ir = DataServiceProvider.Get<IInboxRepository>();
                //ir.DropWorkflowInbox(e.ProcessId);

                //if (e.NewStatus != ProcessStatus.Finalized)
                //{
                //    Task.Run(() => PreExecuteAndFillInbox(e));
                //}

                //Change state name
                if (!args.IsSubprocess)
                {
                    var nextState = args.ProcessInstance.CurrentState;
                    if (nextState == null)
                    {
                        nextState = args.ProcessInstance.CurrentActivityName;
                    }
                    var nextStateName = runtime.GetLocalizedStateName(args.ProcessId, nextState);

                    var docRepository = scope.ServiceProvider.GetService <HestiaCoreContext>();

                    var ticket = docRepository.Tickets.FirstOrDefault(t => t.Id == args.ProcessId);

                    if (ticket != null)
                    {
                        ticket.NextState     = nextState;
                        ticket.NextStateName = nextStateName;
                        await docRepository.SaveChangesAsync();
                    }
                    //docRepository.ChangeState(e.ProcessId, nextState, nextStateName);
                }
            }
        }
Ejemplo n.º 8
0
        private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e, List <dynamic> oldInbox)
        {
            //Удаляем незаполненную историю согласования
            DeleteNotUsedHistory(e);

            Runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            var newInbox = FillInbox(e.ProcessId);

            var realNewInbox = newInbox.Where(c =>
                                              !oldInbox.Any(oldItem =>
                                                            oldItem.ProcessId == c.ProcessId && oldItem.IdentityId == c.IdentityId))
                               .Select(c => (Guid)c.IdentityId).ToList();

            Notification.DocumentAddToInbox(e, realNewInbox);
        }
Ejemplo n.º 9
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            WorkflowActions.DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Inbox
            using (var session = Workflow.WorkflowInit.Provider.Store.OpenSession())
            {
                var inboxDocs = session.Query <WorkflowInbox>().Where(c => c.ProcessId == e.ProcessId).ToList();
                foreach (var d in inboxDocs)
                {
                    session.Delete(d);
                }
                session.SaveChanges();
            }

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                var d = new Action <ProcessStatusChangedEventArgs>(PreExecuteAndFillInbox);
                d.BeginInvoke(e, FillInboxCallback, null);
            }

            //Change state name
            var nextState = WorkflowInit.Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);

            using (var session = Workflow.WorkflowInit.Provider.Store.OpenSession())
            {
                var document = session.Load <Document>(e.ProcessId);
                if (document != null)
                {
                    document.StateName = nextState;
                    session.SaveChanges();
                }
            }
        }
Ejemplo n.º 10
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            WorkflowActions.DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Inbox
            using (var context = new DataModelDataContext())
            {
                context.DropWorkflowInbox(e.ProcessId);
                context.SubmitChanges();
            }

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                var d = new Action <ProcessStatusChangedEventArgs>(PreExecuteAndFillInbox);
                d.BeginInvoke(e, FillInboxCallback, null);
            }

            //Change state name
            var nextState = WorkflowInit.Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);

            using (var context = new DataModelDataContext())
            {
                var document = DocumentHelper.Get(e.ProcessId, context);
                if (document == null)
                {
                    return;
                }

                document.StateName = nextState;
                context.SubmitChanges();
            }
        }
        private void ProcessChanged(ProcessStatusChangedEventArgs args, WorkflowRuntime runtime)
        {
            Log.Information($":::::::::: ProcessChanged: pid={args.ProcessId.ToString()}, scheme={args.SchemeCode}, new={args.NewStatus.StatusString()}, old={args.OldStatus.StatusString()}");
            if (String.IsNullOrWhiteSpace(args.ProcessInstance.CurrentActivityName))
            {
                return;
            }

            // Delete the Workflow once completed
            if (args.NewStatus == ProcessStatus.Finalized)
            {
                var serviceArgs = new WorkflowProductService.ProductProcessChangedArgs
                {
                    ProcessId  = args.ProcessId,
                    OldStatus  = args.OldStatus.StatusString(),
                    NewStatus  = args.NewStatus.StatusString(),
                    SchemaCode = args.SchemeCode
                };
                BackgroundJob.Schedule <WorkflowProductService>(service => service.ProductProcessChanged(serviceArgs), TimeSpan.FromSeconds(15));
            }
        }
Ejemplo n.º 12
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            DataServiceProvider.Get <IDocumentRepository>().DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Inbox
            var ir = DataServiceProvider.Get <IInboxRepository>();

            ir.DropWorkflowInbox(e.ProcessId);

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                Task.Run(() => PreExecuteAndFillInbox(e));
            }

            //Change state name
            if (!e.IsSubprocess)
            {
                var nextState = e.ProcessInstance.CurrentState;
                if (nextState == null)
                {
                    nextState = e.ProcessInstance.CurrentActivityName;
                }
                var nextStateName = Runtime.GetLocalizedStateName(e.ProcessId, nextState);

                var docRepository = DataServiceProvider.Get <IDocumentRepository>();

                docRepository.ChangeState(e.ProcessId, nextState, nextStateName);
            }
        }
Ejemplo n.º 13
0
        public static void DocumentAddToInbox(ProcessStatusChangedEventArgs e, List <Guid> identityId)
        {
            if (!Enabled)
            {
                return;
            }

            var comment = e.ProcessInstance.ProcessParameters != null?
                          e.ProcessInstance.ProcessParameters.Where(c => c.Name == "Comment").Select(c => c.Value).FirstOrDefault() :
                              null;

            string subject = string.Format("@ObjectType №@ObjectNumber [@ObjectState] {0}",
                                           Localization.LocalizationProvider.Provider.Get("email:addedtoinbox"));

            string wfinfo = GenerateWfInfo(string.Empty, string.Empty, comment as string);

            SendNotification(e.ProcessId, identityId,
                             string.Format("[{0}] {1}", Settings.ApplicationName, subject),
                             string.Format("<a href='@ObjectUrl'>{0}</a>.", subject),
                             wfinfo,
                             NotificationTypeEnum.DocumentAddToInbox);
        }
Ejemplo n.º 14
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            WorkflowActions.DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Inbox
            var dbcoll = Provider.Store.GetCollection <WorkflowInbox>("WorkflowInbox");

            dbcoll.DeleteMany(c => c.ProcessId == e.ProcessId);

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                var d = new Action <ProcessStatusChangedEventArgs>(PreExecuteAndFillInbox);
                d.BeginInvoke(e, FillInboxCallback, null);
            }

            //Change state name
            var docdbcoll = Provider.Store.GetCollection <Document>("Document");
            var document  = docdbcoll.Find(x => x.Id == e.ProcessId).FirstOrDefault();

            if (document != null)
            {
                var nextState = Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);
                document.StateName = nextState;
                docdbcoll.ReplaceOne(x => x.Id == document.Id, document, new UpdateOptions {
                    IsUpsert = true
                });
            }
        }
Ejemplo n.º 15
0
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            WorkflowActions.DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Inbox
            var dbcoll = Provider.Store.GetCollection <WorkflowInbox>("WorkflowInbox");

            dbcoll.Remove(Query <WorkflowInbox> .Where(c => c.ProcessId == e.ProcessId));

            if (e.NewStatus != ProcessStatus.Finalized)
            {
                var d = new Action <ProcessStatusChangedEventArgs>(PreExecuteAndFillInbox);
                d.BeginInvoke(e, FillInboxCallback, null);
            }

            //Change state name
            var docdbcoll = Workflow.WorkflowInit.Provider.Store.GetCollection <Document>("Document");
            var document  = docdbcoll.FindOneById(e.ProcessId);

            if (document != null)
            {
                var nextState = WorkflowInit.Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);
                document.StateName = nextState;
                docdbcoll.Save(document);
            }
        }
Ejemplo n.º 16
0
        private static void Runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.SchemeCode))
            {
                return;
            }

            Runtime.PreExecuteFromCurrentActivity(e.ProcessId);

            //Change state name
            if (!e.IsSubprocess)
            {
                var nextState     = e.ProcessInstance.CurrentState;
                var nextStateName = Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);

                var objectId   = e.ProcessInstance.GetParameter <int>("objectId");
                var objectType = e.ProcessInstance.GetParameter <string>("objectType");

                if (objectType != null && objectId != null)
                {
                    if (ChangeStateFuncs.ContainsKey(objectType))
                    {
                        ChangeStateFuncs[objectType].Invoke(objectId, nextState, nextStateName).Wait();
                    }
                    else
                    {
                        throw new Exception(string.Format("{0} type is not supported", objectType));
                    }
                }
            }
        }
Ejemplo n.º 17
0
        private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
        {
            var processId = e.ProcessId;

            FillInbox(processId);
        }
Ejemplo n.º 18
0
 private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
 {
     DataServiceProvider.Get <IInboxRepository>().FillInbox(e.ProcessId, Runtime);
 }
Ejemplo n.º 19
0
        private static void DeleteNotUsedHistory(ProcessStatusChangedEventArgs e)
        {
            var historyItems = DynamicRepository.GetByEntity("WorkflowHistory", FilterCriteriaSet.And.Equal(e.ProcessId, "ProcessId").Equal(Null.Value, "SecurityUserId"));

            DynamicRepository.DeleteByEntity("WorkflowHistory", historyItems.Select(i => i.Id).ToList());
        }
Ejemplo n.º 20
0
 private void Runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
 {
     //throw new NotImplementedException();
 }