public void ClearTenantProcessInstanceDataTest()
        {
            WfClientProcessQueryCondition condition = new WfClientProcessQueryCondition();

            condition.BeginStartTime   = DateTime.Now.AddHours(-1);
            condition.EndStartTime     = DateTime.Now.AddHours(1);
            condition.ProcessCreatorID = Consts.Users["Requestor"].ID;

            TenantContext.Current.DoActions("Test2", () =>
            {
                WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance();

                WfClientProcess processLoaded = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(process.ID, Consts.Users["Requestor"]);

                Assert.IsNotNull(processLoaded);

                WfClientProcessRuntimeServiceProxy.Instance.ClearTenantProcessInstanceData("Test2");

                try
                {
                    processLoaded = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(process.ID, Consts.Users["Requestor"]);

                    Assert.Fail("流程已经被删除,加载流程不能成功");
                }
                catch (System.Exception)
                {
                }
            });
        }
        public void InvalidUpdateTagTest()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.GetProcessInfoByID(processInfo.ID, Consts.Users["Requestor"]);

            processInfo.Output();

            runtimeContext.UpdateTag = processInfo.UpdateTag + 1; //Invalid UpdateTag

            bool thrown = false;

            try
            {
                WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext);
            }
            catch (System.Exception ex)
            {
                thrown = true;
                Assert.IsTrue(ex.Message.IndexOf("流程状态已经改变") >= 0);
            }

            Assert.IsTrue(thrown);
        }
        public void MoveToOneStepWithOpinion()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientTransferParams transferParams = new WfClientTransferParams("N2");

            transferParams.Assignees.Add(Consts.Users["CEO"]);

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();

            runtimeContext.Operator = Consts.Users["Requestor"];
            runtimeContext.Opinion  = new WfClientOpinion()
            {
                Content = "我很高兴"
            };

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveTo(processInfo.ID, transferParams, runtimeContext);

            processInfo.Output();

            Assert.AreEqual("N2", processInfo.CurrentActivity.Descriptor.Key);
            Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CEO"].ID));

            WfClientProcessInfo prevProcessInfo = WfClientProcessRuntimeServiceProxy.Instance.GetProcessInfoByActivityID(processInfo.PreviousActivity.ID, runtimeContext.Operator);

            prevProcessInfo.Output();

            Assert.IsNotNull(prevProcessInfo.CurrentOpinion);

            WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByResourceID(prevProcessInfo.ResourceID);

            Assert.IsTrue(opinions.Count > 0);
        }
        public void StartWorkflowWithoutPersist()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            clientStartupParams.AutoPersist = false;

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams);

            processInfo.Output();
            AssertStartedProcess(processInfo, clientStartupParams);

            try
            {
                WfClientProcess process = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByID(processInfo.ID, Consts.Users["Requestor"]);
            }
            catch (WfClientChannelException ex)
            {
                if (ex.Message.IndexOf("不能找到") == -1)
                {
                    throw ex;
                }
            }
        }
