internal override void ExecuteInstanceImp(IDbSession session) { try { var runningExecutionContext = ActivityForwardContext.CreateRunningContext(base.TaskView, base.ProcessModel, base.ActivityResource); //执行节点 NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(runningExecutionContext, session); mediator.Linker.FromActivityInstance = RunningActivityInstance; mediator.ExecuteWorkItem(); //构造回调函数需要的数据 var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } catch (WfRuntimeException rx) { var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = rx.Message; throw rx; } catch (System.Exception ex) { var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = ex.Message; throw ex; } }
internal override void ExecuteInstanceImp(IDbSession session) { //构造流程实例 var processInstance = new ProcessInstanceManager() .CreateNewProcessInstanceObject(base.AppRunner, base.ProcessModel.ProcessEntity, base.ParentProcessInstance, base.InvokedSubProcessNode == null? null : base.InvokedSubProcessNode.ActivityInstance); //构造活动实例 //1. 获取开始节点活动 var startActivity = base.ProcessModel.GetStartActivity(); var startExecutionContext = ActivityForwardContext.CreateStartupContext(base.ProcessModel, processInstance, startActivity, base.ActivityResource); //base.RunWorkItemIteraly(startExecutionContext, session); NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(startExecutionContext, session); mediator.Linker.FromActivityInstance = RunningActivityInstance; mediator.ExecuteWorkItem(); //构造回调函数需要的数据 WfExecutedResult result = base.WfExecutedResult; result.ProcessInstanceIDStarted = processInstance.ID; result.Status = WfExecutedStatus.Success; }
/// <summary> /// 跳转执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp(IDbSession session) { WfExecutedResult result = base.WfExecutedResult; var jumpActivityGUID = base.AppRunner.NextActivityPerformers.First().Key; var jumpforwardActivity = base.ProcessModel.GetActivity(jumpActivityGUID); var processInstance = (new ProcessInstanceManager()).GetById(base.RunningActivityInstance.ProcessInstanceID); var jumpforwardExecutionContext = ActivityForwardContext.CreateJumpforwardContext(jumpforwardActivity, base.ProcessModel, processInstance, base.ActivityResource); jumpforwardExecutionContext.FromActivityInstance = base.RunningActivityInstance; NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(jumpforwardExecutionContext, session); mediator.Linker.FromActivityInstance = base.RunningActivityInstance; mediator.Linker.ToActivity = jumpforwardActivity; if (mediator is NodeMediatorEnd) { //结束节点的连线转移 mediator.CreateActivityTaskTransitionInstance(jumpforwardActivity, processInstance, base.RunningActivityInstance, WfDefine.WF_XPDL_JUMP_BYPASS_GUID, TransitionTypeEnum.Forward, TransitionFlyingTypeEnum.ForwardFlying, base.ActivityResource, session); } mediator.ExecuteWorkItem(); result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); }
/// <summary> /// 启动执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp() { //构造流程实例 var processInstance = new ProcessInstanceManager(_serviceProvider) .CreateProcessInstance(base.AppRunner, base.ParentProcessInstance, null, (runner, processIns, process) => { }); //构造活动实例 //1. 获取开始节点活动 var startEntity = base.ProcessModel.GetStartActivity(); var startExecutionContext = ActivityForwardContext.CreateStartupContext(base.ProcessModel, processInstance, startEntity); NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(startExecutionContext, base.AppRunner, _serviceProvider); mediator.Linker.FromActivityInstance = RunningActivityInstance; mediator.ExecuteWorkItem(); //构造回调函数需要的数据 WfExecutedResult result = base.WfExecutedResult; result.ProcessInsUidStarted = processInstance.Fid; result.Status = WfExecutedStatus.Success; }
internal override void ExecuteInstanceImp(IDbSession session) { //根据加签类型选项,生成新的ActivityInstance记录 //加签类型有前加签,后加签和并加签 try { var signforwardExecutionContext = ActivityForwardContext.CreateRunningContext(base.TaskView, base.ProcessModel, base.ActivityResource); NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(signforwardExecutionContext, session); mediator.ExecuteWorkItem(); var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } catch (WfRuntimeException rx) { var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.SignForward_RuntimeError; result.Message = rx.Message; throw rx; } catch (System.Exception ex) { var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.SignForward_RuntimeError; result.Message = ex.Message; throw ex; } }
/// <summary> /// 运行执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp(IDbSession session) { var result = base.WfExecutedResult; result.ProcessInstanceIDStarted = RunningActivityInstance.ProcessInstanceID; try { //创建运行时上下文 ActivityForwardContext runningExecutionContext = null; if (base.TaskView != null) { //有TaskID的任务类型执行上下文 runningExecutionContext = ActivityForwardContext.CreateRunningContextByTask(base.TaskView, base.ProcessModel, base.ActivityResource, false, session); } else { //Interrupt事件类型的活动执行上下文 runningExecutionContext = ActivityForwardContext.CreateRunningContextByActivity(base.RunningActivityInstance, base.ProcessModel, base.ActivityResource, false, session); } //执行流程运行事件 OnProcessRunning(session); //执行节点流转过程 NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(runningExecutionContext, session); mediator.Linker.FromActivityInstance = RunningActivityInstance; mediator.ExecuteWorkItem(); //执行流程完成事件 OnProcessCompleted(session); //构造回调函数需要的数据 result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } catch (WfRuntimeException rx) { result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = rx.Message; throw; } catch (System.Exception ex) { result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = ex.Message; throw; } }
/// <summary> /// 跳转执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp(IDbSession session) { WfExecutedResult result = base.WfExecutedResult; //回跳类型的处理 if (base.IsBackward == true) { //创建新任务节点 var nodeMediatorBackward = new NodeMediatorBackward(base.BackwardContext, session); nodeMediatorBackward.CreateBackwardActivityTaskTransitionInstance(base.BackwardContext.ProcessInstance, base.BackwardContext.BackwardFromActivityInstance, BackwardTypeEnum.Sendback, base.BackwardContext.BackwardToTargetTransitionGUID, TransitionTypeEnum.Sendback, TransitionFlyingTypeEnum.NotFlying, base.ActivityResource, session); //更新当前办理节点的状态(从准备或运行状态更新为退回状态) var aim = new ActivityInstanceManager(); aim.SendBack(base.BackwardContext.BackwardFromActivityInstance.ID, base.ActivityResource.AppRunner, session); //构造回调函数需要的数据 result.BackwardTaskReceiver = base.BackwardContext.BackwardTaskReceiver; result.Status = WfExecutedStatus.Success; } else { var jumpActivityGUID = base.AppRunner.NextActivityPerformers.First().Key; var jumpforwardActivity = base.ProcessModel.GetActivity(jumpActivityGUID); var processInstance = (new ProcessInstanceManager()).GetById(base.RunningActivityInstance.ProcessInstanceID); var jumpforwardExecutionContext = ActivityForwardContext.CreateJumpforwardContext(jumpforwardActivity, base.ProcessModel, processInstance, base.ActivityResource); NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(jumpforwardExecutionContext, session); mediator.Linker.FromActivityInstance = base.RunningActivityInstance; mediator.Linker.ToActivity = jumpforwardActivity; if (mediator is NodeMediatorEnd) { //结束节点的连线转移 mediator.CreateActivityTaskTransitionInstance(jumpforwardActivity, processInstance, base.RunningActivityInstance, WfDefine.WF_XPDL_JUMP_BYPASS_GUID, TransitionTypeEnum.Forward, TransitionFlyingTypeEnum.ForwardFlying, base.ActivityResource, session); } mediator.ExecuteWorkItem(); result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } }
public Simulator() { InitializeComponent(); NodeMediator nMediator = new NodeMediator(); NodeFactory nFactory = NodeFactory.Instance; nFactory.setMediator(nMediator); CircuitBuilder nCircuitBuilder = new CircuitBuilder(nFactory); CircuitManager nManager = new CircuitManager(nCircuitBuilder); controller = new CircuitController(nMediator, nManager); }
/// <summary> /// 运行执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp(IDbSession session) { var result = base.WfExecutedResult; result.ProcessInstanceIDStarted = RunningActivityInstance.ProcessInstanceID; try { //创建运行时上下文 var runningExecutionContext = ActivityForwardContext.CreateRunningContext(base.TaskView, base.ProcessModel, base.ActivityResource, false, session); //----> 节点开始流转,调用活动开始执行的委托事件 DelegateExecutor.InvokeExternalDelegate(session, EventFireTypeEnum.OnActivityExecuting, runningExecutionContext); //执行节点流转过程 NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(runningExecutionContext, session); mediator.Linker.FromActivityInstance = RunningActivityInstance; mediator.ExecuteWorkItem(); //----> 节点流转完成后,调用活动完成执行的委托事件 DelegateExecutor.InvokeExternalDelegate(session, EventFireTypeEnum.OnActivityExecuted, runningExecutionContext); //构造回调函数需要的数据 result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } catch (WfRuntimeException rx) { result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = rx.Message; throw rx; } catch (System.Exception ex) { result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = ex.Message; throw ex; } }
/// <summary> /// 跳转执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp() { WfExecutedResult result = base.WfExecutedResult; //回跳类型的处理 if (base.IsBackward == true) { //创建新任务节点 var backMostPreviouslyActivityInstanceID = GetBackwardMostPreviouslyActivityInstanceID(); var nodeMediatorBackward = new NodeMediatorBackward(base.BackwardContext, AppRunner, _dataAccessor, _loggerFactory); nodeMediatorBackward.CreateBackwardActivityTaskTransitionInstance(base.BackwardContext.ProcessInstance, base.BackwardContext.BackwardFromActivityInstance, BackwardTypeEnum.Sendback, backMostPreviouslyActivityInstanceID, base.BackwardContext.BackwardToTargetTransitionGUID, TransitionTypeEnum.Sendback, TransitionFlyingTypeEnum.NotFlying); //更新当前办理节点的状态(从准备或运行状态更新为退回状态) var aim = new ActivityInstanceManager(_dataAccessor, _loggerFactory); aim.SendBack(base.BackwardContext.BackwardFromActivityInstance.Fid, AppRunner); //构造回调函数需要的数据 result.BackwardTaskReciever = base.BackwardContext.BackwardTaskReciever; result.Status = WfExecutedStatus.Success; } else { var jumpActivityGUID = base.AppRunner.NextActivity.ActivityID; var jumpforwardActivity = base.ProcessModel.GetActivity(jumpActivityGUID); var proecessInstance = (new ProcessInstanceManager(_dataAccessor, _loggerFactory)).GetByFid(base.RunningActivityInstance.ProcessInsUid); var jumpforwardExecutionContext = ActivityForwardContext.CreateJumpforwardContext(jumpforwardActivity, base.ProcessModel, proecessInstance); NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(jumpforwardExecutionContext, AppRunner, _dataAccessor, _loggerFactory); mediator.Linker.FromActivityInstance = base.RunningActivityInstance; mediator.Linker.ToActivity = jumpforwardActivity; mediator.ExecuteWorkItem(); result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } }
/// <summary> /// 运行执行方法 /// </summary> /// <param name="session">会话</param> internal override void ExecuteInstanceImp() { try { var result = base.WfExecutedResult; var processIns = new ProcessInstanceManager(_dataAccessor, _loggerFactory).GetByFid(base.TaskView.ProcessInsUid); var fromActivityIns = new ActivityInstanceManager(_dataAccessor, _loggerFactory).GetByFid(base.TaskView.ActivityInsUid); var runningExecutionContext = ActivityForwardContext.CreateRunningContext(base.TaskView, base.ProcessModel, processIns, fromActivityIns); //执行节点 NodeMediator mediator = NodeMediatorFactory.CreateNodeMediator(runningExecutionContext, AppRunner, _dataAccessor, _loggerFactory); mediator.Linker.FromActivityInstance = RunningActivityInstance; mediator.ExecuteWorkItem(); //构造回调函数需要的数据 result.Status = WfExecutedStatus.Success; result.Message = mediator.GetNodeMediatedMessage(); } catch (WfRuntimeException rx) { var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = rx.Message; throw rx; } catch (System.Exception ex) { var result = base.WfExecutedResult; result.Status = WfExecutedStatus.Failed; result.ExceptionType = WfExceptionType.RunApp_RuntimeError; result.Message = ex.Message; throw ex; } }
public CircuitController(NodeMediator mediator, CircuitManager manager) { _NodeMediator = mediator; _CircuitManager = manager; }
public CircuitManager(CircuitBuilder circuit, NodeMediator mediator) { _CircuitBuilder = circuit; canRun = false; mediator.Register(this); }