public void WfBranchProcessTemplateDescriptorConverterTest() { WfConverterHelper.RegisterConverters(); WfBranchProcessTemplateDescriptor branchProcessTempDesp = new WfBranchProcessTemplateDescriptor(Guid.NewGuid().ToString()); branchProcessTempDesp.BlockingType = WfBranchProcessBlockingType.WaitAnyoneBranchProcessComplete; branchProcessTempDesp.ExecuteSequence = WfBranchProcessExecuteSequence.Serial; string result = JSONSerializerExecute.Serialize(branchProcessTempDesp); Console.WriteLine(result); WfBranchProcessTemplateDescriptor deserializedBranchProcTempDesp = JSONSerializerExecute.Deserialize <WfBranchProcessTemplateDescriptor>(result); string reSerialized = JSONSerializerExecute.Serialize(deserializedBranchProcTempDesp); Assert.AreEqual(result, reSerialized); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessTestCommon.CreateSimpleProcessDescriptor(); processDesp.InitialActivity.BranchProcessTemplates.Add(branchProcessTempDesp); string procResult = JSONSerializerExecute.Serialize(processDesp); Console.WriteLine(procResult); WfProcessDescriptor deserializedProcDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(procResult); string procReSerialized = JSONSerializerExecute.Serialize(deserializedProcDesp); Assert.AreEqual(procResult, procReSerialized); }
public void WfVariabledOfPrecessDescriptorConverterTest() { WfConverterHelper.RegisterConverters(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessTestCommon.CreateSimpleProcessDescriptor(); //给流程中变量描述赋值 string guid = Guid.NewGuid().ToString(); WfVariableDescriptor variDesc = new WfVariableDescriptor(guid); variDesc.Name = "yo"; variDesc.Description = "流程中变量的赋值"; variDesc.Enabled = true; variDesc.OriginalType = DataType.String; variDesc.OriginalValue = "原来的变量值"; processDesp.Variables.Add(variDesc); string result = JSONSerializerExecute.Serialize(processDesp); Console.WriteLine(result); WfProcessDescriptor reProcessDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(result); string reSerialized = JSONSerializerExecute.Serialize(reProcessDesp); Assert.AreEqual(result, reSerialized); Assert.AreEqual(processDesp.Variables[0].Name, reProcessDesp.Variables[0].Name); Assert.AreEqual("流程中变量的赋值", reProcessDesp.Variables[0].Description); Assert.AreEqual(true, reProcessDesp.Variables[0].Enabled); Assert.AreEqual(processDesp.Variables[0].OriginalType, reProcessDesp.Variables[0].OriginalType); }
/// <summary> /// 创建一个有多个节点的流程 /// </summary> /// <returns></returns> public static IWfProcessDescriptor CreateProcessDescriptor() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "测试流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initAct.Name = "Initial"; initAct.CodeName = "Initial Activity"; processDesp.Activities.Add(initAct); WfActivityDescriptor normalAct = new WfActivityDescriptor("NormalActivity", WfActivityType.NormalActivity); normalAct.Name = "Normal"; normalAct.CodeName = "Normal Activity"; processDesp.Activities.Add(normalAct); WfActivityDescriptor normalAct1 = new WfActivityDescriptor("NormalActivity1", WfActivityType.NormalActivity); normalAct1.Name = "Normal"; normalAct1.CodeName = "Normal Activity1"; processDesp.Activities.Add(normalAct1); WfActivityDescriptor normalAct2 = new WfActivityDescriptor("NormalActivity2", WfActivityType.NormalActivity); normalAct2.Name = "Normal"; normalAct2.CodeName = "Normal Activity2"; processDesp.Activities.Add(normalAct2); WfActivityDescriptor normalAct3 = new WfActivityDescriptor("NormalActivity3", WfActivityType.NormalActivity); normalAct3.Name = "Normal"; normalAct3.CodeName = "Normal Activity3"; processDesp.Activities.Add(normalAct3); WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedAct.Name = "Completed"; completedAct.CodeName = "Completed Activity"; processDesp.Activities.Add(completedAct); initAct.ToTransitions.AddForwardTransition(normalAct); normalAct.ToTransitions.AddForwardTransition(normalAct1); normalAct1.ToTransitions.AddForwardTransition(normalAct2); normalAct2.ToTransitions.AddForwardTransition(normalAct3); normalAct3.ToTransitions.AddForwardTransition(completedAct); return(processDesp); }
/// <summary> /// 创建一个只有开始和结束点的流程描述 /// </summary> /// <returns></returns> public static IWfProcessDescriptor CreateInitAndCompletedProcessDescriptor() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "测试流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initAct.Name = "Initial"; initAct.CodeName = "Initial Activity"; processDesp.Activities.Add(initAct); WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedAct.Name = "Completed"; completedAct.CodeName = "Completed Activity"; completedAct.RelativeLinks.Add(new WfRelativeLinkDescriptor("TestLink") { Name = "测试链接", Url = "/MCSWebApp/Sample.htm" }); processDesp.Activities.Add(completedAct); initAct.ToTransitions.AddForwardTransition(completedAct); return(processDesp); }
public void WfExternalUserTest() { WfConverterHelper.RegisterConverters(); WfExternalUser externalUser = new WfExternalUser(); externalUser.Key = "user0"; externalUser.Name = "zLing"; externalUser.Gender = Gender.Female; externalUser.Email = "*****@*****.**"; externalUser.MobilePhone = "13552630000"; externalUser.Phone = "0409987"; externalUser.Title = "programer"; string result = JSONSerializerExecute.Serialize(externalUser); WfExternalUser deserializedUser = JSONSerializerExecute.Deserialize <WfExternalUser>(result); string reSerialized = JSONSerializerExecute.Serialize(deserializedUser); Assert.AreEqual(result, reSerialized); //创建流程描述 IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor(); processDesp.ExternalUsers.Add(externalUser); //作用于流程 processDesp.InitialActivity.ExternalUsers.Add(externalUser); //作用于节点 string procDesp = JSONSerializerExecute.Serialize(processDesp); WfProcessDescriptor reProcessDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(procDesp); string reuslt = JSONSerializerExecute.Serialize(reProcessDesp); Assert.AreEqual(procDesp, reuslt); Assert.AreEqual(processDesp.ExternalUsers[0].Name, processDesp.InitialActivity.ExternalUsers[0].Name); }
/// <summary> /// 基类中构造开始点和结束点,不包含两个点的连线 /// </summary> /// <param name="processKey"></param> /// <param name="processName"></param> /// <returns></returns> public virtual IWfProcessDescriptor Build(string processKey, string processName) { processKey.CheckStringIsNullOrEmpty("processKey"); processName.CheckStringIsNullOrEmpty("processName"); WfProcessDescriptor processDesp = new WfProcessDescriptor(processKey); processDesp.ApplicationName = this.applicationName; processDesp.ProgramName = this.programName; processDesp.Name = processName; processDesp.Variables.Add(new WfVariableDescriptor(AutoBuiltProcessVariableName, "True", DataType.Boolean)); processDesp.Activities.Add(new WfActivityDescriptor("Start", WfActivityType.InitialActivity) { Name = "起草" }); processDesp.Activities.Add(new WfActivityDescriptor("End", WfActivityType.CompletedActivity) { Name = "办结" }); processDesp.InitialActivity.Variables.Add(new WfVariableDescriptor(AutoBuiltActivityVariableName, "True", DataType.Boolean)); processDesp.CompletedActivity.Variables.Add(new WfVariableDescriptor(AutoBuiltActivityVariableName, "True", DataType.Boolean)); if (processDesp.Properties.ContainsKey("ProbeParentProcessParams")) { processDesp.Properties.SetValue("ProbeParentProcessParams", true); } return(processDesp); }
private static void ExportMatrixPart(Package package, WfProcessDescriptor processDesp, WfExportProcessDescriptorContext context) { var matrix = WfMatrixAdapter.Instance.LoadByProcessKey(processDesp.Key, false); if (matrix == null) return; matrix.Loaded = true; Uri partUri = CreatePartUri(context.MatrixCounter.ToString(), WfProcessDescriptorPackagePartType.MatrixPart); if (context.ExistingParts.Contains(partUri.ToString())) return; context.MappingInfo.Add(new WfPackageRelationMapping() { MatrixPath = partUri.ToString(), MatrixDefID = matrix.Definition.Key, ProcessDescriptionID = processDesp.Key }); ExportMatrixDefPart(package, matrix.Definition, context); PackagePart part = package.CreatePart(partUri, MediaTypeNames.Application.Octet, CompressionOption.Normal); using (MemoryStream bytes = matrix.ExportToExcel2007(context.ExportParams.MatrixRoleAsPerson)) { using (Stream stream = part.GetStream()) { bytes.CopyTo(stream); } } context.ExistingParts.Add(partUri.ToString()); context.MatrixCounter++; }
/// <summary> /// 准备同意/不同意的退回流程。在B环节有两根出线BC和BA,BA是退回线,退回到A。其中BA默认是没有选择的 /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareAgreeReturnProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "专用退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); IWfActivityDescriptor activityD = CreateNormalDescriptor("D", "D"); processDesp.Activities.Add(activityD); WfActivityDescriptor completedActivity = new WfActivityDescriptor("F", WfActivityType.CompletedActivity); completedActivity.Name = "F"; completedActivity.CodeName = "F"; processDesp.Activities.Add(completedActivity); //A->B initActivity.ToTransitions.AddForwardTransition(activityB); //B有两根出线,分别是C和A,A是退回线 WfTransitionDescriptor transitionBC = (WfTransitionDescriptor)activityB.ToTransitions.AddForwardTransition(activityC); transitionBC.Enabled = true; transitionBC.DefaultSelect = true; WfTransitionDescriptor transitionBA = (WfTransitionDescriptor)activityB.ToTransitions.AddBackwardTransition(initActivity); //transitionBA.Enabled = false; transitionBA.Enabled = true; transitionBC.DefaultSelect = false; transitionBA.IsBackward = true; //C->D activityC.ToTransitions.AddForwardTransition(activityD); //D到结束点 activityD.ToTransitions.AddForwardTransition(completedActivity); return(processDesp); }
/// <summary> /// 得到空流程定义的JSON串 /// </summary> /// <returns></returns> public static string GetEmptyProcessDescriptorJsonString() { RegisterConverters(); WfProcessDescriptor processDesp = new WfProcessDescriptor(); return JSONSerializerExecute.Serialize(processDesp); }
private static void ResourceConverterTest(WfResourceDescriptor resDesp) { IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor(); processDesp.Activities[1].Resources.Add(resDesp); string re = JSONSerializerExecute.Serialize(processDesp); WfProcessDescriptor reProcessDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(re); }
/// <summary> /// 生成用于复制退件活动的测试流程 /// A为起点、两条分支,A、B、C、D和A、E、D,D为终点 /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareCopyTestProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "专用退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); IWfActivityDescriptor activityE = CreateNormalDescriptor("E", "E"); processDesp.Activities.Add(activityE); WfActivityDescriptor completedActivity = new WfActivityDescriptor("D", WfActivityType.CompletedActivity); completedActivity.Name = "D"; completedActivity.CodeName = "D"; processDesp.Activities.Add(completedActivity); //A到B WfTransitionDescriptor transitionAB = (WfTransitionDescriptor)initActivity.ToTransitions.AddForwardTransition(activityB); transitionAB.Enabled = true; //A到E WfTransitionDescriptor transitionAE = (WfTransitionDescriptor)initActivity.ToTransitions.AddBackwardTransition(activityE); transitionAE.Enabled = false; //B到C activityB.ToTransitions.AddForwardTransition(activityC); //E到C activityE.ToTransitions.AddForwardTransition(activityC); //C到结束点 activityC.ToTransitions.AddForwardTransition(completedActivity); return(processDesp); }
/// <summary> /// 准备专用退件流程,B有BC和BE两条出线,IsCLine为True走BC,否则走BE /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareSpecialReturnProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "专用退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; initActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object)); processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); activityB.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object)); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); IWfActivityDescriptor activityE = CreateNormalDescriptor("E", "E"); processDesp.Activities.Add(activityE); IWfActivityDescriptor activityD = CreateNormalDescriptor("D", "D"); processDesp.Activities.Add(activityD); WfActivityDescriptor completedActivity = new WfActivityDescriptor("F", WfActivityType.CompletedActivity); completedActivity.Name = "F"; completedActivity.CodeName = "F"; processDesp.Activities.Add(completedActivity); //A到B initActivity.ToTransitions.AddForwardTransition(activityB); //B有两根出线,分别是C和E WfTransitionDescriptor transitionBC = (WfTransitionDescriptor)activityB.ToTransitions.AddForwardTransition(activityC); transitionBC.Condition = new WfConditionDescriptor(transitionBC) { Expression = "IsCLine" }; WfTransitionDescriptor transitionBE = (WfTransitionDescriptor)activityB.ToTransitions.AddForwardTransition(activityE); transitionBE.Condition = new WfConditionDescriptor(transitionBE) { Expression = "!IsCLine" }; //C和E都汇聚到D activityC.ToTransitions.AddForwardTransition(activityD); activityE.ToTransitions.AddForwardTransition(activityD); //D到结束点 activityD.ToTransitions.AddForwardTransition(completedActivity); return processDesp; }
/// <summary> /// 创建一个有连线的Server端流程 /// </summary> /// <returns></returns> public static WfProcessDescriptor CreateSimpleServerProcessWithLines() { WfProcessDescriptor processDesp = CreateSimpleServerProcessWithoutLines(); WfForwardTransitionDescriptor transition = new WfForwardTransitionDescriptor("L1"); transition.ConnectActivities(processDesp.InitialActivity, processDesp.CompletedActivity); return(processDesp); }
public void ClientProcessWithWithActivityMatrixResourceDescriptorToServerTest() { WfClientProcessDescriptor client = ProcessDescriptorHelper.CreateClientProcessWithActivityMatrixResourceDescriptor(); WfProcessDescriptor server = null; WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref server); Assert.IsNotNull(server.Activities["N1"]); Assert.IsTrue(server.Activities["N1"].Resources.Count > 0); Assert.IsTrue(server.Activities["N1"].Resources[0] is WfActivityMatrixResourceDescriptor); }
public Stream WfDynamicProcessToExcel(string processKey) { OperationContext.Current.FillContextToOguServiceContext(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(processKey); WfClientProcessDescriptor client = null; WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref client); return(WfClientProcessDescriptorConverter.Instance.ClientDynamicProcessToExcelStream(client)); }
public void WfRelativeLinkDespJSONTest() { WfConverterHelper.RegisterConverters(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessTestCommon.CreateSimpleProcessDescriptor(); string result = JSONSerializerExecute.Serialize(processDesp); IWfProcessDescriptor procDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(result); Assert.AreEqual(processDesp.RelativeLinks[0].Name, procDesp.RelativeLinks[0].Name); Assert.AreEqual(processDesp.RelativeLinks[0].Url, procDesp.RelativeLinks[0].Url); }
public void SaveDescriptor(WfClientProcessDescriptor clientProcessDesp) { OperationContext.Current.FillContextToOguServiceContext(); WfProcessDescriptor processDesp = null; WfClientProcessDescriptorConverter.Instance.ClientToServer(clientProcessDesp, ref processDesp); WfSaveTemplateExecutor executor = new WfSaveTemplateExecutor(processDesp); executor.Execute(); }
/// <summary> /// 创建流程定义 /// </summary> /// <param name="overrideInitActivity"></param> /// <returns></returns> public WfProcessDescriptor CreateProcess(bool overrideInitActivity) { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Properties.ReplaceExistedPropertyValues(this.Properties); CreateInitAndCompletedActivities(processDesp); processDesp.CreateActivities(this.ActivityTemplates, overrideInitActivity); return(processDesp); }
public static IWfProcess CreateProcessInstance(WfClientProcessDescriptor client) { WfProcessDescriptor processDesp = null; WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref processDesp); WfProcessStartupParams startupParams = GetInstanceOfWfProcessStartupParams(processDesp); startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001"; startupParams.ApplicationRuntimeParameters["PayMethod"] = "1"; startupParams.ApplicationRuntimeParameters["Age"] = 30; return(WfRuntime.StartWorkflow(startupParams)); }
public void SimpleStandardServerProcessToClient() { WfProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleServerProcessWithLines(); processDesp.Output(); WfClientProcessDescriptor clientProcessDesp = null; WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref clientProcessDesp); processDesp.Output(); clientProcessDesp.AssertProcessDescriptor(processDesp); }
public void ExcelToSaveDescriptor(string processKey, Stream stream) { OperationContext.Current.FillContextToOguServiceContext(); WfCreateClientDynamicProcessParams processParams = ExcelToWfCreateClientDynamicProcessParams(processKey, stream); WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams); WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name); WfProcessDescriptor processDesp = null; WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref processDesp); WfProcessDescriptorManager.SaveDescriptor(processDesp); }
/// <summary> /// 准备一条简单的直线流程,主要用于两次退回等场景 /// 流程为A->B->C->D /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareStraightProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "简单直线流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; initActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object)); processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); activityB.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object)); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); WfActivityDescriptor completedActivity = new WfActivityDescriptor("D", WfActivityType.CompletedActivity); completedActivity.Name = "D"; completedActivity.CodeName = "D"; processDesp.Activities.Add(completedActivity); //A到B WfTransitionDescriptor transitionAB = (WfTransitionDescriptor)initActivity.ToTransitions.AddForwardTransition(activityB); transitionAB.Enabled = true; //B到C activityB.ToTransitions.AddForwardTransition(activityC); //C到结束点 activityC.ToTransitions.AddForwardTransition(completedActivity); return(processDesp); }
public void WfProcessDescriptorConverter() { WfConverterHelper.RegisterConverters(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessTestCommon.CreateSimpleProcessDescriptor(); string result = JSONSerializerExecute.Serialize(processDesp); Console.WriteLine(result); WfProcessDescriptor deserializedProcessDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(result); //再次序列化时,字条串不相等,是因为创建流程时没有Key string reSerialized = JSONSerializerExecute.Serialize(deserializedProcessDesp); Console.WriteLine(reSerialized); Assert.AreEqual(result, reSerialized); }
/// <summary> /// 创建一个没有连线的Server端流程对象 /// </summary> /// <returns></returns> public static WfProcessDescriptor CreateSimpleServerProcessWithoutLines() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = UuidHelper.NewUuidString(); processDesp.Name = "服务端测试流程"; processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleServerActivity("Start", "开始", WfActivityType.InitialActivity)); processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleServerActivity("End", "结束", WfActivityType.CompletedActivity)); processDesp.RelativeLinks.Add(new WfRelativeLinkDescriptor("AR1") { Category = "Activity", Url = "http://www.ak47.com" }); return(processDesp); }
public void WfClientDynamicProcessBuilderTest() { WfCreateClientDynamicProcessParams createParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams(); WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(createParams); WfClientProcessDescriptor client = builder.Build(createParams.Key, createParams.Name); WfProcessDescriptor server = null; WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref server); Assert.IsTrue(server.Variables.GetValue("ClientDynamicProcess", false)); Assert.IsNotNull(server.Activities["N1"]); Assert.IsTrue(server.Activities["N1"].Resources.Count > 0); Assert.IsTrue(server.Activities["N1"].Resources[0] is WfActivityMatrixResourceDescriptor); }
public WfClientProcessDescriptor LoadDescriptor(string processKey) { if (processKey.IsNullOrEmpty()) { throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程描述的Key不能为空")); } OperationContext.Current.FillContextToOguServiceContext(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(processKey); WfClientProcessDescriptor clientProcessDesp = null; WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref clientProcessDesp); return(clientProcessDesp); }
private static void ExportProcessPart(Package package, WfProcessDescriptor processDesc, WfExportProcessDescriptorContext context) { Uri partUri = CreatePartUri(processDesc.Key, WfProcessDescriptorPackagePartType.ProcessPart); if (context.ExistingParts.Contains(partUri.ToString())) return; XElement xeWfProcess = context.Formatter.Serialize(processDesc); XDocument xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"), xeWfProcess); PackagePart part = package.CreatePart(partUri, MediaTypeNames.Text.Xml, CompressionOption.Normal); using (Stream stream = part.GetStream()) xDoc.Save(stream); context.ExistingParts.Add(partUri.ToString()); }
private static void CreateInitAndCompletedActivities(WfProcessDescriptor processDesp) { WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initAct.Name = "开始"; initAct.CodeName = "Initial Activity"; processDesp.Activities.Add(initAct); WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedAct.Name = "结束"; completedAct.CodeName = "Completed Activity"; processDesp.Activities.Add(completedAct); initAct.ToTransitions.AddForwardTransition(completedAct); }
/// <summary> /// 准备加签退件流程 /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareAddApproverReturnProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "加签退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); WfActivityDescriptor completedActivity = new WfActivityDescriptor("D", WfActivityType.CompletedActivity); completedActivity.Name = "D"; completedActivity.CodeName = "D"; processDesp.Activities.Add(completedActivity); //A到B initActivity.ToTransitions.AddForwardTransition(activityB); //B到C activityB.ToTransitions.AddForwardTransition(activityC); //C到结束点 activityC.ToTransitions.AddForwardTransition(completedActivity); return(processDesp); }
private static void ExportProcessPart(Package package, WfProcessDescriptor processDesc, WfExportProcessDescriptorContext context) { Uri partUri = CreatePartUri(processDesc.Key, WfProcessDescriptorPackagePartType.ProcessPart); if (context.ExistingParts.Contains(partUri.ToString())) { return; } XElement xeWfProcess = context.Formatter.Serialize(processDesc); XDocument xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"), xeWfProcess); PackagePart part = package.CreatePart(partUri, MediaTypeNames.Text.Xml, CompressionOption.Normal); using (Stream stream = part.GetStream()) xDoc.Save(stream); context.ExistingParts.Add(partUri.ToString()); }
private void ExportMatrixPart(Package package, WfProcessDescriptor processDesc) { var matrix = WfMatrixAdapter.Instance.LoadByProcessKey(processDesc.Key, false); if (matrix == null) { return; } matrix.Loaded = true; Uri partUri = CreatePartUri(this.MatrixCounter.ToString(), PackagePartType.MatrixPart); if (ExistingParts.Contains(partUri.ToString())) { return; } this.MappingInfo.Add(new PackageRelationMapping() { MatrixPath = partUri.ToString(), MatrixDefID = matrix.Definition.Key, ProcessDescriptionID = processDesc.Key }); ExportMatrixDefPart(package, matrix.Definition); PackagePart part = package.CreatePart(partUri, MediaTypeNames.Application.Octet); using (MemoryStream bytes = matrix.ExportToExcel2007(this.IsRoleAsPerson)) { using (var stream = part.GetStream()) { bytes.CopyTo(stream); //stream.Write(bytes, 0, bytes.Length); stream.Flush(); } } ExistingParts.Add(partUri.ToString()); this.MatrixCounter++; }
public void CreateInstanceTest() { WfActivitySettings setting = WfActivitySettings.GetConfig(); var process1 = new WfProcessDescriptor() { Key = "Process1" }; IWfActivityDescriptor actDescriptor = new WfActivityDescriptor("Init", WfActivityType.InitialActivity) { CodeName = "test", Description = "test", Enabled = true }; process1.Activities.Add(actDescriptor); IWfActivity initActivity = setting.GetActivityBuilder(actDescriptor).CreateActivity(actDescriptor); Assert.IsTrue(initActivity.EnterActions.Count > 0); Assert.IsTrue(initActivity.LeaveActions.Count > 0); initActivity.EnterActions.PrepareActions(null); initActivity.EnterActions.PersistActions(null); initActivity.LeaveActions.PrepareActions(null); initActivity.LeaveActions.PersistActions(null); actDescriptor = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity) { CodeName = "test", Description = "test", Enabled = true }; process1.Activities.Add(actDescriptor); var completedActivity = setting.GetActivityBuilder(actDescriptor).CreateActivity(actDescriptor); Assert.IsTrue(completedActivity.EnterActions.Count > 0); Assert.IsTrue(completedActivity.LeaveActions.Count > 0); }
public static void ExportProcessDescriptors(WfExportProcessDescriptorParams exportParams, Stream outputStream, params string[] processDespKeys) { exportParams.NullCheck("exportParams"); processDespKeys.NullCheck("processDespKeys"); WfExportProcessDescriptorContext context = new WfExportProcessDescriptorContext(exportParams); using (Package package = ZipPackage.Open(outputStream, FileMode.Create)) { foreach (string key in processDespKeys) { WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(key); ExportProcessPart(package, processDesp, context); ExportMatrixPart(package, processDesp, context); } ExportMappingPart(package, context); } }
private static void ExportMatrixPart(Package package, WfProcessDescriptor processDesp, WfExportProcessDescriptorContext context) { var matrix = WfMatrixAdapter.Instance.LoadByProcessKey(processDesp.Key, false); if (matrix == null) { return; } matrix.Loaded = true; Uri partUri = CreatePartUri(context.MatrixCounter.ToString(), WfProcessDescriptorPackagePartType.MatrixPart); if (context.ExistingParts.Contains(partUri.ToString())) { return; } context.MappingInfo.Add(new WfPackageRelationMapping() { MatrixPath = partUri.ToString(), MatrixDefID = matrix.Definition.Key, ProcessDescriptionID = processDesp.Key }); ExportMatrixDefPart(package, matrix.Definition, context); PackagePart part = package.CreatePart(partUri, MediaTypeNames.Application.Octet, CompressionOption.Normal); using (MemoryStream bytes = matrix.ExportToExcel2007(context.ExportParams.MatrixRoleAsPerson)) { using (Stream stream = part.GetStream()) { bytes.CopyTo(stream); } } context.ExistingParts.Add(partUri.ToString()); context.MatrixCounter++; }
/// <summary> /// 创建一个简单的流程定义 /// </summary> /// <returns></returns> public static IWfProcessDescriptor CreateSimpleProcessDescriptor() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "测试流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initAct.Name = "Initial"; initAct.CodeName = "Initial Activity"; processDesp.Activities.Add(initAct); WfActivityDescriptor normalAct = new WfActivityDescriptor("NormalActivity", WfActivityType.NormalActivity); normalAct.Name = "Normal"; normalAct.CodeName = "Normal Activity"; normalAct.Properties.SetValue("AutoMoveAfterPending", true); processDesp.Activities.Add(normalAct); processDesp.RelativeLinks.Add(new WfRelativeLinkDescriptor("TestLink") { Name = "测试链接", Url = "/MCSWebApp/Sample.htm" }); WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedAct.Name = "Completed"; completedAct.CodeName = "Completed Activity"; completedAct.RelativeLinks.Add(new WfRelativeLinkDescriptor("TestLink") { Name = "测试链接", Url = "/MCSWebApp/Sample.htm" }); processDesp.Activities.Add(completedAct); initAct.ToTransitions.AddForwardTransition(normalAct); normalAct.ToTransitions.AddForwardTransition(completedAct); return processDesp; }
/// <summary> /// 基类中构造开始点和结束点,不包含两个点的连线 /// </summary> /// <param name="processKey"></param> /// <param name="processName"></param> /// <returns></returns> public virtual IWfProcessDescriptor Build(string processKey, string processName) { processKey.CheckStringIsNullOrEmpty("processKey"); processName.CheckStringIsNullOrEmpty("processName"); WfProcessDescriptor processDesp = new WfProcessDescriptor(processKey); processDesp.ApplicationName = this.applicationName; processDesp.ProgramName = this.programName; processDesp.Name = processName; processDesp.Variables.Add(new WfVariableDescriptor(AutoBuiltProcessVariableName, "True", DataType.Boolean)); processDesp.Activities.Add(new WfActivityDescriptor("Start", WfActivityType.InitialActivity) { Name = "起草" }); processDesp.Activities.Add(new WfActivityDescriptor("End", WfActivityType.CompletedActivity) { Name = "办结" }); processDesp.InitialActivity.Variables.Add(new WfVariableDescriptor(AutoBuiltActivityVariableName, "True", DataType.Boolean)); processDesp.CompletedActivity.Variables.Add(new WfVariableDescriptor(AutoBuiltActivityVariableName, "True", DataType.Boolean)); if (processDesp.Properties.ContainsKey("ProbeParentProcessParams")) processDesp.Properties.SetValue("ProbeParentProcessParams", true); return processDesp; }
/// <summary> /// 创建一个有多个节点的流程 /// </summary> /// <returns></returns> public static IWfProcessDescriptor CreateProcessDescriptor() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "测试流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initAct.Name = "Initial"; initAct.CodeName = "Initial Activity"; processDesp.Activities.Add(initAct); WfActivityDescriptor normalAct = new WfActivityDescriptor("NormalActivity", WfActivityType.NormalActivity); normalAct.Name = "Normal"; normalAct.CodeName = "Normal Activity"; processDesp.Activities.Add(normalAct); WfActivityDescriptor normalAct1 = new WfActivityDescriptor("NormalActivity1", WfActivityType.NormalActivity); normalAct1.Name = "Normal"; normalAct1.CodeName = "Normal Activity1"; processDesp.Activities.Add(normalAct1); WfActivityDescriptor normalAct2 = new WfActivityDescriptor("NormalActivity2", WfActivityType.NormalActivity); normalAct2.Name = "Normal"; normalAct2.CodeName = "Normal Activity2"; processDesp.Activities.Add(normalAct2); WfActivityDescriptor normalAct3 = new WfActivityDescriptor("NormalActivity3", WfActivityType.NormalActivity); normalAct3.Name = "Normal"; normalAct3.CodeName = "Normal Activity3"; processDesp.Activities.Add(normalAct3); WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedAct.Name = "Completed"; completedAct.CodeName = "Completed Activity"; processDesp.Activities.Add(completedAct); initAct.ToTransitions.AddForwardTransition(normalAct); normalAct.ToTransitions.AddForwardTransition(normalAct1); normalAct1.ToTransitions.AddForwardTransition(normalAct2); normalAct2.ToTransitions.AddForwardTransition(normalAct3); normalAct3.ToTransitions.AddForwardTransition(completedAct); return processDesp; }
private void SetProcessProperties(WfProcessDescriptor processDesp, Dictionary<string, object> processProperties, IDictionary<string, object> dictionary) { if (processProperties.ContainsKey("RelativeLinks")) { processDesp.RelativeLinks.CopyFrom((WfRelativeLinkDescriptorCollection)processProperties["RelativeLinks"]); } else if (dictionary.ContainsKey("RelativeLinks")) { WfRelativeLinkDescriptorCollection relativeLinks = JSONSerializerExecute.Deserialize<WfRelativeLinkDescriptorCollection>(dictionary["Variables"]); processDesp.RelativeLinks.CopyFrom(relativeLinks); } if (processProperties.ContainsKey("CancelEventReceivers")) { processDesp.CancelEventReceivers.CopyFrom((WfResourceDescriptorCollection)processProperties["CancelEventReceivers"]); } else if (dictionary.ContainsKey("CancelEventReceivers")) { WfResourceDescriptorCollection cancelEventReceivers = JSONSerializerExecute.Deserialize<WfResourceDescriptorCollection>(dictionary["CancelEventReceivers"]); processDesp.CancelEventReceivers.CopyFrom(cancelEventReceivers); } if (processProperties.ContainsKey("CompleteEventReceivers")) { processDesp.CompleteEventReceivers.CopyFrom((WfResourceDescriptorCollection)processProperties["CompleteEventReceivers"]); } else if (dictionary.ContainsKey("CompleteEventReceivers")) { WfResourceDescriptorCollection completeEventReceivers = JSONSerializerExecute.Deserialize<WfResourceDescriptorCollection>(dictionary["CompleteEventReceivers"]); processDesp.CompleteEventReceivers.CopyFrom(completeEventReceivers); } if (processProperties.ContainsKey("CancelBeforeExecuteServices")) { processDesp.CancelBeforeExecuteServices.CopyFrom((WfServiceOperationDefinitionCollection)processProperties["CancelBeforeExecuteServices"]); } else if (dictionary.ContainsKey("CancelBeforeExecuteServices")) { WfServiceOperationDefinitionCollection cancelBeforeExecuteServices = JSONSerializerExecute.Deserialize<WfServiceOperationDefinitionCollection>(dictionary["CancelBeforeExecuteServices"]); processDesp.CancelBeforeExecuteServices.CopyFrom(cancelBeforeExecuteServices); } if (processProperties.ContainsKey("CancelAfterExecuteServices")) { processDesp.CancelAfterExecuteServices.CopyFrom((WfServiceOperationDefinitionCollection)processProperties["CancelAfterExecuteServices"]); } else if (dictionary.ContainsKey("CancelAfterExecuteServices")) { WfServiceOperationDefinitionCollection canceAfterExecuteServices = JSONSerializerExecute.Deserialize<WfServiceOperationDefinitionCollection>(dictionary["CancelAfterExecuteServices"]); processDesp.CancelAfterExecuteServices.CopyFrom(canceAfterExecuteServices); } if (processProperties.ContainsKey("InternalRelativeUsers")) { processDesp.InternalRelativeUsers.CopyFrom((WfResourceDescriptorCollection)processProperties["InternalRelativeUsers"]); } else if (dictionary.ContainsKey("InternalRelativeUsers")) { WfResourceDescriptorCollection interRelUser = JSONSerializerExecute.Deserialize<WfResourceDescriptorCollection>(dictionary["InternalRelativeUsers"]); processDesp.InternalRelativeUsers.CopyFrom(interRelUser); } if (processProperties.ContainsKey("ExternalUsers")) { processDesp.ExternalUsers.CopyFrom((WfExternalUserCollection)processProperties["ExternalUsers"]); } else if (dictionary.ContainsKey("ExternalUsers")) { WfExternalUserCollection externalUser = JSONSerializerExecute.Deserialize<WfExternalUserCollection>(dictionary["ExternalUsers"]); processDesp.ExternalUsers.CopyFrom(externalUser); } if (processProperties.ContainsKey("Variables")) { processDesp.Variables.CopyFrom((WfVariableDescriptorCollection)processProperties["Variables"]); } else if (dictionary.ContainsKey("Variables")) { WfVariableDescriptorCollection externalUser = JSONSerializerExecute.Deserialize<WfVariableDescriptorCollection>(dictionary["Variables"]); processDesp.Variables.CopyFrom(externalUser); } if (processProperties.ContainsKey("ParametersNeedToBeCollected")) { processDesp.ParametersNeedToBeCollected.CopyFrom((WfParameterNeedToBeCollected)processProperties["ParametersNeedToBeCollected"]); } else if (dictionary.ContainsKey("ParametersNeedToBeCollected")) { WfParameterNeedToBeCollected parametersNeedToBeCollected = JSONSerializerExecute.Deserialize<WfParameterNeedToBeCollected>(dictionary["ParametersNeedToBeCollected"]); processDesp.ParametersNeedToBeCollected.CopyFrom(parametersNeedToBeCollected); } }
/// <summary> /// 准备加签退件流程 /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareAddApproverReturnProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "加签退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); WfActivityDescriptor completedActivity = new WfActivityDescriptor("D", WfActivityType.CompletedActivity); completedActivity.Name = "D"; completedActivity.CodeName = "D"; processDesp.Activities.Add(completedActivity); //A到B initActivity.ToTransitions.AddForwardTransition(activityB); //B到C activityB.ToTransitions.AddForwardTransition(activityC); //C到结束点 activityC.ToTransitions.AddForwardTransition(completedActivity); return processDesp; }
/// <summary> /// 准备同意/不同意的退回流程。在B环节有两根出线BC和BA,BA是退回线,退回到A。其中BA默认是没有选择的 /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareAgreeReturnProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "专用退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); IWfActivityDescriptor activityD = CreateNormalDescriptor("D", "D"); processDesp.Activities.Add(activityD); WfActivityDescriptor completedActivity = new WfActivityDescriptor("F", WfActivityType.CompletedActivity); completedActivity.Name = "F"; completedActivity.CodeName = "F"; processDesp.Activities.Add(completedActivity); //A->B initActivity.ToTransitions.AddForwardTransition(activityB); //B有两根出线,分别是C和A,A是退回线 WfTransitionDescriptor transitionBC = (WfTransitionDescriptor)activityB.ToTransitions.AddForwardTransition(activityC); transitionBC.Enabled = true; transitionBC.DefaultSelect = true; WfTransitionDescriptor transitionBA = (WfTransitionDescriptor)activityB.ToTransitions.AddBackwardTransition(initActivity); //transitionBA.Enabled = false; transitionBA.Enabled = true; transitionBC.DefaultSelect = false; transitionBA.IsBackward = true; //C->D activityC.ToTransitions.AddForwardTransition(activityD); //D到结束点 activityD.ToTransitions.AddForwardTransition(completedActivity); return processDesp; }
/// <summary> /// 生成用于复制退件活动的测试流程 /// A为起点、两条分支,A、B、C、D和A、E、D,D为终点 /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareCopyTestProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "专用退回流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); IWfActivityDescriptor activityE = CreateNormalDescriptor("E", "E"); processDesp.Activities.Add(activityE); WfActivityDescriptor completedActivity = new WfActivityDescriptor("D", WfActivityType.CompletedActivity); completedActivity.Name = "D"; completedActivity.CodeName = "D"; processDesp.Activities.Add(completedActivity); //A到B WfTransitionDescriptor transitionAB = (WfTransitionDescriptor)initActivity.ToTransitions.AddForwardTransition(activityB); transitionAB.Enabled = true; //A到E WfTransitionDescriptor transitionAE = (WfTransitionDescriptor)initActivity.ToTransitions.AddBackwardTransition(activityE); transitionAE.Enabled = false; //B到C activityB.ToTransitions.AddForwardTransition(activityC); //E到C activityE.ToTransitions.AddForwardTransition(activityC); //C到结束点 activityC.ToTransitions.AddForwardTransition(completedActivity); return processDesp; }
/// <summary> /// 准备一条简单的直线流程,主要用于两次退回等场景 /// 流程为A->B->C->D /// </summary> /// <returns></returns> public static IWfProcessDescriptor PrepareStraightProcessDesp() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = "TestProcess" + UuidHelper.NewUuidString().Substring(0, 8); processDesp.Name = "简单直线流程"; processDesp.ApplicationName = "TEST_APP_NAME"; processDesp.ProgramName = "TEST_PROGRAM_NAME"; processDesp.Url = "/MCS_Framework/WebTestProject/defaultHandler.aspx"; WfActivityDescriptor initActivity = new WfActivityDescriptor("A", WfActivityType.InitialActivity); initActivity.Name = "A"; initActivity.CodeName = "A"; initActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object)); processDesp.Activities.Add(initActivity); IWfActivityDescriptor activityB = CreateNormalDescriptor("B", "B"); processDesp.Activities.Add(activityB); activityB.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object)); IWfActivityDescriptor activityC = CreateNormalDescriptor("C", "C"); processDesp.Activities.Add(activityC); WfActivityDescriptor completedActivity = new WfActivityDescriptor("D", WfActivityType.CompletedActivity); completedActivity.Name = "D"; completedActivity.CodeName = "D"; processDesp.Activities.Add(completedActivity); //A到B WfTransitionDescriptor transitionAB = (WfTransitionDescriptor)initActivity.ToTransitions.AddForwardTransition(activityB); transitionAB.Enabled = true; //B到C activityB.ToTransitions.AddForwardTransition(activityC); //C到结束点 activityC.ToTransitions.AddForwardTransition(completedActivity); return processDesp; }
private void ExportProcessPart(Package package, WfProcessDescriptor processDesc) { Uri partUri = CreatePartUri(processDesc.Key, PackagePartType.ProcessPart); if (ExistingParts.Contains(partUri.ToString())) { return; } XElement xeWfProcess = this.XmlFormatter.Serialize(processDesc); var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"), xeWfProcess); PackagePart part = package.CreatePart(partUri, MediaTypeNames.Text.Xml); using (var stream = part.GetStream()) { xDoc.Save(stream); stream.Flush(); } ExistingParts.Add(partUri.ToString()); }
private void SetPropertiesValue(WfProcessDescriptor processDesp, string propertyName, object input) { if (processDesp.Properties.ContainsKey(propertyName)) { string itemvalue = JSONSerializerExecute.Serialize(input); processDesp.Properties.SetValue<string>(propertyName, itemvalue); } }
public static void AssertProcessDescriptor(this WfClientProcessDescriptor cpd, WfProcessDescriptor spd) { cpd.AreSame(spd); cpd.Activities.AssertActivityDescriptorCollection(spd.Activities); if (cpd.InitialActivity != null) Assert.AreEqual(cpd.InitialActivity.Key, spd.InitialActivity.Key); if (cpd.CompletedActivity != null) Assert.AreEqual(cpd.CompletedActivity.Key, spd.CompletedActivity.Key); cpd.RelativeLinks.AssertRelativeLinks(spd.RelativeLinks); cpd.CancelEventReceivers.AssertResources(spd.CancelEventReceivers); }
/// <summary> /// 创建一个没有连线的Server端流程对象 /// </summary> /// <returns></returns> public static WfProcessDescriptor CreateSimpleServerProcessWithoutLines() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = UuidHelper.NewUuidString(); processDesp.Name = "服务端测试流程"; processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleServerActivity("Start", "开始", WfActivityType.InitialActivity)); processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleServerActivity("End", "结束", WfActivityType.CompletedActivity)); processDesp.RelativeLinks.Add(new WfRelativeLinkDescriptor("AR1") { Category = "Activity", Url = "http://www.ak47.com" }); return processDesp; }
protected void btnOK_Click(object sender, EventArgs e) { string returnUrl = Request.QueryString.GetValue("ru", string.Empty); WfProcessDescriptor processDesc = new WfProcessDescriptor(); processDesc.Key = UuidHelper.NewUuidString(); processDesc.Name = "自由流程"; processDesc.ApplicationName = "秘书服务"; processDesc.ProgramName = "部门通知"; processDesc.Url = returnUrl; processDesc.DefaultTaskTitle = "${Subject}$"; WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initAct.Name = "起草"; initAct.CodeName = "Initial Activity"; initAct.Properties.SetValue("AutoSendUserTask", false); initAct.Properties.TrySetValue("AllowWithdraw", true); processDesc.Activities.Add(initAct); foreach (IUser user in processUsers.SelectedOuUserData) { string key = processDesc.FindNotUsedActivityKey(); WfActivityDescriptor normalAct = new WfActivityDescriptor(key, WfActivityType.NormalActivity); normalAct.Name = user.DisplayName; normalAct.CodeName = key; normalAct.Properties.SetValue("AutoAppendSecretary", true); //normalAct.ActivityType = WfActivityType.NormalActivity; WfUserResourceDescriptor userResourceDesc = new WfUserResourceDescriptor(user); normalAct.Resources.Add(userResourceDesc); processDesc.Activities.Add(normalAct); } WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedAct.Name = "完成"; completedAct.CodeName = "Completed Activity"; processDesc.Activities.Add(completedAct); for (int j = 0; j < processDesc.Activities.Count - 1; j++) { processDesc.Activities[j].ToTransitions.AddForwardTransition(processDesc.Activities[j + 1]); } WfProcessStartupParams startupParams = new WfProcessStartupParams(); startupParams.ProcessDescriptor = processDesc; startupParams.Creator = DeluxeIdentity.CurrentUser; startupParams.Assignees.Add(DeluxeIdentity.CurrentUser); startupParams.DefaultTaskTitle = "${Subject}$"; startupParams.RuntimeProcessName = "${Subject}$"; startupParams.ResourceID = UuidHelper.NewUuidString(); startupParams.Department = DeluxeIdentity.CurrentUser.Parent; string relativeParams = Request.QueryString["relativeParams"]; if (relativeParams.IsNotEmpty()) startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams)); WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams); executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow); executor.Execute(); IWfProcess process = WfClientContext.Current.OriginalActivity.Process; returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams"); Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}", returnUrl, process.ResourceID, process.CurrentActivity.ID)); }
/// <summary> /// 创建流程定义 /// </summary> /// <param name="overrideInitActivity"></param> /// <returns></returns> public WfProcessDescriptor CreateProcess(bool overrideInitActivity) { WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Properties.ReplaceExistedPropertyValues(this.Properties); CreateInitAndCompletedActivities(processDesp); processDesp.CreateActivities(this.ActivityTemplates, overrideInitActivity); return processDesp; }
/// <summary> /// 准备流程 /// </summary> private void PrepareProcess() { string returnUrl = Request.QueryString.GetValue("ru", string.Empty); WfProcessDescriptor processDesp = new WfProcessDescriptor(); processDesp.Key = UuidHelper.NewUuidString(); processDesp.Name = "自由流程"; processDesp.ApplicationName = "秘书服务"; processDesp.ProgramName = "部门通知"; processDesp.Url = returnUrl; processDesp.DefaultTaskTitle = "${Subject}$"; WfActivityDescriptor initDesp = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity); initDesp.Name = "起草"; initDesp.CodeName = "Initial Activity"; initDesp.Properties.SetValue("AutoSendUserTask", false); processDesp.Activities.Add(initDesp); processDesp.Activities.Add(PrepareAURelativeActivityDescriptor(processDesp.FindNotUsedActivityKey())); WfActivityDescriptor completedActDesp = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity); completedActDesp.Name = "完成"; completedActDesp.CodeName = "Completed Activity"; processDesp.Activities.Add(completedActDesp); for (int i = 0; i < processDesp.Activities.Count - 1; i++) { processDesp.Activities[i].ToTransitions.AddForwardTransition(processDesp.Activities[i + 1]); } WfProcessStartupParams startupParams = new WfProcessStartupParams(); startupParams.ApplicationRuntimeParameters["AdministrativeUnit"] = "Group"; startupParams.ApplicationRuntimeParameters["Amount"] = ""; startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001"; startupParams.ProcessDescriptor = processDesp; startupParams.Creator = DeluxeIdentity.CurrentUser; startupParams.Assignees.Add(DeluxeIdentity.CurrentUser); startupParams.DefaultTaskTitle = "${Subject}$"; startupParams.ResourceID = UuidHelper.NewUuidString(); startupParams.Department = DeluxeIdentity.CurrentUser.Parent; string relativeParams = Request.QueryString["relativeParams"]; if (relativeParams.IsNotEmpty()) startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams)); WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams); executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow); executor.Execute(); IWfProcess process = WfClientContext.Current.OriginalActivity.Process; returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams"); HttpContext.Current.Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}", returnUrl, process.ResourceID, process.CurrentActivity.ID)); }
private void ClearAllProperties(WfProcessDescriptor processDesp) { processDesp.Variables.Clear(); processDesp.Variables.Clear(); processDesp.RelativeLinks.Clear(); processDesp.CancelEventReceivers.Clear(); processDesp.InternalRelativeUsers.Clear(); processDesp.ExternalUsers.Clear(); processDesp.ParametersNeedToBeCollected.Clear(); processDesp.CancelAfterExecuteServices.Clear(); processDesp.CancelBeforeExecuteServices.Clear(); }
public WfCreateProcessParam() { WfProcessDescriptor processDesp = new WfProcessDescriptor(); this.Properties.CopyFrom(processDesp.Properties); }