コード例 #1
0
        /// <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;
        }
コード例 #2
0
        /// <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();
            }
        }
コード例 #3
0
        /// <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;
            }
        }