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(); }
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)); }
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 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); }
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); }
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); }
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); }