public void MoveToOneStepWithOpinion() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientTransferParams transferParams = new WfClientTransferParams("N2"); transferParams.Assignees.Add(Consts.Users["CEO"]); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.Operator = Consts.Users["Requestor"]; runtimeContext.Opinion = new WfClientOpinion() { Content = "我很高兴" }; processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveTo(processInfo.ID, transferParams, runtimeContext); processInfo.Output(); Assert.AreEqual("N2", processInfo.CurrentActivity.Descriptor.Key); Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CEO"].ID)); WfClientProcessInfo prevProcessInfo = WfClientProcessRuntimeServiceProxy.Instance.GetProcessInfoByActivityID(processInfo.PreviousActivity.ID, runtimeContext.Operator); prevProcessInfo.Output(); Assert.IsNotNull(prevProcessInfo.CurrentOpinion); WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByResourceID(prevProcessInfo.ResourceID); Assert.IsTrue(opinions.Count > 0); }
public WfClientProcessInfo MoveToNextDefaultActivity(string processID, WfClientRuntimeContext runtimeContext) { processID.CheckStringIsNullOrEmpty("processID"); OperationContext.Current.FillContextToOguServiceContext(); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process); 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)); }
public void SaveProcessWithOpinionTest() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.ApplicationRuntimeParameters["Amount"] = 1000; runtimeContext.Operator = Consts.Users["Requestor"]; runtimeContext.ProcessContext["Context"] = "This is process context"; runtimeContext.Opinion = new WfClientOpinion() { Content = "我很高兴" }; runtimeContext.AutoCalculate = true; processInfo = WfClientProcessRuntimeServiceProxy.Instance.SaveProcess(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual("N2", processInfo.NextActivities[0].Activity.DescriptorKey); Assert.IsNotNull(processInfo.CurrentOpinion); WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByProcessID(processInfo.ID); Assert.IsTrue(opinions.Count > 0); }
public void InvalidUpdateTagTest() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); processInfo = WfClientProcessRuntimeServiceProxy.Instance.GetProcessInfoByID(processInfo.ID, Consts.Users["Requestor"]); processInfo.Output(); runtimeContext.UpdateTag = processInfo.UpdateTag + 1; //Invalid UpdateTag bool thrown = false; try { WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); } catch (System.Exception ex) { thrown = true; Assert.IsTrue(ex.Message.IndexOf("流程状态已经改变") >= 0); } Assert.IsTrue(thrown); }
private static void ExecuteExecutor(IWfProcess process, WfClientRuntimeContext runtimeContext, Func <IWfProcess, WfExecutorBase> getExecutor) { DoPrincipalAction(runtimeContext, () => { WfExecutorBase executor = getExecutor(process); executor.PrepareMoveToTasks += (context, tasks) => { if (runtimeContext.TaskTitle.IsNotEmpty()) { tasks.ForEach(task => task.TaskTitle = runtimeContext.TaskTitle); } }; executor.PrepareNotifyTasks += (context, tasks) => { if (runtimeContext.NotifyTitle.IsNotEmpty()) { tasks.ForEach(task => task.TaskTitle = runtimeContext.TaskTitle); } }; if (runtimeContext.AutoPersist) { executor.Execute(); } else { executor.ExecuteNotPersist(); } }); }
public WfClientProcessInfo Restore(string processID, WfClientRuntimeContext runtimeContext) { OperationContext.Current.FillContextToOguServiceContext(); return(ExecuteProcessActionByProcessID(processID, runtimeContext, (process) => new WfRestoreProcessExecutor(process.CurrentActivity, process))); }
private static void MergeTransferParams(WfTransferParamsBase transferParams, WfClientRuntimeContext runtimeContext) { if (runtimeContext != null) { if (transferParams.Operator == null) { transferParams.Operator = (IUser)runtimeContext.Operator.ToOguObject(); } } }
private static IWfProcess GetProcessByProcessID(string processID, WfClientRuntimeContext runtimeContext) { IWfProcess process = WfRuntime.GetProcessByProcessID(processID); if (runtimeContext.UpdateTag >= 0) { ((WfProcess)process).UpdateTag = runtimeContext.UpdateTag; } return(process); }
private static WfClientProcessInfo ExecuteProcessAction(string processID, WfClientRuntimeContext runtimeContext, Action <IWfProcess> action) { processID.CheckStringIsNullOrEmpty("processID"); action.NullCheck("action"); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); DoPrincipalAction(runtimeContext, () => action(process)); return(process.ToClientProcessInfo(runtimeContext.Operator)); }
public WfClientProcessInfo Cancel(string processID, WfClientRuntimeContext runtimeContext) { OperationContext.Current.FillContextToOguServiceContext(); return(ExecuteProcessActionByProcessID(processID, runtimeContext, (process) => { WfCancelProcessExecutor executor = new WfCancelProcessExecutor(process.CurrentActivity, process); executor.SaveApplicationData += (dataContext) => SaveAbortOpinion(runtimeContext.Opinion); return executor; })); }
public void PauseProcess() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.Pause(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual(WfClientProcessStatus.Paused, processInfo.Status); }
/// <summary> /// 将runtimeContext的数据合并到流程上下文中 /// </summary> /// <param name="process"></param> /// <param name="runtimeContext"></param> private static void MeregeRuntimeContext(IWfProcess process, WfClientRuntimeContext runtimeContext) { if (runtimeContext != null) { WfClientDictionaryConverter.Instance.ClientToServer(runtimeContext.ApplicationRuntimeParameters, process.ApplicationRuntimeParameters); WfClientDictionaryConverter.Instance.ClientToServer(runtimeContext.ProcessContext, process.Context); WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity(runtimeContext.Opinion, process.CurrentActivity, runtimeContext.Operator, runtimeContext.Operator); if (runtimeContext.AutoCalculate) { process.GenerateCandidatesFromResources(); } } }
public void WithdrawProcess() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.Withdraw(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual("Start", processInfo.CurrentActivity.Descriptor.Key); }
public void ReplaceAssignees() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.ReplaceAssignees( processInfo.CurrentActivity.ID, null, new WfClientUser[] { Consts.Users["CEO"] }, runtimeContext); processInfo.Output(); Assert.AreEqual(Consts.Users["CEO"].ID, processInfo.CurrentActivity.Assignees[0].User.ID); }
public void MoveToNextDefaultActivity() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.ApplicationRuntimeParameters["Amount"] = 20000; runtimeContext.Operator = Consts.Users["Requestor"]; processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual("N1", processInfo.CurrentActivity.Descriptor.Key); Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CFO"].ID)); }
public void SaveProcessTest() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.ApplicationRuntimeParameters["Amount"] = 1000; runtimeContext.Operator = Consts.Users["Requestor"]; runtimeContext.ProcessContext["Context"] = "This is process context"; runtimeContext.AutoCalculate = true; processInfo = WfClientProcessRuntimeServiceProxy.Instance.SaveProcess(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual("N2", processInfo.NextActivities[0].Activity.DescriptorKey); }
public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfClientRuntimeContext context = new WfClientRuntimeContext(); context.AutoCalculate = dictionary.GetValue("autoCalculate", false); context.TaskTitle = dictionary.GetValue("taskTitle", string.Empty); context.NotifyTitle = dictionary.GetValue("notifyTitle", string.Empty); context.Operator = JSONSerializerExecute.Deserialize <WfClientUser>(dictionary.GetValue("operator", (object)null)); context.Opinion = JSONSerializerExecute.Deserialize <WfClientOpinion>(dictionary.GetValue("opinion", (object)null)); context.AutoPersist = dictionary.GetValue("autoPersist", true); context.UpdateTag = dictionary.GetValue("updateTag", -1); JSONSerializerExecute.FillDeserializedDictionary(dictionary, "applicationRuntimeParameters", context.ApplicationRuntimeParameters); JSONSerializerExecute.FillDeserializedDictionary(dictionary, "processContext", context.ProcessContext); return(context); }
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfClientRuntimeContext context = new WfClientRuntimeContext(); context.AutoCalculate = dictionary.GetValue("autoCalculate", false); context.TaskTitle = dictionary.GetValue("taskTitle", string.Empty); context.NotifyTitle = dictionary.GetValue("notifyTitle", string.Empty); context.Operator = JSONSerializerExecute.Deserialize<WfClientUser>(dictionary.GetValue("operator", (object)null)); context.Opinion = JSONSerializerExecute.Deserialize<WfClientOpinion>(dictionary.GetValue("opinion", (object)null)); context.AutoPersist = dictionary.GetValue("autoPersist", true); context.UpdateTag = dictionary.GetValue("updateTag", -1); JSONSerializerExecute.FillDeserializedDictionary(dictionary, "applicationRuntimeParameters", context.ApplicationRuntimeParameters); JSONSerializerExecute.FillDeserializedDictionary(dictionary, "processContext", context.ProcessContext); return context; }
public static WfClientProcessInfo PrepareBranchProcesses() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithoutLines(); //增加子节点 WfClientActivityDescriptor branchActDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity); branchActDesp.Key = "N1"; branchActDesp.Name = "CFO"; branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcesses", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchApprovalProcess", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcessExecuteSequence", 0); //增加审批人 branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Requestor"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Approver1"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["CEO"])); processDesp.Activities.Add(branchActDesp); //线 WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, branchActDesp.Key); transition.Key = "L1"; processDesp.InitialActivity.ToTransitions.Add(transition); WfClientTransitionDescriptor transition2 = new WfClientTransitionDescriptor(branchActDesp.Key, processDesp.CompletedActivity.Key); transition2.Key = "L2"; branchActDesp.ToTransitions.Add(transition2); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); //启动参数 WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); //流程实例 WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); WfClientProcessInfo process = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); return(WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, runtimeContext)); }
public void MoveToOneStep() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientTransferParams transferParams = new WfClientTransferParams("N2"); transferParams.Assignees.Add(Consts.Users["CEO"]); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.Operator = Consts.Users["Requestor"]; processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveTo(processInfo.ID, transferParams, runtimeContext); processInfo.Output(); Assert.AreEqual("N2", processInfo.CurrentActivity.Descriptor.Key); Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CEO"].ID)); }
public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer) { Dictionary <string, object> dictionary = new Dictionary <string, object>(); WfClientRuntimeContext context = (WfClientRuntimeContext)obj; dictionary.AddNonDefaultValue("autoCalculate", context.AutoCalculate); dictionary["taskTitle"] = context.TaskTitle; dictionary["notifyTitle"] = context.NotifyTitle; dictionary["operator"] = context.Operator; dictionary["autoPersist"] = context.AutoPersist; dictionary["applicationRuntimeParameters"] = context.ApplicationRuntimeParameters; dictionary["processContext"] = context.ProcessContext; dictionary["updateTag"] = context.UpdateTag; dictionary.AddNonDefaultValue("opinion", context.Opinion); return(dictionary); }
public void GetSimpleApplicationRuntimeParameterTest() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.ApplicationRuntimeParameters["Amount"] = 1000; runtimeContext.ApplicationRuntimeParameters["ProcessRequestor"] = Consts.Users["Requestor"]; runtimeContext.Operator = Consts.Users["Requestor"]; runtimeContext.ProcessContext["Context"] = "This is process context"; runtimeContext.AutoCalculate = true; processInfo = WfClientProcessRuntimeServiceProxy.Instance.UpdateRuntimeParameters(processInfo.ID, runtimeContext); processInfo.Output(); int data = WfClientProcessRuntimeServiceProxy.Instance.GetApplicationRuntimeParameters(processInfo.ID, "Amount", WfClientProbeApplicationRuntimeParameterMode.Auto, 0); Console.WriteLine(data); }
public void CancelProcessWithOpinion() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); runtimeContext.Opinion = new WfClientOpinion() { Content = "我很高兴" }; processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.Cancel(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual(WfClientProcessStatus.Aborted, processInfo.Status); Assert.IsNotNull(processInfo.CurrentOpinion); }
public WfClientProcessInfo UpdateRuntimeParameters(string processID, WfClientRuntimeContext runtimeContext) { processID.CheckStringIsNullOrEmpty("processID"); runtimeContext.NullCheck("clientTransferParams"); OperationContext.Current.FillContextToOguServiceContext(); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); if (runtimeContext.AutoPersist) { WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process); ExecuteProcessAction(processID, runtimeContext, (p) => WfRuntime.PersistWorkflows()); } return(process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator)); }
public void UpdateRuntimeParametersTest() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.ApplicationRuntimeParameters["Amount"] = 1000; runtimeContext.ApplicationRuntimeParameters["Users"] = new WfClientUser[] { Consts.Users["Requestor"], Consts.Users["Approver1"] }; runtimeContext.Operator = Consts.Users["Requestor"]; runtimeContext.ProcessContext["Context"] = "This is process context"; runtimeContext.AutoCalculate = true; processInfo = WfClientProcessRuntimeServiceProxy.Instance.UpdateRuntimeParameters(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual("N2", processInfo.NextActivities[0].Activity.DescriptorKey); IList usersInProcess = (IList)processInfo.ApplicationRuntimeParameters["Users"]; Assert.IsTrue(usersInProcess.Count > 0); Assert.AreEqual(Consts.Users["Requestor"].ID, ((WfClientUser)usersInProcess[0]).ID); Assert.AreEqual(Consts.Users["Approver1"].ID, ((WfClientUser)usersInProcess[1]).ID); }
private static IWfProcess GetProcessByProcessID(string processID, WfClientRuntimeContext runtimeContext) { IWfProcess process = WfRuntime.GetProcessByProcessID(processID); if (runtimeContext.UpdateTag >= 0) ((WfProcess)process).UpdateTag = runtimeContext.UpdateTag; return process; }
private static void ExecuteExecutor(IWfProcess process, WfClientRuntimeContext runtimeContext, Func<IWfProcess, WfExecutorBase> getExecutor) { DoPrincipalAction(runtimeContext, () => { WfExecutorBase executor = getExecutor(process); executor.PrepareMoveToTasks += (context, tasks) => { if (runtimeContext.TaskTitle.IsNotEmpty()) tasks.ForEach(task => task.TaskTitle = runtimeContext.TaskTitle); }; executor.PrepareNotifyTasks += (context, tasks) => { if (runtimeContext.NotifyTitle.IsNotEmpty()) tasks.ForEach(task => task.TaskTitle = runtimeContext.TaskTitle); }; if (runtimeContext.AutoPersist) executor.Execute(); else executor.ExecuteNotPersist(); }); }
private void SaveExpense(WfClientRuntimeContext runtimeContext, Expense expense) { runtimeContext.ApplicationRuntimeParameters["Amount"] = expense.Amount; runtimeContext.ProcessContext["Expense"] = JsonConvert.SerializeObject(expense); }
public WfClientProcessInfo Restore(string processID, WfClientRuntimeContext runtimeContext) { OperationContext.Current.FillContextToOguServiceContext(); return ExecuteProcessActionByProcessID(processID, runtimeContext, (process) => new WfRestoreProcessExecutor(process.CurrentActivity, process)); }
public WfClientProcessInfo StartWorkflowAndMoveTo(WfClientProcessStartupParams clientStartupParams, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext) { if (clientStartupParams == null) throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程的启动参数不能为空")); //设置标准参数,优先使用外部参数 if (!clientStartupParams.ApplicationRuntimeParameters.ContainsKey("ProcessRequestor")) clientStartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = clientStartupParams.Creator; OperationContext.Current.FillContextToOguServiceContext(); WfProcessStartupParams startupParams = null; WfClientProcessStartupParamsConverter.Instance.ClientToServer(clientStartupParams, ref startupParams); WfTransferParams transferParams = null; if (clientTransferParams != null) { WfClientTransferParamsConverter.Instance.ClientToServer(clientTransferParams, null, ref transferParams); MergeTransferParams(transferParams, runtimeContext); } IWfProcess process = null; DoPrincipalAction(startupParams.Creator, () => { WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams, transferParams); executor.AfterModifyWorkflow += (dataContext => { dataContext.CurrentProcess.GenerateCandidatesFromResources(); clientStartupParams.ProcessContext.ForEach(kp => dataContext.CurrentProcess.Context[kp.Key] = kp.Value); WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity( clientStartupParams.Opinion, dataContext.CurrentProcess.InitialActivity, clientStartupParams.Creator, clientStartupParams.Creator); }); WfClientOpinion opinion = clientStartupParams.Opinion; if (opinion == null) opinion = runtimeContext.Opinion; executor.SaveApplicationData += (dataContext) => SaveOpinion(opinion, dataContext.CurrentProcess.InitialActivity, executor.TransferParams); if (clientStartupParams.AutoPersist) process = executor.Execute(); else process = executor.ExecuteNotPersist(); }); return process.ToClientProcessInfo(clientStartupParams.Creator).FillCurrentOpinion(process.CurrentActivity, clientStartupParams.Creator); }
private static void MergeTransferParams(WfTransferParamsBase transferParams, WfClientRuntimeContext runtimeContext) { if (runtimeContext != null) { if (transferParams.Operator == null) transferParams.Operator = (IUser)runtimeContext.Operator.ToOguObject(); } }
public void WithdrawAndCancelProcess() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.WithdrawAndCancel(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual("Start", processInfo.CurrentActivity.Descriptor.Key); Assert.AreEqual(WfClientProcessStatus.Aborted, processInfo.Status); }
public WfClientProcessInfo UpdateRuntimeParameters(string processID, WfClientRuntimeContext runtimeContext) { processID.CheckStringIsNullOrEmpty("processID"); runtimeContext.NullCheck("clientTransferParams"); OperationContext.Current.FillContextToOguServiceContext(); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); if (runtimeContext.AutoPersist) { WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process); ExecuteProcessAction(processID, runtimeContext, (p) => WfRuntime.PersistWorkflows()); } return process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator); }
public WfClientProcessInfo StartWorkflowAndMoveTo(WfClientProcessStartupParams clientStartupParams, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext) { return(this.SingleCall(action => action.StartWorkflowAndMoveTo(clientStartupParams, clientTransferParams, runtimeContext))); }
public WfClientProcessInfo Resume(string processID, WfClientRuntimeContext runtimeContext) { return(this.SingleCall(action => action.Resume(processID, runtimeContext))); }
public WfClientProcessInfo MoveToNextDefaultActivity(string processID, WfClientRuntimeContext runtimeContext) { return(this.SingleCall(action => action.MoveToNextDefaultActivity(processID, runtimeContext))); }
private static WfClientProcessInfo ExecuteProcessActionByProcessID(string processID, WfClientRuntimeContext runtimeContext, Func<IWfProcess, WfExecutorBase> getExecutor) { processID.CheckStringIsNullOrEmpty("processID"); getExecutor.NullCheck("getExecutor"); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); ExecuteExecutor(process, runtimeContext, getExecutor); return process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator); }
public WfClientProcessInfo Cancel(string processID, WfClientRuntimeContext runtimeContext) { OperationContext.Current.FillContextToOguServiceContext(); return ExecuteProcessActionByProcessID(processID, runtimeContext, (process) => { WfCancelProcessExecutor executor = new WfCancelProcessExecutor(process.CurrentActivity, process); executor.SaveApplicationData += (dataContext) => SaveAbortOpinion(runtimeContext.Opinion); return executor; }); }
public static WfClientProcessInfo PrepareBranchProcesses() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithoutLines(); //增加子节点 WfClientActivityDescriptor branchActDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity); branchActDesp.Key = "N1"; branchActDesp.Name = "CFO"; branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcesses", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchApprovalProcess", true); branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcessExecuteSequence", 0); //增加审批人 branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Requestor"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Approver1"])); branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["CEO"])); processDesp.Activities.Add(branchActDesp); //线 WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, branchActDesp.Key); transition.Key = "L1"; processDesp.InitialActivity.ToTransitions.Add(transition); WfClientTransitionDescriptor transition2 = new WfClientTransitionDescriptor(branchActDesp.Key, processDesp.CompletedActivity.Key); transition2.Key = "L2"; branchActDesp.ToTransitions.Add(transition2); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); //启动参数 WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); //流程实例 WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); WfClientProcessInfo process = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); return WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, runtimeContext); }
/// <summary> /// 将runtimeContext的数据合并到流程上下文中 /// </summary> /// <param name="process"></param> /// <param name="runtimeContext"></param> private static void MeregeRuntimeContext(IWfProcess process, WfClientRuntimeContext runtimeContext) { if (runtimeContext != null) { WfClientDictionaryConverter.Instance.ClientToServer(runtimeContext.ApplicationRuntimeParameters, process.ApplicationRuntimeParameters); WfClientDictionaryConverter.Instance.ClientToServer(runtimeContext.ProcessContext, process.Context); WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity(runtimeContext.Opinion, process.CurrentActivity, runtimeContext.Operator, runtimeContext.Operator); if (runtimeContext.AutoCalculate) process.GenerateCandidatesFromResources(); } }
private static void DoPrincipalAction(WfClientRuntimeContext runtimeContext, Action action) { DoPrincipalAction((IUser)runtimeContext.Operator.ToOguObject(), action); }
public WfClientProcessInfo ReplaceAssignees(string activityID, WfClientUser originalUser, List<WfClientUser> targetUsers, WfClientRuntimeContext runtimeContext) { OperationContext.Current.FillContextToOguServiceContext(); IWfProcess process = WfRuntime.GetProcessByActivityID(activityID); IWfActivity targetActivity = process.Activities[activityID]; ExecuteExecutor(process, runtimeContext, (p) => new WfReplaceAssigneesExecutor(targetActivity, targetActivity, (IUser)originalUser.ToOguObject(), targetUsers.ToOguObjects<WfClientUser, IUser>())); return process.ToClientProcessInfo(runtimeContext.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator); }
private static WfClientProcessInfo ExecuteProcessAction(string processID, WfClientRuntimeContext runtimeContext, Action<IWfProcess> action) { processID.CheckStringIsNullOrEmpty("processID"); action.NullCheck("action"); IWfProcess process = GetProcessByProcessID(processID, runtimeContext); MeregeRuntimeContext(process, runtimeContext); DoPrincipalAction(runtimeContext, () => action(process)); return process.ToClientProcessInfo(runtimeContext.Operator); }
public void ResumeProcess() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]); processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.Pause(processInfo.ID, runtimeContext); processInfo = WfClientProcessRuntimeServiceProxy.Instance.Resume(processInfo.ID, runtimeContext); processInfo.Output(); Assert.AreEqual(WfClientProcessStatus.Running, processInfo.Status); Assert.AreEqual(WfClientActivityStatus.Running, processInfo.CurrentActivity.Status); }
public void MoveToOneStepWithOpinionThenSaveOpinion() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientTransferParams transferParams = new WfClientTransferParams("N2"); transferParams.Assignees.Add(Consts.Users["CEO"]); WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(); runtimeContext.Operator = Consts.Users["Requestor"]; processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveTo(processInfo.ID, transferParams, runtimeContext); processInfo.Output(); Assert.AreEqual("N2", processInfo.CurrentActivity.Descriptor.Key); Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CEO"].ID)); runtimeContext.Opinion = new WfClientOpinion() { Content = "我很高兴" }; processInfo = WfClientProcessRuntimeServiceProxy.Instance.SaveProcess(processInfo.ID, runtimeContext); Assert.IsNotNull(processInfo.CurrentOpinion); Assert.IsTrue(processInfo.CurrentOpinion.ID.IsNotEmpty()); runtimeContext.Opinion = processInfo.CurrentOpinion; runtimeContext.Opinion.Content = "我确实很高兴"; processInfo = WfClientProcessRuntimeServiceProxy.Instance.SaveProcess(processInfo.ID, runtimeContext); WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByResourceID(processInfo.ResourceID); Assert.AreEqual(1, opinions.Count); Assert.AreEqual(runtimeContext.Opinion.ID, opinions.First().ID); Assert.AreEqual(runtimeContext.Opinion.Content, opinions.First().Content); }
public WfClientProcessInfo UpdateRuntimeParameters(string processID, WfClientRuntimeContext runtimeContext) { return(this.SingleCall(action => action.UpdateRuntimeParameters(processID, runtimeContext))); }
/// <summary> /// 替换某个活动中的办理人,无论该活动的状态。如果这个人有待办,待办也会被替换。 /// </summary> /// <param name="activityID">需要替换的活动的ID</param> /// <param name="originalUser">被替换的人。如果这个属性为null,则替换掉这个活动中所有的指派人和候选人</param> /// <param name="targetUsers">替换成的人,如果为null,则不完成替换</param> /// <param name="runtimeContext">流转上下文信息</param> /// <returns></returns> public WfClientProcessInfo ReplaceAssignees(string activityID, WfClientUser originalUser, IEnumerable <WfClientUser> targetUsers, WfClientRuntimeContext runtimeContext) { List <WfClientUser> targetUsersList = _EmptyClientUserList; if (targetUsers != null) { targetUsersList = new List <WfClientUser>(targetUsers); } return(this.SingleCall(action => action.ReplaceAssignees(activityID, originalUser, targetUsersList, runtimeContext))); }
public WfClientProcessInfo Withdraw(string processID, WfClientRuntimeContext runtimeContext) { return(this.SingleCall(action => action.Withdraw(processID, runtimeContext))); }
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); }