public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer) { WfClientProcessStartupParams startupParams = new WfClientProcessStartupParams(); startupParams.AutoStartInitialActivity = dictionary.GetValue("autoStartInitialActivity", true); startupParams.AutoCommit = dictionary.GetValue("autoCommit", false); startupParams.CheckStartProcessUserPermission = dictionary.GetValue("checkStartProcessUserPermission", true); startupParams.DefaultTaskTitle = dictionary.GetValue("defaultTaskTitle", string.Empty); startupParams.DefaultUrl = dictionary.GetValue("defaultUrl", string.Empty); startupParams.ProcessDescriptorKey = dictionary.GetValue("processDescriptorKey", string.Empty); startupParams.RelativeID = dictionary.GetValue("relativeID", string.Empty); startupParams.RelativeURL = dictionary.GetValue("relativeURL", string.Empty); startupParams.ResourceID = dictionary.GetValue("resourceID", string.Empty); startupParams.RuntimeProcessName = dictionary.GetValue("runtimeProcessName", string.Empty); startupParams.AutoPersist = dictionary.GetValue("autoPersist", true); startupParams.Creator = JSONSerializerExecute.Deserialize <WfClientUser>(dictionary.GetValue("creator", (object)null)); startupParams.Department = JSONSerializerExecute.Deserialize <WfClientOrganization>(dictionary.GetValue("department", (object)null)); startupParams.Opinion = JSONSerializerExecute.Deserialize <WfClientOpinion>(dictionary.GetValue("opinion", (object)null)); JSONSerializerExecute.FillDeserializedCollection(dictionary.GetValue("assignees", (object)null), startupParams.Assignees); JSONSerializerExecute.FillDeserializedDictionary(dictionary, "applicationRuntimeParameters", startupParams.ApplicationRuntimeParameters); JSONSerializerExecute.FillDeserializedDictionary(dictionary, "processContext", startupParams.ProcessContext); return(startupParams); }
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 WfClientProcessStartupParams ServerToClient(WfProcessStartupParams server, ref WfClientProcessStartupParams client) { server.NullCheck("server"); if (client == null) { client = new WfClientProcessStartupParams(); } if (server.ProcessDescriptor != null) { client.ProcessDescriptorKey = server.ProcessDescriptor.Key; } WfClientDictionaryConverter.Instance.ServerToClient(server.ApplicationRuntimeParameters, client.ApplicationRuntimeParameters); WfClientDictionaryConverter.Instance.ServerToClient(server.OverridableInitialActivityProperties, client.OverridableInitialActivityProperties); client.AutoCommit = server.AutoCommit; client.AutoStartInitialActivity = server.AutoStartInitialActivity; client.CheckStartProcessUserPermission = server.CheckStartProcessUserPermission; client.DefaultTaskTitle = server.DefaultTaskTitle; client.DefaultUrl = server.DefaultUrl; client.RelativeID = server.RelativeID; client.RelativeURL = server.RelativeURL; client.ResourceID = server.ResourceID; client.RuntimeProcessName = server.RuntimeProcessName; client.Creator = (WfClientUser)server.Creator.ToClientOguObject(); client.Department = (WfClientOrganization)server.Department.ToClientOguObject(); WfClientAssigneeCollectionConverter.Instance.ServerToClient(server.Assignees, client.Assignees); return(client); }
public static WfClientProcessStartupParams PrepareClientProcessStartupParams(string processKey) { WfClientProcessStartupParams startupParams = new WfClientProcessStartupParams(); startupParams.ProcessDescriptorKey = processKey; startupParams.AutoCommit = true; startupParams.AutoStartInitialActivity = true; startupParams.CheckStartProcessUserPermission = true; startupParams.DefaultTaskTitle = "Please approve"; startupParams.DefaultUrl = "http://www.sina.com";; startupParams.Creator = Consts.Users["Requestor"]; startupParams.Department = Consts.Departments["RequestorOrg"]; startupParams.RelativeID = UuidHelper.NewUuidString(); startupParams.RelativeURL = "http://www.baidu.com"; startupParams.ResourceID = UuidHelper.NewUuidString(); startupParams.RuntimeProcessName = "Test Process"; startupParams.ApplicationRuntimeParameters["Amount"] = 1000; startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001"; startupParams.ProcessContext["Context"] = "This is a context"; startupParams.Assignees.Add(Consts.Users["Requestor"]); return(startupParams); }
public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer) { Dictionary <string, object> dictionary = new Dictionary <string, object>(); WfClientProcessStartupParams startupParams = (WfClientProcessStartupParams)obj; dictionary.AddNonDefaultValue("autoStartInitialActivity", startupParams.AutoStartInitialActivity); dictionary.AddNonDefaultValue("autoCommit", startupParams.AutoCommit); dictionary.AddNonDefaultValue("checkStartProcessUserPermission", startupParams.CheckStartProcessUserPermission); dictionary.AddNonDefaultValue("defaultTaskTitle", startupParams.DefaultTaskTitle); dictionary.AddNonDefaultValue("defaultUrl", startupParams.DefaultUrl); dictionary.AddNonDefaultValue("processDescriptorKey", startupParams.ProcessDescriptorKey); dictionary.AddNonDefaultValue("relativeID", startupParams.RelativeID); dictionary.AddNonDefaultValue("relativeURL", startupParams.RelativeURL); dictionary.AddNonDefaultValue("resourceID", startupParams.ResourceID); dictionary.AddNonDefaultValue("runtimeProcessName", startupParams.RuntimeProcessName); dictionary.AddNonDefaultValue("creator", startupParams.Creator); dictionary.AddNonDefaultValue("department", startupParams.Department); dictionary.AddNonDefaultValue("autoPersist", startupParams.AutoPersist); dictionary["assignees"] = startupParams.Assignees; dictionary["applicationRuntimeParameters"] = startupParams.ApplicationRuntimeParameters; dictionary["processContext"] = startupParams.ProcessContext; dictionary.AddNonDefaultValue("opinion", startupParams.Opinion); return(dictionary); }
public WfProcessStartupParams ClientToServer(WfClientProcessStartupParams client, ref WfProcessStartupParams server) { client.NullCheck("client"); if (server == null) { server = new WfProcessStartupParams(); } if (this._TestMode == false) { server.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(client.ProcessDescriptorKey); } WfClientDictionaryConverter.Instance.ClientToServer(client.ApplicationRuntimeParameters, server.ApplicationRuntimeParameters); WfClientDictionaryConverter.Instance.ClientToServer(client.OverridableInitialActivityProperties, server.OverridableInitialActivityProperties); server.AutoCommit = client.AutoCommit; server.AutoStartInitialActivity = client.AutoStartInitialActivity; server.CheckStartProcessUserPermission = client.CheckStartProcessUserPermission; server.DefaultTaskTitle = client.DefaultTaskTitle; server.DefaultUrl = client.DefaultUrl; server.RelativeID = client.RelativeID; server.RelativeURL = client.RelativeURL; server.ResourceID = client.ResourceID; server.RuntimeProcessName = client.RuntimeProcessName; server.Creator = (IUser)client.Creator.ToOguObject(); server.Department = (IOrganization)client.Department.ToOguObject(); WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees); return(server); }
/// <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 StandardStartupParamsClientToServer() { WfClientProcessStartupParams client = ProcessRuntimeHelper.PrepareClientProcessStartupParams(UuidHelper.NewUuidString()); WfProcessStartupParams server = null; WfClientProcessStartupParamsConverter.TestInstance.ClientToServer(client, ref server); client.AreSame(server); }
public void StartWorkflow() { WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess(); WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key); WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams); processInfo.Output(); AssertStartedProcess(processInfo, clientStartupParams); }
/// <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 WfClientProcessInfo StartWorkflow(WfClientProcessStartupParams clientStartupParams) { if (clientStartupParams == null) { throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程的启动参数不能为空")); } //设置标准参数,优先使用外部参数 if (!clientStartupParams.ApplicationRuntimeParameters.ContainsKey("ProcessRequestor")) { clientStartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = clientStartupParams.Creator; } OperationContext.Current.FillContextToOguServiceContext(); WfProcessStartupParams startupParams = null; WfClientProcessStartupParamsConverter.Instance.ClientToServer(clientStartupParams, ref startupParams); IWfProcess process = null; DoPrincipalAction(startupParams.Creator, () => { WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams); executor.AfterModifyWorkflow += (dataContext => { dataContext.CurrentProcess.GenerateCandidatesFromResources(); clientStartupParams.ProcessContext.ForEach(kp => dataContext.CurrentProcess.Context[kp.Key] = kp.Value); WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity( clientStartupParams.Opinion, dataContext.CurrentProcess.CurrentActivity, clientStartupParams.Creator, clientStartupParams.Creator); }); executor.SaveApplicationData += (dataContext) => SaveOpinion(clientStartupParams.Opinion); if (clientStartupParams.AutoPersist) { process = executor.Execute(); } else { process = executor.ExecuteNotPersist(); } }); return(process.ToClientProcessInfo(clientStartupParams.Creator).FillCurrentOpinion(process.CurrentActivity, clientStartupParams.Creator)); }
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 SimpleStartupParamsSerializationTest() { WfClientJsonConverterHelper.Instance.RegisterConverters(); WfClientProcessStartupParams startupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(UuidHelper.NewUuidString()); string data = JSONSerializerExecute.Serialize(startupParams); Console.WriteLine(data); WfClientProcessStartupParams deserializedParams = JSONSerializerExecute.Deserialize <WfClientProcessStartupParams>(data); startupParams.AreSame(deserializedParams); }
public static void AreSame(this WfClientProcessStartupParams expected, WfProcessStartupParams actual) { //Assert.AreEqual(expected.ProcessDescriptorKey, actual.ProcessDescriptorKey); Assert.AreEqual(expected.AutoCommit, actual.AutoCommit); Assert.AreEqual(expected.AutoStartInitialActivity, actual.AutoStartInitialActivity); Assert.AreEqual(expected.CheckStartProcessUserPermission, actual.CheckStartProcessUserPermission); Assert.AreEqual(expected.DefaultTaskTitle, actual.DefaultTaskTitle); Assert.AreEqual(expected.DefaultUrl, actual.DefaultUrl); Assert.AreEqual(expected.RelativeID, actual.RelativeID); Assert.AreEqual(expected.RelativeURL, actual.RelativeURL); Assert.AreEqual(expected.ResourceID, actual.ResourceID); Assert.AreEqual(expected.RuntimeProcessName, actual.RuntimeProcessName); expected.Assignees.AreSame(actual.Assignees); expected.Creator.AreSame(actual.Creator); expected.Department.AreSame(actual.Department); expected.ApplicationRuntimeParameters.AreSame(actual.ApplicationRuntimeParameters); }
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 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); }
/// <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 StartWorkflowAndMoveTo(WfClientProcessStartupParams clientStartupParams, WfClientTransferParams clientTransferParams, WfClientRuntimeContext runtimeContext) { return(this.SingleCall(action => action.StartWorkflowAndMoveTo(clientStartupParams, clientTransferParams, runtimeContext))); }
public WfClientProcessInfo StartWorkflow(WfClientProcessStartupParams clientStartupParams) { return(this.SingleCall(action => action.StartWorkflow(clientStartupParams))); }