protected void descriptorEditor_SaveButtonClicked(object sender, EventArgs e)
		{
			IWfTransitionDescriptor transition = GetNextMoveToTransition(this.operationEditor.CurrentProcess);

			(transition != null).FalseThrow("不能找到下一步能够流转的连线");

			//如果下一步不允许为人员为空,则校验。
			if (transition.ToActivity.Properties.GetValue("AllowEmptyCandidates", true) == false)
			{
				(this.userSelector.SelectedOuUserData.Count > 0).FalseThrow("必须指定下一步的流转人员");
			}

			WfTransferParams transferParams = new WfTransferParams(transition.ToActivity);

			transferParams.FromTransitionDescriptor = transition;
			transferParams.Operator = DeluxeIdentity.CurrentUser;

			foreach (IUser candidate in this.userSelector.SelectedOuUserData)
				transferParams.Assignees.Add(candidate);

			WfMoveToExecutor executor = new WfMoveToExecutor(
				this.operationEditor.CurrentProcess.CurrentActivity,
				this.operationEditor.CurrentProcess.CurrentActivity,
				transferParams);

			executor.Execute();
		}
Beispiel #2
0
        protected void descriptorEditor_SaveButtonClicked(object sender, EventArgs e)
        {
            IWfTransitionDescriptor transition = GetNextMoveToTransition(this.operationEditor.CurrentProcess);

            (transition != null).FalseThrow("不能找到下一步能够流转的连线");

            //如果下一步不允许为人员为空,则校验。
            if (transition.ToActivity.Properties.GetValue("AllowEmptyCandidates", true) == false)
            {
                (this.userSelector.SelectedOuUserData.Count > 0).FalseThrow("必须指定下一步的流转人员");
            }

            WfTransferParams transferParams = new WfTransferParams(transition.ToActivity);

            transferParams.FromTransitionDescriptor = transition;
            transferParams.Operator = DeluxeIdentity.CurrentUser;

            foreach (IUser candidate in this.userSelector.SelectedOuUserData)
            {
                transferParams.Assignees.Add(candidate);
            }

            WfMoveToExecutor executor = new WfMoveToExecutor(
                this.operationEditor.CurrentProcess.CurrentActivity,
                this.operationEditor.CurrentProcess.CurrentActivity,
                transferParams);

            executor.Execute();
        }
        public WfClientProcessInfo MoveTo(string processID, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext)
        {
            processID.CheckStringIsNullOrEmpty("processID");
            clientTransferParams.NullCheck("clientTransferParams");

            OperationContext.Current.FillContextToOguServiceContext();

            IWfProcess process = GetProcessByProcessID(processID, runtimeContext);

            MeregeRuntimeContext(process, runtimeContext);

            WfTransferParams transferParams = null;

            WfClientTransferParamsConverter.Instance.ClientToServer(clientTransferParams, process, ref transferParams);

            MergeTransferParams(transferParams, runtimeContext);

            IWfActivity originalActivity = process.CurrentActivity;

            ExecuteExecutor(process, runtimeContext, (p) =>
            {
                WfMoveToExecutor executor = new WfMoveToExecutor(p.CurrentActivity, p.CurrentActivity, transferParams);

                executor.SaveApplicationData += (dataContext) => SaveOpinion(runtimeContext.Opinion, originalActivity, transferParams);
                executor.PrepareMoveToTasks  += (dataContext, tasks) =>
                                                tasks.ForEach(task => task.Purpose = p.CurrentActivity.Descriptor.Name);

                return(executor);
            });

            return(process.ToClientProcessInfo(transferParams.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator));
        }
Beispiel #4
0
        private static void MoveToExecutor(IWfProcess process)
        {
            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      pa       = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
            WfMoveToExecutor      moveExec = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, pa);

            moveExec.Execute();
        }