Example #5
0
        public static void Output(this WfClientProcessInfo processInfo)
        {
            Console.WriteLine("Process ID = {0}", processInfo.ID);
            Console.WriteLine("Process Status = {0}", processInfo.Status);
            Console.WriteLine("UpdateTags = {0}", processInfo.UpdateTag);

            processInfo.Creator.Output("Process Creator");

            processInfo.CurrentActivity.Output("Current Activity");
            processInfo.NextActivities.Output("Next Activities");
            processInfo.MainStreamActivityDescriptors.Output("MainStreamActivities");

            if (processInfo.AuthorizationInfo != null)
            {
                Console.WriteLine("InMoveToMode: {0}, IsProcessAdmin: {1}, IsProcessViewer: {2}, IsInAcl: {3}",
                                  processInfo.AuthorizationInfo.InMoveToMode,
                                  processInfo.AuthorizationInfo.IsProcessAdmin,
                                  processInfo.AuthorizationInfo.IsProcessViewer,
                                  processInfo.AuthorizationInfo.IsInAcl);
            }

            if (processInfo.CurrentOpinion != null)
            {
                Console.WriteLine("Opinion: {0}, User: {1}", processInfo.CurrentOpinion.Content, processInfo.CurrentOpinion.IssuePersonName);
            }
        }
        public void SaveProcessWithOpinionTest()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();

            runtimeContext.ApplicationRuntimeParameters["Amount"] = 1000;
            runtimeContext.Operator = Consts.Users["Requestor"];
            runtimeContext.ProcessContext["Context"] = "This is process context";
            runtimeContext.Opinion = new WfClientOpinion()
            {
                Content = "我很高兴"
            };

            runtimeContext.AutoCalculate = true;

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.SaveProcess(processInfo.ID, runtimeContext);
            processInfo.Output();

            Assert.AreEqual("N2", processInfo.NextActivities[0].Activity.DescriptorKey);
            Assert.IsNotNull(processInfo.CurrentOpinion);

            WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByProcessID(processInfo.ID);

            Assert.IsTrue(opinions.Count > 0);
        }
        private static void ServerTargetsToClient(IWfActivity server, WfClientProcessInfo client)
        {
            WfClientActivity ccActivity = client.CurrentActivity;

            foreach (WfTransitionDescriptor st in server.Descriptor.ToTransitions.GetAllCanTransitTransitions(true))
            {
                WfClientActivity targetActivity = null;

                if (st.Key != ccActivity.Descriptor.Key)
                {
                    WfClientActivityConverter.Instance.ServerToClient(st.ToActivity.Instance, ref targetActivity);
                }
                else
                {
                    targetActivity = ccActivity;
                }

                if (targetActivity != null)
                {
                    WfClientTransitionDescriptor ct = null;

                    WfClientTransitionDescriptorConverter.Instance.ServerToClient(st, ref ct);

                    WfClientNextActivity cnat = new WfClientNextActivity();

                    cnat.Transition = ct;
                    cnat.Activity   = targetActivity;

                    client.NextActivities.Add(cnat);
                }
            }
        }
        public void ProcessWithWithActivityMatrixResourceTest()
        {
            WfClientProcessInfo processInfo = OperationHelper.PrepareProcessWithWithActivityMatrixResourceInstance();

            Assert.IsTrue(processInfo.NextActivities.Count > 0);
            Assert.IsTrue(processInfo.NextActivities[0].Activity.Candidates.Count > 0);
            Assert.AreEqual(Consts.Users["Approver1"].ID, processInfo.NextActivities[0].Activity.Candidates[0].User.ID);
        }
        public void GetProcessByAcvtivityIDTest()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();
            WfClientProcess     process     = WfClientProcessRuntimeServiceProxy.Instance.GetProcessByActivityID(processInfo.CurrentActivity.ID, Consts.Users["Requestor"]);

            Assert.AreEqual(processInfo.ID, processInfo.ID);
            Assert.AreEqual(processInfo.Status, processInfo.Status);

            Assert.AreEqual(processInfo.CurrentActivity.DescriptorKey, process.CurrentActivity.Descriptor.Key);
        }
        public void StartWorkflow()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams);

            processInfo.Output();
            AssertStartedProcess(processInfo, clientStartupParams);
        }
Example #11
0
        public override object Deserialize(IDictionary <string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            WfClientProcessInfo processInfo = (WfClientProcessInfo)base.Deserialize(dictionary, type, serializer);

            processInfo.CurrentActivity  = JSONSerializerExecute.Deserialize <WfClientActivity>(dictionary.GetValue("currentActivity", (WfClientActivity)null));
            processInfo.PreviousActivity = JSONSerializerExecute.Deserialize <WfClientActivity>(dictionary.GetValue("previousActivity", (WfClientActivity)null));

            JSONSerializerExecute.FillDeserializedCollection(dictionary.GetValue("nextActivities", (object)null), processInfo.NextActivities);

            return(processInfo);
        }
        public void GetProcessUrlFromUserTaskTest()
        {
            WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance();

            string url = WfClientProcessRuntimeServiceProxy.Instance.GetProcessUrl(process.ID);

            Console.WriteLine(url);

            Assert.IsTrue(url.IsNotEmpty());
            Assert.IsTrue(url.IndexOf("processID") > 0);
            Assert.IsTrue(url.IndexOf("activityID") < 0);
        }
