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); } }
private void RuntimeProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e) { if (this._statusesForWaiting.Contains(e.NewStatus)) { this._handle.Set(); this._wasSet = true; } }
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(); } }
private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e) { var processId = e.ProcessId; FillInbox(processId); }
/********************************************************************************************** * 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); }
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()); }
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 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); }
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); } }