Beispiel #5
0
        public WfExecutorBase CreateExecutor()
        {
            WfExecutorBase executor = null;

            switch (this.OperationType)
            {
            case WfControlOperationType.MoveTo:
                executor = new WfMoveToExecutor(
                    WfClientContext.Current.OriginalActivity,
                    WfClientContext.Current.OriginalActivity, ToTransferParams(),
                    WfClientContext.Current.Locks);
                break;

            case WfControlOperationType.Consign:
            {
                WfAssigneeCollection assignees = new WfAssigneeCollection();

                WfAssignee assignee = new WfAssignee(WfClientContext.Current.User);

                assignees.Add(assignee);

                executor = new WfConsignExecutor(
                    WfClientContext.Current.OriginalActivity,
                    WfClientContext.Current.OriginalActivity,
                    assignees,
                    this.Assignees.ToUsers(),
                    this.Circulators.ToUsers(),
                    BlockingType,
                    SequenceType);
            }
            break;

            case WfControlOperationType.Return:
                if (this._RejectMode == WfRejectMode.LikeAddApprover)
                {
                    executor = new WfAddApproverExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key));
                }
                else
                {
                    executor = new WfReturnExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key));
                }
                break;

            default:
                throw new WfRuntimeException(Translator.Translate(Define.DefaultCulture, "不能处理操作类型为{0}", this.OperationType));
            }

            return(executor);
        }
Beispiel #6
0
        public static WfClientProcess Moveto(WfClientMovetoParameters parameters)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);

            IWfActivity activity = process.CurrentActivity;

            if (activity == null || activity.Assignees == null)// || !activity.Assignees.Contains(UserHelper.UserId))
            {
                return(null);
            }

            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            UserTaskCollection userTask = new UserTaskCollection();
            WfMoveToExecutor   executor = new WfMoveToExecutor(activity, activity, transferParams);

            //调整待办的url和标题
            executor.PrepareMoveToTasks += (dataContext, tasks) =>
            {
                PrepareUserTasks(tasks, null, null, transferParams.NextActivityDescriptor.Name);
            };

            GenericOpinion serverOpinion = PrepareOpinion(process.CurrentActivity, parameters.CurrentOpinion, DeluxeIdentity.CurrentUser);

            if (activity.Descriptor.ActivityType == WfActivityType.InitialActivity)
            {
                serverOpinion.OpinionType = "提交";
            }
            else if (activity.Descriptor.ActivityType == WfActivityType.CompletedActivity)
            {
                serverOpinion.OpinionType = string.Empty;
            }
            else if (activity.Descriptor.ActivityType == WfActivityType.NormalActivity)
            {
                serverOpinion.OpinionType = "同意";

                if (serverOpinion.Content.IsNullOrEmpty())
                {
                    serverOpinion.Content = "同意";
                }
            }

            executor.PrepareApplicationData += dataContext => GenericOpinionAdapter.Instance.Update(serverOpinion);

            return(GetClientProcess(executor.Execute()));
        }
        /// <summary>
        /// 通过Executor流转到默认的下一个活动,但是不保存
        /// </summary>
        /// <param name="process"></param>
        /// <returns></returns>
        public static IWfActivity MoveToNextDefaultActivityWithNoPersistExecutor(IWfProcess process)
        {
            IWfTransitionDescriptor transition = process.CurrentActivity.Descriptor.ToTransitions.GetAllCanTransitTransitions(true).FirstOrDefault();

            Assert.IsNotNull(transition,
                             string.Format("活动{0}没有能够使用的出线", process.CurrentActivity.Descriptor.Key));

            WfTransferParams transferParams = new WfTransferParams(transition.ToActivity);

            transferParams.FromTransitionDescriptor = transition;

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            executor.ExecuteNotPersist();

            return(process.CurrentActivity);
        }
Beispiel #8
0
        public static IWfProcess MoveToNextActivityByExecutor(this IWfProcess process, Func <WfTransitionDescriptorCollection, IWfTransitionDescriptor> predicate, bool persist = true)
        {
            WfTransferParams transferParams = WfTransferParams.FromNextActivity(process.CurrentActivity.Descriptor, predicate);

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            IWfProcess result = process;

            if (persist)
            {
                executor.Execute();
                result = WfRuntime.GetProcessByProcessID(process.ID);
            }
            else
            {
                executor.ExecuteNotPersist();
            }

            return(result);
        }