Example #13
0
        public override IDictionary <string, object> Serialize(object obj, JavaScriptSerializer serializer)
        {
            IDictionary <string, object> dictionary = base.Serialize(obj, serializer);

            WfClientProcessInfo processInfo = (WfClientProcessInfo)obj;

            dictionary.AddNonDefaultValue("currentActivity", processInfo.CurrentActivity);
            dictionary.AddNonDefaultValue("previousActivity", processInfo.PreviousActivity);
            dictionary.AddNonDefaultValue("nextActivities", processInfo.NextActivities);

            return(dictionary);
        }
        public void PauseProcess()
        {
            WfClientProcessInfo    processInfo    = OperationHelper.PreapreProcessWithConditionLinesInstance();
            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.Pause(processInfo.ID, runtimeContext);

            processInfo.Output();

            Assert.AreEqual(WfClientProcessStatus.Paused, processInfo.Status);
        }
        public void WithdrawProcess()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.Withdraw(processInfo.ID, runtimeContext);

            processInfo.Output();

            Assert.AreEqual("Start", processInfo.CurrentActivity.Descriptor.Key);
        }
        public void ReplaceAssignees()
        {
            WfClientProcessInfo    processInfo    = OperationHelper.PreapreProcessWithConditionLinesInstance();
            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.ReplaceAssignees(
                processInfo.CurrentActivity.ID, null, new WfClientUser[] { Consts.Users["CEO"] }, runtimeContext);

            processInfo.Output();

            Assert.AreEqual(Consts.Users["CEO"].ID, processInfo.CurrentActivity.Assignees[0].User.ID);
        }
        public void QueryProcessesTest()
        {
            WfClientProcessQueryCondition condition = new WfClientProcessQueryCondition();

            condition.BeginStartTime   = DateTime.Now.AddHours(-1);
            condition.EndStartTime     = DateTime.Now.AddHours(1);
            condition.ProcessCreatorID = Consts.Users["Requestor"].ID;

            WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance();

            WfClientProcessCurrentInfoPageQueryResult result = WfClientProcessRuntimeServiceProxy.Instance.QueryProcesses(condition, 0, 1, string.Empty, -1);

            Assert.IsTrue(result.QueryResult.ContainsKey(process.ID));
        }
Example #18
0
        public static WfClientProcessInfo ToClientProcessInfo(this IWfProcess process, IWfActivity originalActivity, WfClientUser clientUser)
        {
            process.NullCheck("process");

            WfClientProcessInfo clientProcessInfo = null;

            PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("ToClientProcessInfo", () =>
            {
                WfClientProcessInfoConverter.Instance.ServerToClient(process, ref clientProcessInfo);

                clientProcessInfo.AuthorizationInfo = WfClientProcessInfoBaseConverter.Instance.GetAuthorizationInfo(process, originalActivity, clientUser);
            });

            return(clientProcessInfo);
        }
        public void MoveToNextDefaultActivity()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();

            runtimeContext.ApplicationRuntimeParameters["Amount"] = 20000;
            runtimeContext.Operator = Consts.Users["Requestor"];

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext);
            processInfo.Output();

            Assert.AreEqual("N1", processInfo.CurrentActivity.Descriptor.Key);
            Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CFO"].ID));
        }
