public static string Cooperation(WorkflowContext context, ExecutingContext executeContext) { string resultTo = String.Empty; Node current = context.Current; AbstractWorkflow workflowService = WorkflowGlobalServiceProvider.Resolve <AbstractWorkflow>(); IWorkflowCooperationService workflowCooperationService = workflowService.NodeService.WorkflowCooperationService; IStrategyService strategyService = (IStrategyService)Utils.CreateInstance(current.Assistant); string instanceID = context.Instance.InstanceID; workflowService.NodeService.WorkflowCooperationService.Persistent(new WorkflowCooperation { NodeID = current.NID, InstanceID = context.Instance.InstanceID, TransitionID = context.TransitionID, CreateTime = DateTime.Now }); IList <WorkflowCooperation> records = workflowCooperationService.Query(instanceID).Where(e => e.NodeID == current.NID).ToList(); executeContext.Result = strategyService.Check(records); if (executeContext.Result) { IWorkflowCooperationDecision workflowCooperationDecision = (IWorkflowCooperationDecision)Utils.CreateInstance(current.Cooperation); resultTo = workflowCooperationDecision.Execute(records); workflowService.NodeService.WorkflowCooperationService.Delete(instanceID, current.NID); } else { workflowService.Actions.ForEach(pluin => pluin.ActionExecute(executeContext)); } return(resultTo); }
internal static IDbConnection CreateWorkflowConnection() { SmartflowConfiguration config = WorkflowGlobalServiceProvider.Resolve <ISmartflowConfigurationService>().GetConfiguration(); return(DbFactory.CreateConnection(config.ProviderName, config.ConnectionString)); }
protected void Application_Start(object sender, EventArgs e) { //注册全局的动作 即每跳转一个节点,都会执行动作。 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(PendingAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(RecordAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(FormAction)); //注册局部动作即跳转到特定节点中执行的动作 WorkflowGlobalServiceProvider.RegisterPartService(new EmptyAction()); NinjectDependencyResolver dependencyResolver = new NinjectDependencyResolver(); dependencyResolver.Register <IBridgeService, BridgeService>(); dependencyResolver.Register <IQuery <IList <Category> >, CategoryService>(); dependencyResolver.Register <IPendingService, PendingService>(); dependencyResolver.Register <IQuery <IList <Record>, string>, RecordService>(); dependencyResolver.Register <IQuery <IList <Constraint> >, ConstraintService>(); dependencyResolver.Register <AbstractBridgeService, BaseBridgeService>(); dependencyResolver.Register <IActorService, ActorService>(); GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver; GlobalConfiguration.Configuration.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); }
public void ActionExecute(ExecutingContext executingContext) { var current = executingContext.To; if (current.NodeType != WorkflowNodeCategory.Decision) { IWorkflowNodeService workflowNodeService = WorkflowGlobalServiceProvider.Resolve <IWorkflowNodeService>(); workflowNodeService.Execute(current); } }
public JsonResult QueryAction() { IList <dynamic> types = new List <dynamic>(); foreach (IWorkflowAction action in WorkflowGlobalServiceProvider.QueryActions()) { Type type = action.GetType(); types.Add(new { id = type.FullName, name = type.Name }); } return(Json(types)); }
protected void Application_Start() { //注册全局的动作 即每跳转一个节点,都会执行动作。 WorkflowGlobalServiceProvider.RegisterGlobalService(new PendingAction()); WorkflowGlobalServiceProvider.RegisterGlobalService(new RecordAction()); //注册局部动作 即跳转到特定节点中执行的动作 WorkflowGlobalServiceProvider.RegisterPartService(new DefaultAction()); WorkflowGlobalServiceProvider.RegisterPartService(new TestAction()); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); }
public void Jump(WorkflowContext context) { string instanceID = context.Instance.InstanceID; Node current = context.Current; Transition currentTransition = WorkflowGlobalServiceProvider.Resolve <IWorkflowTransitionService>().GetTransition(context.TransitionID); IList <Node> nodes = workflowService.NodeService.Query(instanceID); Node to = nodes.FirstOrDefault(e => e.ID == currentTransition.Destination); this.Invoke(to, currentTransition, new ExecutingContext { From = current, To = to, Direction = WorkflowOpertaion.Go, Instance = context.Instance, Data = context.Data, Message = context.Message, Result = context.Result }, context); }
protected void Application_Start() { //优先放置在最前面 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(SmartflowConfigurationService)); //注册全局的动作 即每跳转一个节点,都会执行动作。 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(PendingAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(RecordAction)); //注册局部动作 即跳转到特定节点中执行的动作 WorkflowGlobalServiceProvider.RegisterPartService(new DefaultAction()); WorkflowGlobalServiceProvider.RegisterPartService(new TestAction()); //自定义协办服务 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(SmartWorkflowCooperation)); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); }
protected void Application_Start(object sender, EventArgs e) { var config = GlobalConfiguration.Configuration; config.Filters.Add(new ArgumentCheckAttribute()); NinjectDependencyResolver dependencyResolver = new NinjectDependencyResolver(); dependencyResolver.Register <ISummaryService, SummaryService>(); dependencyResolver.Register <IBridgeService, BridgeService>(); dependencyResolver.Register <IQuery <IList <Category> >, CategoryService>(); dependencyResolver.Register <IPendingService, PendingService>(); dependencyResolver.Register <IQuery <List <Record>, string>, RecordService>(); dependencyResolver.Register <IQuery <IList <Constraint> >, ConstraintService>(); dependencyResolver.Register <AbstractBridgeService, BaseBridgeService>(); dependencyResolver.Register <IOrganizationService, OrganizationService>(); dependencyResolver.Register <IActorService, ActorService>(); GlobalConfiguration.Configuration.DependencyResolver = dependencyResolver; //注册全局的动作 即每跳转一个节点,都会执行动作。 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(PendingAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(RecordAction)); //抄送动作 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(CarbonCopyAction)); //注册局部动作 即跳转到特定节点中执行的动作 WorkflowGlobalServiceProvider.RegisterPartService(new EmptyAction()); //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional }); config.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); }
protected void Application_Start(object sender, EventArgs e) { var config = GlobalConfiguration.Configuration; //注册全局的动作 即每跳转一个节点,都会执行动作。 WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(PendingAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(RecordAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(FormAction)); //注册局部动作 即跳转到特定节点中执行的动作 WorkflowGlobalServiceProvider.RegisterPartService(new TestAction()); //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional }); config.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(e => { e.Filters.Add(typeof(ApiControllerException)); e.Filters.Add(typeof(ArgumentCheckAttribute)); }) .AddNewtonsoftJson(option => { option.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); // 忽略循环引用 option.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; // 设置时间格式 option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // 如字段为null值,该字段不会返回到前端 // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; }); services.AddTransient <ISummaryService, SummaryService>(); services.AddTransient <IBridgeService, BridgeService>(); services.AddTransient <IQuery <IList <Category> >, CategoryService>(); services.AddTransient <IPendingService, PendingService>(); services.AddTransient <IRecordService, RecordService>(); services.AddTransient <IQuery <IList <Constraint> >, ConstraintService>(); services.AddTransient <AbstractBridgeService, BaseBridgeService>(); services.AddTransient <IOrganizationService, OrganizationService>(); services.AddTransient <IActorService, ActorService>(); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(PendingAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(RecordAction)); WorkflowGlobalServiceProvider.RegisterGlobalService(typeof(CarbonCopyAction)); WorkflowGlobalServiceProvider.RegisterPartService(new EmptyAction()); services.AddAutoMapper((mapper) => mapper.AddProfile(typeof(SmartflowProfile))); XmlConfigurator.Configure(LogManager.CreateRepository(GlobalObjectService.Configuration.GetSection("Logging:Program").Value), new FileInfo("log4net.config")); services.AddHibernate(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hibernate.cfg.xml")); }
private void Invoke(Node to, Transition selectTransition, ExecutingContext executeContext, WorkflowContext context) { string instanceID = context.Instance.InstanceID; string actorID = context.ActorID; workflowService.InstanceService.Jump(selectTransition.Origin, selectTransition.Destination, instanceID, new WorkflowProcess() { RelationshipID = executeContext.From.NID, ActorID = actorID, Origin = executeContext.From.ID, Destination = executeContext.To.ID, TransitionID = selectTransition.NID, InstanceID = executeContext.Instance.InstanceID, NodeType = executeContext.From.NodeType, Direction = WorkflowOpertaion.Go }, workflowService.ProcessService); workflowService.Actions.ForEach(pluin => pluin.ActionExecute(executeContext)); if (to.NodeType == WorkflowNodeCategory.End) { workflowService.InstanceService.Transfer(WorkflowInstanceState.End, instanceID); } else if (to.NodeType == WorkflowNodeCategory.Decision) { Transition transition = workflowService.NodeService.GetTransition(to); if (transition == null) { return; } Node nc = workflowService.NodeService.Query(instanceID).Where(e => e.ID == transition.Origin).FirstOrDefault(); Jump(new WorkflowContext() { Instance = WorkflowInstance.GetInstance(instanceID), TransitionID = transition.NID, Data = context.Data, Message = "系统流转", ActorID = context.ActorID, Current = nc }); } else if (to.NodeType == WorkflowNodeCategory.Fork) { foreach (Transition transition in to.Transitions) { Jump(new WorkflowContext() { Instance = WorkflowInstance.GetInstance(instanceID), TransitionID = transition.NID, Data = context.Data, Message = "系统流转", ActorID = context.ActorID, Current = executeContext.To }); } } else if (to.NodeType == WorkflowNodeCategory.Merge) { IList <Transition> transitions = WorkflowGlobalServiceProvider.Resolve <IWorkflowTransitionService>().Query(instanceID); int transitonCount = transitions.Count(e => e.Destination == to.ID); var newInstance = WorkflowInstance.GetInstance(instanceID); int mergeCount = WorkflowGlobalServiceProvider.Resolve <IWorkflowLinkService>().GetLink(to.ID, instanceID); if (transitonCount == mergeCount) { foreach (Transition transition in to.Transitions) { Jump(new WorkflowContext() { Instance = WorkflowInstance.GetInstance(instanceID), TransitionID = transition.NID, Data = context.Data, Message = "系统流转", ActorID = context.ActorID, Current = executeContext.To }); } } } }