Beispiel #9
0
        public static IWfProcess MoveToDefaultActivityByExecutor(this IWfProcess process, bool persist = true)
        {
            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            IWfProcess result = process;

            if (persist)
            {
                executor.Execute();
                result = WfRuntime.GetProcessByProcessID(process.ID);
            }
            else
            {
                executor.ExecuteNotPersist();
            }

            return(result);
        }
        public static IWfProcess MoveToNextActivityByExecutor(this IWfProcess process, Func<WfTransitionDescriptorCollection, IWfTransitionDescriptor> predicate, bool persist = true)
        {
            WfTransferParams transferParams = WfTransferParams.FromNextActivity(process.CurrentActivity.Descriptor, predicate);

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            IWfProcess result = process;

            if (persist)
            {
                executor.Execute();
                result = WfRuntime.GetProcessByProcessID(process.ID);
            }
            else
                executor.ExecuteNotPersist();

            return result;
        }
        public static IWfProcess MoveToDefaultActivityByExecutor(this IWfProcess process, bool persist = true)
        {
            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            IWfProcess result = process;

            if (persist)
            {
                executor.Execute();
                result = WfRuntime.GetProcessByProcessID(process.ID);
            }
            else
                executor.ExecuteNotPersist();

            return result;
        }
        /// <summary>
        /// 通过Executor流转到默认的下一个活动,但是不保存
        /// </summary>
        /// <param name="process"></param>
        /// <returns></returns>
        public static IWfActivity MoveToNextDefaultActivityWithNoPersistExecutor(IWfProcess process)
        {
            IWfTransitionDescriptor transition = process.CurrentActivity.Descriptor.ToTransitions.GetAllCanTransitTransitions(true).FirstOrDefault();

            Assert.IsNotNull(transition,
                string.Format("活动{0}没有能够使用的出线", process.CurrentActivity.Descriptor.Key));

            WfTransferParams transferParams = new WfTransferParams(transition.ToActivity);

            transferParams.FromTransitionDescriptor = transition;

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            executor.ExecuteNotPersist();

            return process.CurrentActivity;
        }
        public WfExecutorBase CreateExecutor()
        {
            WfExecutorBase executor = null;

            switch (this.OperationType)
            {
                case WfControlOperationType.MoveTo:
                    executor = new WfMoveToExecutor(
                        WfClientContext.Current.OriginalActivity,
                        WfClientContext.Current.OriginalActivity, ToTransferParams(),
                        WfClientContext.Current.Locks);
                    break;
                case WfControlOperationType.Consign:
                    {
                        WfAssigneeCollection assignees = new WfAssigneeCollection();

                        WfAssignee assignee = new WfAssignee(WfClientContext.Current.User);

                        assignees.Add(assignee);

                        executor = new WfConsignExecutor(
                            WfClientContext.Current.OriginalActivity,
                            WfClientContext.Current.OriginalActivity,
                            assignees,
                            this.Assignees.ToUsers(),
                            this.Circulators.ToUsers(),
                            BlockingType,
                            SequenceType);
                    }
                    break;
                case WfControlOperationType.Return:
                    if (this._RejectMode == WfRejectMode.LikeAddApprover)
                        executor = new WfAddApproverExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key));
                    else
                        executor = new WfReturnExecutor(WfClientContext.Current.CurrentActivity, WfClientContext.Current.CurrentActivity.Process.Activities.FindActivityByDescriptorKey(TargetActivityDescriptor.Key));
                    break;
                default:
                    throw new WfRuntimeException(Translator.Translate(Define.DefaultCulture, "不能处理操作类型为{0}", this.OperationType));
            }

            return executor;
        }
		private static void MoveToExecutor(IWfProcess process)
		{
			IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
			WfTransferParams pa = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
			WfMoveToExecutor moveExec = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, pa);

			moveExec.Execute();
		}
        public WfClientProcessInfo MoveTo(string processID, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext)
        {
            processID.CheckStringIsNullOrEmpty("processID");
            clientTransferParams.NullCheck("clientTransferParams");

            OperationContext.Current.FillContextToOguServiceContext();

            IWfProcess process = GetProcessByProcessID(processID, runtimeContext);

            MeregeRuntimeContext(process, runtimeContext);

            WfTransferParams transferParams = null;

            WfClientTransferParamsConverter.Instance.ClientToServer(clientTransferParams, process, ref transferParams);

            MergeTransferParams(transferParams, runtimeContext);

            IWfActivity originalActivity = process.CurrentActivity;

            ExecuteExecutor(process, runtimeContext, (p) =>
            {
                WfMoveToExecutor executor = new WfMoveToExecutor(p.CurrentActivity, p.CurrentActivity, transferParams);

                executor.SaveApplicationData += (dataContext) => SaveOpinion(runtimeContext.Opinion, originalActivity, transferParams);
                executor.PrepareMoveToTasks += (dataContext, tasks) =>
                    tasks.ForEach(task => task.Purpose = p.CurrentActivity.Descriptor.Name);

                return executor;
            });

            return process.ToClientProcessInfo(transferParams.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator);
        }