Example #20
0
        public void QueryUserOperationLogByProcessIDTest()
        {
            WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance();

            WfClientUserOperationLogPageQueryResult result =
                WfClientDataSourceServiceProxy.Instance.QueryUserOperationLogByProcessID(process.ID, 0, 1, string.Empty, -1);

            Assert.IsTrue(result.QueryResult.Count > 0);

            Assert.AreEqual(process.ID, result.QueryResult[0].ProcessID);

            WfClientUserOperationLog log = WfClientDataSourceServiceProxy.Instance.GetUserOperationLogByID(result.QueryResult[0].ID);

            Assert.AreEqual(result.QueryResult[0].ID, log.ID);
        }
        public void SaveProcessTest()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();

            runtimeContext.ApplicationRuntimeParameters["Amount"] = 1000;
            runtimeContext.Operator = Consts.Users["Requestor"];
            runtimeContext.ProcessContext["Context"] = "This is process context";
            runtimeContext.AutoCalculate             = true;

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.SaveProcess(processInfo.ID, runtimeContext);
            processInfo.Output();

            Assert.AreEqual("N2", processInfo.NextActivities[0].Activity.DescriptorKey);
        }
        public void GetProcessUrlFromUserAccomplishedTaskTest()
        {
            WfClientProcessInfo process = OperationHelper.PrepareSimpleProcessInstance();

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, new WfClientRuntimeContext());

            Assert.AreEqual(WfClientProcessStatus.Completed, processInfo.Status);

            string url = WfClientProcessRuntimeServiceProxy.Instance.GetProcessUrl(process.ID);

            Console.WriteLine(url);

            Assert.IsTrue(url.IsNotEmpty());
            Assert.IsTrue(url.IndexOf("processID") > 0);
            Assert.IsTrue(url.IndexOf("activityID") < 0);
        }
        public void QueryBranchProcessesTest()
        {
            //建立流程
            int pageSize = 1;

            WfClientProcessInfo process = OperationHelper.PrepareBranchProcesses();

            Assert.IsTrue(process.MainStreamActivityDescriptors["N1"].BranchProcessGroupsCount > 0);

            string id = process.CurrentActivity.ID;
            //获取子流程
            WfClientProcessCurrentInfoPageQueryResult result = WfClientProcessRuntimeServiceProxy.Instance.QueryBranchProcesses(id, string.Empty, 0, pageSize, string.Empty, -1);

            //检查
            //分页是否正确,分支流程个数是否正确
            Assert.AreEqual(pageSize, result.QueryResult.Count());
            Assert.AreEqual(process.CurrentActivity.Assignees.Count, result.TotalCount);
        }
Example #24
0
        public static WfClientProcessInfo PrepareBranchProcesses()
        {
            WfClientProcessDescriptor processDesp = ProcessDescriptorHelper.CreateSimpleClientProcessWithoutLines();

            //增加子节点
            WfClientActivityDescriptor branchActDesp = new WfClientActivityDescriptor(WfClientActivityType.NormalActivity);

            branchActDesp.Key  = "N1";
            branchActDesp.Name = "CFO";

            branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcesses", true);
            branchActDesp.Properties.AddOrSetValue("AutoStartBranchApprovalProcess", true);
            branchActDesp.Properties.AddOrSetValue("AutoStartBranchProcessExecuteSequence", 0);

            //增加审批人
            branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Requestor"]));
            branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["Approver1"]));
            branchActDesp.Resources.Add(new WfClientUserResourceDescriptor(Consts.Users["CEO"]));

            processDesp.Activities.Add(branchActDesp);

            //线
            WfClientTransitionDescriptor transition = new WfClientTransitionDescriptor(processDesp.InitialActivity.Key, branchActDesp.Key);

            transition.Key = "L1";
            processDesp.InitialActivity.ToTransitions.Add(transition);

            WfClientTransitionDescriptor transition2 = new WfClientTransitionDescriptor(branchActDesp.Key, processDesp.CompletedActivity.Key);

            transition2.Key = "L2";
            branchActDesp.ToTransitions.Add(transition2);

            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(processDesp);

            //启动参数
            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            //流程实例
            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();
            WfClientProcessInfo    process        = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflow(clientStartupParams);

            return(WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(process.ID, runtimeContext));
        }
        public void MoveToOneStep()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientTransferParams transferParams = new WfClientTransferParams("N2");

            transferParams.Assignees.Add(Consts.Users["CEO"]);

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();

            runtimeContext.Operator = Consts.Users["Requestor"];

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveTo(processInfo.ID, transferParams, runtimeContext);

            processInfo.Output();

            Assert.AreEqual("N2", processInfo.CurrentActivity.Descriptor.Key);
            Assert.IsTrue(processInfo.CurrentActivity.Assignees.Contains(Consts.Users["CEO"].ID));
        }
        public void GetSimpleApplicationRuntimeParameterTest()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext();

            runtimeContext.ApplicationRuntimeParameters["Amount"]           = 1000;
            runtimeContext.ApplicationRuntimeParameters["ProcessRequestor"] = Consts.Users["Requestor"];
            runtimeContext.Operator = Consts.Users["Requestor"];
            runtimeContext.ProcessContext["Context"] = "This is process context";
            runtimeContext.AutoCalculate             = true;

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.UpdateRuntimeParameters(processInfo.ID, runtimeContext);
            processInfo.Output();

            int data = WfClientProcessRuntimeServiceProxy.Instance.GetApplicationRuntimeParameters(processInfo.ID, "Amount", WfClientProbeApplicationRuntimeParameterMode.Auto, 0);

            Console.WriteLine(data);
        }
