/// <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; }
/// <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; } }