public void ClearTenantProcessInstanceDataTest() { WfClientProcessQueryCondition condition = new WfClientProcessQueryCondition(); condition.BeginStartTime = DateTime.Now.AddHours(-1); condition.EndStartTime = DateTime.Now.AddHours(1); condition.ProcessCreatorID = Consts.Users["Requestor"].ID; TenantContext.Current.DoActions("Test2", () => { WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance(); WfClientProcess processLoaded = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(process.ID, Consts.Users["Requestor"]); Assert.IsNotNull(processLoaded); WfClientProcessRuntimeServiceProxy.Instance.ClearTenantProcessInstanceData("Test2"); try { processLoaded = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(process.ID, Consts.Users["Requestor"]); Assert.Fail("流程已经被删除,加载流程不能成功"); } catch (System.Exception) { } }); }
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); }
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 void StartWorkflowWithoutPersist() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); clientStartupParams.AutoPersist = false; WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); processInfo.Output(); AssertStartedProcess(processInfo, clientStartupParams); try { WfClientProcess process = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(processInfo.ID, Consts.Users["Requestor"]); } catch (WfClientChannelException ex) { if (ex.Message.IndexOf("不能找到") == -1) { throw ex; } } }
public static void Output(this WfClientProcessInfo processInfo) { Console.WriteLine("Process ID = {0}", processInfo.ID); Console.WriteLine("Process Status = {0}", processInfo.Status); Console.WriteLine("UpdateTags = {0}", processInfo.UpdateTag); processInfo.Creator.Output("Process Creator"); processInfo.CurrentActivity.Output("Current Activity"); processInfo.NextActivities.Output("Next Activities"); processInfo.MainStreamActivityDescriptors.Output("MainStreamActivities"); if (processInfo.AuthorizationInfo != null) { Console.WriteLine("InMoveToMode: {0}, IsProcessAdmin: {1}, IsProcessViewer: {2}, IsInAcl: {3}", processInfo.AuthorizationInfo.InMoveToMode, processInfo.AuthorizationInfo.IsProcessAdmin, processInfo.AuthorizationInfo.IsProcessViewer, processInfo.AuthorizationInfo.IsInAcl); } if (processInfo.CurrentOpinion != null) { Console.WriteLine("Opinion: {0}, User: {1}", processInfo.CurrentOpinion.Content, processInfo.CurrentOpinion.IssuePersonName); } }
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); }
private static void ServerTargetsToClient(IWfActivity server, WfClientProcessInfo client) { WfClientActivity ccActivity = client.CurrentActivity; foreach (WfTransitionDescriptor st in server.Descriptor.ToTransitions.GetAllCanTransitTransitions(true)) { WfClientActivity targetActivity = null; if (st.Key != ccActivity.Descriptor.Key) { WfClientActivityConverter.Instance.ServerToClient(st.ToActivity.Instance, ref targetActivity); } else { targetActivity = ccActivity; } if (targetActivity != null) { WfClientTransitionDescriptor ct = null; WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct); WfClientNextActivity cnat = new WfClientNextActivity(); cnat.Transition = ct; cnat.Activity = targetActivity; client.NextActivities.Add(cnat); } } }
public void ProcessWithWithActivityMatrixResourceTest() { WfClientProcessInfo processInfo = OperationHelper.PrepareProcessWithWithActivityMatrixResourceInstance(); Assert.IsTrue(processInfo.NextActivities.Count > 0); Assert.IsTrue(processInfo.NextActivities[0].Activity.Candidates.Count > 0); Assert.AreEqual(Consts.Users["Approver1"].ID, processInfo.NextActivities[0].Activity.Candidates[0].User.ID); }
public void GetProcessByAcvtivityIDTest() { WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance(); WfClientProcess process = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByActivityID(processInfo.CurrentActivity.ID, Consts.Users["Requestor"]); Assert.AreEqual(processInfo.ID, processInfo.ID); Assert.AreEqual(processInfo.Status, processInfo.Status); Assert.AreEqual(processInfo.CurrentActivity.DescriptorKey, process.CurrentActivity.Descriptor.Key); }
public void StartWorkflow() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); processInfo.Output(); AssertStartedProcess(processInfo, clientStartupParams); }
public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfClientProcessInfo processInfo = (WfClientProcessInfo)base.Deserialize(dictionary, type, serializer); processInfo.CurrentActivity = JSONSerializerExecute.Deserialize <WfClientActivity>(dictionary.GetValue("currentActivity", (WfClientActivity)null)); processInfo.PreviousActivity = JSONSerializerExecute.Deserialize <WfClientActivity>(dictionary.GetValue("previousActivity", (WfClientActivity)null)); JSONSerializerExecute.FillDeserializedCollection(dictionary.GetValue("nextActivities", (object)null), processInfo.NextActivities); return(processInfo); }
public void GetProcessUrlFromUserTaskTest() { WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance(); string url = WfClientProcessRuntimeServiceProxy.Instance.GetProcessUrl(process.ID); Console.WriteLine(url); Assert.IsTrue(url.IsNotEmpty()); Assert.IsTrue(url.IndexOf("processID") > 0); Assert.IsTrue(url.IndexOf("activityID") < 0); }
public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer) { IDictionary <string, object> dictionary = base.Serialize(obj, serializer); WfClientProcessInfo processInfo = (WfClientProcessInfo)obj; dictionary.AddNonDefaultValue("currentActivity", processInfo.CurrentActivity); dictionary.AddNonDefaultValue("previousActivity", processInfo.PreviousActivity); dictionary.AddNonDefaultValue("nextActivities", processInfo.NextActivities); return(dictionary); }
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); }
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 QueryProcessesTest() { WfClientProcessQueryCondition condition = new WfClientProcessQueryCondition(); condition.BeginStartTime = DateTime.Now.AddHours(-1); condition.EndStartTime = DateTime.Now.AddHours(1); condition.ProcessCreatorID = Consts.Users["Requestor"].ID; WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance(); WfClientProcessCurrentInfoPageQueryResult result = WfClientProcessRuntimeServiceProxy.Instance.QueryProcesses(condition, 0, 1, string.Empty, -1); Assert.IsTrue(result.QueryResult.ContainsKey(process.ID)); }
public static WfClientProcessInfo ToClientProcessInfo(this IWfProcess process, IWfActivity originalActivity, WfClientUser clientUser) { process.NullCheck("process"); WfClientProcessInfo clientProcessInfo = null; PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("ToClientProcessInfo", () => { WfClientProcessInfoConverter.Instance.ServerToClient(process, ref clientProcessInfo); clientProcessInfo.AuthorizationInfo = WfClientProcessInfoBaseConverter.Instance.GetAuthorizationInfo(process, originalActivity, clientUser); }); return(clientProcessInfo); }
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 QueryUserOperationLogByProcessIDTest() { WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance(); WfClientUserOperationLogPageQueryResult result = WfClientDataSourceServiceProxy.Instance.QueryUserOperationLogByProcessID(process.ID, 0, 1, string.Empty, -1); Assert.IsTrue(result.QueryResult.Count > 0); Assert.AreEqual(process.ID, result.QueryResult[0].ProcessID); WfClientUserOperationLog log = WfClientDataSourceServiceProxy.Instance.GetUserOperationLogByID(result.QueryResult[0].ID); Assert.AreEqual(result.QueryResult[0].ID, log.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 void GetProcessUrlFromUserAccomplishedTaskTest() { WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance(); WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, new WfClientRuntimeContext()); Assert.AreEqual(WfClientProcessStatus.Completed, processInfo.Status); string url = WfClientProcessRuntimeServiceProxy.Instance.GetProcessUrl(process.ID); Console.WriteLine(url); Assert.IsTrue(url.IsNotEmpty()); Assert.IsTrue(url.IndexOf("processID") > 0); Assert.IsTrue(url.IndexOf("activityID") < 0); }
public void QueryBranchProcessesTest() { //建立流程 int pageSize = 1; WfClientProcessInfo process = OperationHelper.PrepareBranchProcesses(); Assert.IsTrue(process.MainStreamActivityDescriptors["N1"].BranchProcessGroupsCount > 0); string id = process.CurrentActivity.ID; //获取子流程 WfClientProcessCurrentInfoPageQueryResult result = WfClientProcessRuntimeServiceProxy.Instance.QueryBranchProcesses(id, string.Empty, 0, pageSize, string.Empty, -1); //检查 //分页是否正确,分支流程个数是否正确 Assert.AreEqual(pageSize, result.QueryResult.Count()); Assert.AreEqual(process.CurrentActivity.Assignees.Count, result.TotalCount); }
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 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 StartWorkflowAndMoveToNext() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); clientStartupParams.Opinion = new WfClientOpinion() { Content = "我启动流程很高兴" }; WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflowAndMoveTo(clientStartupParams, null, null); processInfo.Output(); WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByResourceID(processInfo.ResourceID); Assert.IsTrue(opinions.Count > 0); Assert.AreNotEqual(processInfo.CurrentActivity.ID, opinions[0].ActivityID); }
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); }
/// <summary> /// 检查 /// </summary> /// <param name="processInfo"></param> /// <param name="clientStartupParams"></param> private void AssertStartedProcess(WfClientProcessInfo processInfo, WfClientProcessStartupParams clientStartupParams) { Assert.IsTrue(processInfo.ID.IsNotEmpty()); Assert.AreEqual(clientStartupParams.ProcessDescriptorKey, processInfo.ProcessDescriptorKey); Assert.AreEqual(WfClientProcessStatus.Running, processInfo.Status); Assert.IsNotNull(processInfo.CurrentActivity); processInfo.Creator.AreSame(clientStartupParams.Assignees[0].User); Assert.IsNotNull(processInfo.CurrentActivity); processInfo.CurrentActivity.Assignees.AreSame(clientStartupParams.Assignees, false); Assert.IsNotNull(processInfo.CurrentActivity.Descriptor); Assert.IsTrue(processInfo.NextActivities.Count > 0); Assert.IsNotNull(processInfo.NextActivities[0].Transition); Assert.IsNotNull(processInfo.NextActivities[0].Activity); processInfo.ApplicationRuntimeParameters.AssertContains(clientStartupParams.ApplicationRuntimeParameters); processInfo.ProcessContext.AssertContains(clientStartupParams.ProcessContext); }
public WfClientProcessInfo ServerToClient(IWfProcess process, ref WfClientProcessInfo client) { process.NullCheck("process"); if (client == null) { client = new WfClientProcessInfo(); } WfClientProcessInfoBaseConverter.Instance.ServerToClient(process, client); WfClientActivity currentActivity = null; WfClientActivityConverter.Instance.ServerToClient(process.CurrentActivity, ref currentActivity); client.CurrentActivity = currentActivity; IWfActivity previousServerActivity = FindPreviousActivity(process.CurrentActivity); if (previousServerActivity != null) { WfClientActivity previousActivity = null; WfClientActivityConverter.Instance.ServerToClient(previousServerActivity, ref previousActivity); client.PreviousActivity = previousActivity; } client.NextActivities.Clear(); if (client.CurrentActivity != null) { ServerTargetsToClient(process.CurrentActivity, client); } return(client); }