public void ExcelToWfCreateClientDynamicProcessParamsTest() { const string processKey = "c8d2a844-0000-bb51-4ab0-1563a40d2b58"; WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams(); processParams.Key = processKey; WfCreateClientDynamicProcessParams result = null; WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams); WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name); WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1"; // GetCurrentTenantCode(); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client); //数据准备 using (Stream stream = WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey)) //EXCEL文件流 { result = WfClientProcessDescriptorServiceProxy.Instance.ExcelToWfCreateClientDynamicProcessParams(processKey, stream); } processParams.ActivityMatrix.PropertyDefinitions.ForEach(action => { action.DataType = ColumnDataType.String; }); //EXCEL 无法存储类型信息,所有默认都为string类型 processParams.AreSame(result); }
public void ExcelToSaveDescriptorTest() { const string processKey = "c8d2a844-3a3a-bb51-4ab0-1563a40d2b58"; WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams(); processParams.Key = processKey; WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams); WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client);//数据准备 WfClientProcessDescriptor server = null; using (Stream stream = WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey)) //EXCEL文件流 { WfClientProcessDescriptorServiceProxy.Instance.DeleteDescriptor(processKey); //清理 //校验清理结果 try { server = WfClientProcessDescriptorServiceProxy.Instance.GetDescriptor(processKey); } catch (MCS.Library.WcfExtensions.WfClientChannelException ex) { Assert.IsTrue(true, ex.Message); } WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1";// GetCurrentTenantCode(); WfClientProcessDescriptorServiceProxy.Instance.ExcelToSaveDescriptor(processKey, stream); server = WfClientProcessDescriptorServiceProxy.Instance.GetDescriptor(processKey); Assert.AreEqual(processParams.ProgramName, server.ProgramName); // Assert.AreEqual("Test1", server.Properties)); } }
public void WfDynamicProcessToExcelTest() { string processKey = "c8d2a844-0003-bb51-4ab0-1563a40d2b58"; WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams(); processParams.Key = processKey; WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams); WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name); WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1";// GetCurrentTenantCode(); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client); System.Data.DataTable processTable = null; System.Data.DataTable matrixTable = null; using (Stream stream = WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey)) { processTable = DocumentHelper.GetRangeValuesAsTable(stream, "Process", "A3"); matrixTable = DocumentHelper.GetRangeValuesAsTable(stream, "Matrix", "A3"); } Assert.IsTrue(processTable.Rows.Count > 0); Assert.IsTrue(matrixTable.Rows.Count == 2); Assert.IsTrue(matrixTable.Rows[0]["CostCenter"].ToString() == "1001"); Assert.IsTrue(matrixTable.Rows[1]["Age"].ToString() == "40"); }
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; } } }
/// <summary> /// 基类中构造开始点和结束点,不包含两个点的连线 /// </summary> /// <param name="processKey"></param> /// <param name="processName"></param> /// <returns></returns> public virtual WfClientProcessDescriptor Build(string processKey, string processName) { processKey.CheckStringIsNullOrEmpty("processKey"); processName.CheckStringIsNullOrEmpty("processName"); WfClientProcessDescriptor processDesp = new WfClientProcessDescriptor(); processDesp.Key = processKey; processDesp.ApplicationName = this._ApplicationName; processDesp.ProgramName = this._ProgramName; processDesp.Name = processName; processDesp.Activities.Add(new WfClientActivityDescriptor(WfClientActivityType.InitialActivity) { Key = "Start", Name = "起草" }); processDesp.Activities.Add(new WfClientActivityDescriptor(WfClientActivityType.CompletedActivity) { Key = "Complete", Name = "办结" }); processDesp.Properties.AddOrSetValue("ProbeParentProcessParams", "True"); return(processDesp); }
public override WfClientProcessDescriptor Build(string processKey, string processName) { this.CreateParams.Key = processKey; this.CreateParams.Name = processName; WfClientProcessDescriptor processDesp = base.Build(processKey, processName); processDesp.Variables.AddOrSetValue("ClientDynamicProcess", "True", WfClientVariableDataType.Boolean); MergeProperties(processDesp.Properties, this.CreateParams.Properties); WfClientActivityDescriptor dynamicActivityDesp = CreateDynamicActivityDescriptor(this.CreateParams.ActivityMatrix); processDesp.Activities.Add(dynamicActivityDesp); WfClientTransitionDescriptor transitionSN = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, dynamicActivityDesp.Key) { Key = "L1" }; processDesp.InitialActivity.ToTransitions.Add(transitionSN); WfClientTransitionDescriptor transitionNC = new WfClientTransitionDescriptor(dynamicActivityDesp.Key, processDesp.CompletedActivity.Key) { Key = "L2" }; dynamicActivityDesp.ToTransitions.Add(transitionNC); return(processDesp); }
public void ClientProcessWithWithActivityMatrixResourceDescriptorSerializationTest() { WfClientJsonConverterHelper.Instance.RegisterConverters(); WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateClientProcessWithActivityMatrixResourceDescriptor(); string data = JSONSerializerExecute.Serialize(processDesp); Console.WriteLine(data); WfClientProcessDescriptor deserialized = JSONSerializerExecute.Deserialize <WfClientProcessDescriptor>(data); Assert.AreEqual(processDesp.Key, deserialized.Key); Assert.AreEqual(processDesp.Activities.Count, deserialized.Activities.Count); Assert.AreEqual(processDesp.InitialActivity.Key, deserialized.InitialActivity.Key); Assert.AreEqual(processDesp.CompletedActivity.Key, deserialized.CompletedActivity.Key); Assert.AreEqual(processDesp.InitialActivity.ToTransitions.Count, deserialized.InitialActivity.ToTransitions.Count); Assert.AreEqual(processDesp.CancelEventReceivers.Count, deserialized.CancelEventReceivers.Count); Assert.AreEqual(processDesp.CompletedActivity.GetFromTransitions().Count, deserialized.CompletedActivity.GetFromTransitions().Count); Assert.IsNotNull(deserialized.Activities["N1"]); Assert.IsTrue(deserialized.Activities["N1"].Resources.Count > 0); Assert.IsTrue(deserialized.Activities["N1"].Resources[0] is WfClientActivityMatrixResourceDescriptor); ((WfClientActivityMatrixResourceDescriptor)processDesp.Activities["N1"].Resources[0]).AreSame((WfClientActivityMatrixResourceDescriptor)deserialized.Activities["N1"].Resources[0]); }
public WfClientProcess ServerToClient(IWfProcess process, ref WfClientProcess client) { WfClientProcessDescriptor clientDescriptor = null; WfClientProcessDescriptor clientMainStream = null; if ((this._Filter & WfClientProcessInfoFilter.Descriptor) != WfClientProcessInfoFilter.InstanceOnly) { WfClientProcessDescriptorConverter.Instance.ServerToClient((WfProcessDescriptor)process.Descriptor, ref clientDescriptor); } if ((this._Filter & WfClientProcessInfoFilter.MainStream) != WfClientProcessInfoFilter.InstanceOnly) { WfClientProcessDescriptorConverter.Instance.ServerToClient((WfProcessDescriptor)process.MainStream, ref clientMainStream); } if (client == null) { client = new WfClientProcess(clientDescriptor, clientMainStream); } WfClientProcessInfoBaseConverter.Instance.ServerToClient(process, client); ServerActivitiesToClient(process, client); if ((this._Filter & WfClientProcessInfoFilter.BindActivityDescriptors) != WfClientProcessInfoFilter.InstanceOnly) { client.NormalizeActivities(); } return(client); }
/// <summary> /// 创建一个有4个节点的流程,开始点有两条出线,根据Amount是否大于等于5000来判断 /// </summary> /// <returns></returns> public static WfClientProcessDescriptor CreateClientProcessWithConditionLines() { WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines(); processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleClientActivityWithUser("N1", "CFO", "CFO", WfClientActivityType.NormalActivity)); processDesp.Activities.Add(ActivityDescriptorHelper.CreateSimpleClientActivityWithUser("N2", "CEO", "CEO", WfClientActivityType.NormalActivity)); WfClientTransitionDescriptor transitionToCFO = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1"); transitionToCFO.Key = "L1"; transitionToCFO.Condition.Expression = "Amount >= 5000"; processDesp.InitialActivity.ToTransitions.Add(transitionToCFO); WfClientTransitionDescriptor transitionToCEO = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N2"); transitionToCEO.Key = "L2"; transitionToCEO.Condition.Expression = "Amount < 5000"; processDesp.InitialActivity.ToTransitions.Add(transitionToCEO); WfClientTransitionDescriptor transitionCEOToCFO = new WfClientTransitionDescriptor("CFO", "CEO"); transitionCEOToCFO.Key = "L3"; processDesp.Activities["N1"].ToTransitions.Add(transitionCEOToCFO); return(processDesp); }
public void ExcelKeyChangeSaveDescriptorTest() { const string processKey = "c8d2a844-0002-bb51-4ab0-1563a40d2b587"; WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams(); processParams.Key = processKey; WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams); WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name); WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1"; // GetCurrentTenantCode(); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client); //数据准备 #region 保存EXCEL后,修改EXCEL数据后再校验 //using (FileStream fs = File.OpenWrite(string.Format("E:\\work\\TMP\\{0}.xlsx", processKey))) //{ // WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey).CopyTo(fs); //} //using (FileStream fs = File.OpenRead(string.Format("E:\\work\\TMP\\{0}.xlsx", processKey))) //{ // WfClientProcessDescriptorServiceProxy.Instance.ExcelToSaveDescriptor(processKey, fs); //} #endregion client = WfClientProcessDescriptorServiceProxy.Instance.GetDescriptor(processKey); Assert.AreEqual(client.Properties.GetValue("Key", string.Empty), processKey); Assert.AreEqual(client.Key, processKey); }
/// <summary> /// 创建一个带动态矩阵资源的流程定义 /// </summary> /// <returns></returns> public static WfClientProcessDescriptor CreateClientProcessWithActivityMatrixResourceDescriptor() { WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines(); WfClientActivityDescriptor actDesp = ActivityDescriptorHelper.CreateSimpleClientActivity("N1", "活动矩阵", WfClientActivityType.NormalActivity); actDesp.Properties.AddOrSetValue("IsDynamic", true); actDesp.Resources.Add(GetClientActivityMatrixResourceDescriptor()); processDesp.Activities.Add(actDesp); WfClientTransitionDescriptor transitionToN1 = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, "N1") { Key = "L1" }; processDesp.InitialActivity.ToTransitions.Add(transitionToN1); WfClientTransitionDescriptor transitionToCompleted = new WfClientTransitionDescriptor(actDesp.Key, processDesp.CompletedActivity.Key) { Key = "L2" }; processDesp.Activities["N1"].ToTransitions.Add(transitionToCompleted); return(processDesp); }
public void ExportProcessDescriptorsTest() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); Stream stream = WfClientProcessDescriptorServiceProxy.Instance.ExportProcessDescriptors(processDesp.Key); Assert.IsTrue(stream.Length > 0); }
/// <summary> /// 创建一个有4个节点的流程,并且保存它。开始点有两条出线,根据Amount是否大于等于5000来判断。 /// </summary> /// <returns></returns> public static WfClientProcessDescriptor PreapreProcessWithConditionLines() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateClientProcessWithConditionLines(); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); return(processDesp); }
/// <summary> /// 创建一个简单流程并且保存一个流程定义 /// </summary> /// <returns></returns> public static WfClientProcessDescriptor PrepareSimpleProcess() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithLines(); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); return(processDesp); }
/// <summary> /// 创建一个简单流程,并且启动该流程 /// </summary> /// <returns></returns> public static WfClientProcessInfo PrepareSimpleProcessInstance() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); return(WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams)); }
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); }
/// <summary> /// 创建一个有4个节点的流程,并且保存它。开始点有两条出线,根据Amount是否大于等于5000来判断。 /// </summary> /// <returns></returns> public static WfClientProcessInfo PreapreProcessWithConditionLinesInstance() { WfClientProcessDescriptor processDesp = OperationHelper.PreapreProcessWithConditionLines(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); clientStartupParams.ApplicationRuntimeParameters["Amount"] = 10000; clientStartupParams.ProcessContext["Context"] = "This is a context"; return(WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams)); }
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 StartWorkflow() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); processInfo.Output(); AssertStartedProcess(processInfo, clientStartupParams); }
public void WfClientDynamicProcessBuilderInstanceTest() { WfCreateClientDynamicProcessParams createParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams(); WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(createParams); WfClientProcessDescriptor client = builder.Build(createParams.Key, createParams.Name); IWfProcess process = ProcessHelper.CreateProcessInstance(client); Assert.IsTrue(process.Activities.Count > client.Activities.Count); }
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> /// <returns></returns> public static WfClientProcessDescriptor CreateSimpleClientProcessWithLines() { WfClientProcessDescriptor processDesp = CreateSimpleClientProcessWithoutLines(); WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, processDesp.CompletedActivity.Key); transition.Key = "L1"; processDesp.InitialActivity.ToTransitions.Add(transition); 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 override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer) { Dictionary <string, object> dictionary = (Dictionary <string, object>)base.Serialize(obj, serializer); WfClientProcessDescriptor processDesp = (WfClientProcessDescriptor)obj; dictionary.Add("activities", processDesp.Activities); dictionary.Add("variables", processDesp.Variables); dictionary.Add("relativeLinks", processDesp.RelativeLinks); dictionary.Add("cancelEventReceivers", processDesp.CancelEventReceivers); return(dictionary); }
public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfClientProcessDescriptor processDesp = (WfClientProcessDescriptor)base.Deserialize(dictionary, type, serializer); JSONSerializerExecute.FillDeserializedCollection <WfClientActivityDescriptor>(dictionary.GetValue("activities", (object)null), processDesp.Activities); processDesp.NormalizeAllTransitions(); JSONSerializerExecute.FillDeserializedCollection <WfClientVariableDescriptor>(dictionary.GetValue("variables", (object)null), processDesp.Variables); JSONSerializerExecute.FillDeserializedCollection <WfClientRelativeLinkDescriptor>(dictionary.GetValue("relativeLinks", (object)null), processDesp.RelativeLinks); JSONSerializerExecute.FillDeserializedCollection <WfClientResourceDescriptor>(dictionary.GetValue("cancelEventReceivers", (object)null), processDesp.CancelEventReceivers); return(processDesp); }
public static WfClientProcessInfo PrepareProcessWithWithActivityMatrixResourceInstance() { WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateClientProcessWithActivityMatrixResourceDescriptor(); WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); clientStartupParams.ApplicationRuntimeParameters["CostCenter"] = "1001"; clientStartupParams.ApplicationRuntimeParameters["PayMethod"] = "1"; clientStartupParams.ApplicationRuntimeParameters["Age"] = 30; return(WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams)); }
public void ExsitsProcessKeyTest() { WfClientProcessDescriptor descriptor = OperationHelper.PrepareSimpleProcess(); string key = descriptor.Key; string key2 = Guid.NewGuid().ToString(); bool istrue = WfClientProcessDescriptorServiceProxy.Instance.ExsitsProcessKey(key); Assert.AreEqual(true, istrue); istrue = WfClientProcessDescriptorServiceProxy.Instance.ExsitsProcessKey(key2); Assert.AreEqual(false, istrue); OperationHelper.ClearProcessDescriptorSqlServerData(key); }
public void ImportProcessDescriptorTest() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); Stream stream = WfClientProcessDescriptorServiceProxy.Instance.ExportProcessDescriptors(processDesp.Key); stream.Seek(0, SeekOrigin.Begin); string info = WfClientProcessDescriptorServiceProxy.Instance.ImportProcessDescriptors(stream); Console.WriteLine(info); Assert.IsTrue(info.IndexOf("1个流程模板文件") >= 0); }
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 SaveDescriptor() { TenantContext.Current.TenantCode = "Test1"; TenantContext.Current.Enabled = true; GenericTicketTokenContainer tokenContainer = new GenericTicketTokenContainer(); InitPrincipal("Requestor"); WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessDescriptor loadedProcessDesp = WfClientProcessDescriptorServiceProxy.Instance.LoadDescriptor(processDesp.Key); processDesp.AssertProcessDescriptor(loadedProcessDesp); }