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); } }
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; } }
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); } } }
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; using (var context = new DataModelDataContext()) { FillInbox(processId, context); context.SubmitChanges(); } }
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); } } }
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); }
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(); } } }
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)); } }
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); } }
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 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 }); } }
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 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)); } } } }
private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e) { var processId = e.ProcessId; FillInbox(processId); }
private static void PreExecuteAndFillInbox(ProcessStatusChangedEventArgs e) { DataServiceProvider.Get <IInboxRepository>().FillInbox(e.ProcessId, Runtime); }
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 void Runtime_ProcessStatusChanged(object sender, ProcessStatusChangedEventArgs e) { //throw new NotImplementedException(); }