Example #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;

            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);
            }
        }
Example #2
0
		private void RuntimeProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
		{
			if (this._statusesForWaiting.Contains(e.NewStatus))
			{
				this._handle.Set();
				this._wasSet = true;
			}
		}
Example #3
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);
        }
        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 = 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 = Runtime.GetLocalizedStateName(e.ProcessId, e.ProcessInstance.CurrentState);
            using (var session = Provider.Store.OpenSession())
            {
                var document = session.Load<Document>(e.ProcessId);
                if (document != null)
                {
                    document.StateName = nextState;
                    session.SaveChanges();
                }
            }
        }
        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 static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
        {
            var processId = e.ProcessId;

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

                context.SubmitChanges();
            }
        }
        private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
        {
            var processId = e.ProcessId;

            using (var session = Provider.Store.OpenSession())
            {
                FillInbox(processId, session);
                session.SaveChanges();
            }
        }
Example #8
0
        private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e)
        {
            var processId = e.ProcessId;

            FillInbox(processId);
        }
Example #9
0
        /**********************************************************************************************
         * Mehtod   명 : _runtime_ProcessStatusChanged
         * 개   발  자 : 양영석
         * 생   성  일 : 2014-02-18
         * 용       도 : WorkflowRuntime 객채의 상태값변경 발생시 이벤트 처리
         * Input    값 :
         * Ouput    값 :
         **********************************************************************************************/
        /// <summary>
        /// WorkflowRuntime 객채의 상태값변경 발생시 이벤트 처리
        /// 실질적인 데이터의 Update 처리를 이곳에서 함.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        static void _runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e)
        {
            // 1. 리스트 로딩시
            // WorkflowProcessInstance에 현상태값 등록
            // WorkflowProcessInstanceStatus에 현상태값(1) 등록

            if (e.NewStatus != ProcessStatus.Idled && e.NewStatus != ProcessStatus.Finalized)
                return;

            if (string.IsNullOrEmpty(e.ProcessName))
                return;

            // 1. 리스트 로딩시
            // WorkflowProcessTransitionHistory에 정보 등록
            // WorkflowProcessInstance의 데이터 수정
            // WorkflowProcessInstanceStatus에 현상태값(2) 수정
            WorkflowActionsMgr.DeleteEmptyPreHistory(e.ProcessId);
            _runtime.PreExecuteFromCurrentActivity(e.ProcessId);
        }
Example #10
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());
 }
Example #11
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);
            }
        }
Example #12
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);
        }
Example #13
0
 private void SetProcessNewStatus(ProcessInstance processInstance, ProcessStatus newStatus)
 {
     ProcessStatus ınstanceStatus = this.PersistenceProvider.GetInstanceStatus(processInstance.ProcessId);
     if (newStatus == ProcessStatus.Finalized)
     {
         this.PersistenceProvider.SetWorkflowFinalized(processInstance);
         if (processInstance.IsSubprocess)
         {
             this.MergeSubprocess(processInstance);
         }
     }
     else if (newStatus == ProcessStatus.Idled)
     {
         this.PersistenceProvider.SetWorkflowIdled(processInstance);
     }
     else if (newStatus == ProcessStatus.Initialized)
     {
         this.PersistenceProvider.SetWorkflowIniialized(processInstance);
     }
     else if (newStatus != ProcessStatus.Running)
     {
         if (newStatus != ProcessStatus.Terminated)
         {
             return;
         }
         this.PersistenceProvider.SetWorkflowTerminated(processInstance, ErrorLevel.Critical, "Terminated");
     }
     else
     {
         this.PersistenceProvider.SetWorkflowRunning(processInstance);
     }
     if (this.ProcessStatusChanged != null && ınstanceStatus.Id != newStatus.Id)
     {
         EventHandler<ProcessStatusChangedEventArgs> eventHandler = this.ProcessStatusChanged;
         ProcessStatusChangedEventArgs processStatusChangedEventArg = new ProcessStatusChangedEventArgs(processInstance.ProcessId, processInstance.IsSubprocess, ınstanceStatus, newStatus)
         {
             ProcessInstance = processInstance,
             SchemeCode = processInstance.ProcessScheme.Name
         };
         eventHandler(this, processStatusChangedEventArg);
     }
 }