Example #27
0
        public void StartWorkflowAndMoveToNext()
        {
            WfClientProcessDescriptor processDesp = OperationHelper.PrepareSimpleProcess();

            WfClientProcessStartupParams clientStartupParams = ProcessRuntimeHelper.PrepareClientProcessStartupParams(processDesp.Key);

            clientStartupParams.Opinion = new WfClientOpinion()
            {
                Content = "我启动流程很高兴"
            };

            WfClientProcessInfo processInfo = WfClientProcessRuntimeServiceProxy.Instance.StartWorkflowAndMoveTo(clientStartupParams, null, null);

            processInfo.Output();

            WfClientOpinionCollection opinions = WfClientProcessRuntimeServiceProxy.Instance.GetOpinionsByResourceID(processInfo.ResourceID);

            Assert.IsTrue(opinions.Count > 0);
            Assert.AreNotEqual(processInfo.CurrentActivity.ID, opinions[0].ActivityID);
        }
        public void CancelProcessWithOpinion()
        {
            WfClientProcessInfo processInfo = OperationHelper.PreapreProcessWithConditionLinesInstance();

            WfClientRuntimeContext runtimeContext = new WfClientRuntimeContext(Consts.Users["Requestor"]);

            runtimeContext.Opinion = new WfClientOpinion()
            {
                Content = "我很高兴"
            };

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.MoveToNextDefaultActivity(processInfo.ID, runtimeContext);

            processInfo = WfClientProcessRuntimeServiceProxy.Instance.Cancel(processInfo.ID, runtimeContext);

            processInfo.Output();

            Assert.AreEqual(WfClientProcessStatus.Aborted, processInfo.Status);
            Assert.IsNotNull(processInfo.CurrentOpinion);
        }
        /// <summary>
        /// 检查
        /// </summary>
        /// <param name="processInfo"></param>
        /// <param name="clientStartupParams"></param>
        private void AssertStartedProcess(WfClientProcessInfo processInfo, WfClientProcessStartupParams clientStartupParams)
        {
            Assert.IsTrue(processInfo.ID.IsNotEmpty());
            Assert.AreEqual(clientStartupParams.ProcessDescriptorKey, processInfo.ProcessDescriptorKey);
            Assert.AreEqual(WfClientProcessStatus.Running, processInfo.Status);
            Assert.IsNotNull(processInfo.CurrentActivity);

            processInfo.Creator.AreSame(clientStartupParams.Assignees[0].User);

            Assert.IsNotNull(processInfo.CurrentActivity);
            processInfo.CurrentActivity.Assignees.AreSame(clientStartupParams.Assignees, false);

            Assert.IsNotNull(processInfo.CurrentActivity.Descriptor);

            Assert.IsTrue(processInfo.NextActivities.Count > 0);
            Assert.IsNotNull(processInfo.NextActivities[0].Transition);
            Assert.IsNotNull(processInfo.NextActivities[0].Activity);

            processInfo.ApplicationRuntimeParameters.AssertContains(clientStartupParams.ApplicationRuntimeParameters);
            processInfo.ProcessContext.AssertContains(clientStartupParams.ProcessContext);
        }
        public WfClientProcessInfo ServerToClient(IWfProcess process, ref WfClientProcessInfo client)
        {
            process.NullCheck("process");

            if (client == null)
            {
                client = new WfClientProcessInfo();
            }

            WfClientProcessInfoBaseConverter.Instance.ServerToClient(process, client);

            WfClientActivity currentActivity = null;

            WfClientActivityConverter.Instance.ServerToClient(process.CurrentActivity, ref currentActivity);

            client.CurrentActivity = currentActivity;

            IWfActivity previousServerActivity = FindPreviousActivity(process.CurrentActivity);

            if (previousServerActivity != null)
            {
                WfClientActivity previousActivity = null;

                WfClientActivityConverter.Instance.ServerToClient(previousServerActivity, ref previousActivity);

                client.PreviousActivity = previousActivity;
            }

            client.NextActivities.Clear();

            if (client.CurrentActivity != null)
            {
                ServerTargetsToClient(process.CurrentActivity, client);
            }

            return(client);
        }
        /// <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);
        }