コード例 #1
0
        public void DispatchWithdrawProcessTaskTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithBranchTemplate();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            SysTaskAdapter.Instance.ClearAll();

            DispatchWithdrawProcessTask withdrawTask = DispatchWithdrawProcessTask.SendTask(string.Empty, process.ID, true);

            //直接发布一个撤回的任务流程
            SysTaskCommon.ExecuteAndAssertTask(withdrawTask);

            int executedTaskCount = SysTaskCommon.ExecuteAllTasks();

            WfRuntime.ClearCache();
            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Running, process.Status);
            Assert.AreEqual(WfActivityType.InitialActivity, process.CurrentActivity.Descriptor.ActivityType);

            AssertAllBranchesStatus(WfProcessStatus.Aborted, process);
        }
コード例 #2
0
        public void ChangeLeaderToApproverThenChangeToLeaderSecretaryTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithSecretary();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            ChangeActivityResource(process.Descriptor.Activities["NormalActivity"], (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object);

            WfRuntime.DecorateProcess(process);

            Console.WriteLine("没有秘书的");
            OutputProcessCandidates(process);
            ReturnExecutorTestHelper.OutputMainStream(process);

            ChangeActivityResource(process.Descriptor.Activities["NormalActivity"], (IUser)OguObjectSettings.GetConfig().Objects["ceo"].Object);

            WfRuntime.DecorateProcess(process);

            Console.WriteLine("有秘书的");
            OutputProcessCandidates(process);
            ReturnExecutorTestHelper.OutputMainStream(process);

            Assert.AreEqual(5, processDesp.Activities.Count);
            Assert.AreEqual(5, process.MainStream.Activities.Count);
        }
コード例 #3
0
        public void ParallelBranchActivitySecretaryTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithBranchTemplate();

            IWfBranchProcessTemplateDescriptor template = processDesp.Activities["NormalActivity"].BranchProcessTemplates["Consign"];

            template.Resources.Clear();
            template.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["ceo"].Object));

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            WfProcessTestCommon.MoveToNextDefaultActivity(process);

            IWfProcess consignBranchProcess    = process.Activities.FindActivityByDescriptorKey("NormalActivity").BranchProcessGroups["Consign"].Branches.FirstOrDefault();
            IWfProcess distributeBranchProcess = process.Activities.FindActivityByDescriptorKey("NormalActivity").BranchProcessGroups["Distribute"].Branches.FirstOrDefault();

            Console.WriteLine("Consign Process");
            OutputProcessCandidates(consignBranchProcess);
            ReturnExecutorTestHelper.OutputMainStream(consignBranchProcess);

            Console.WriteLine("");

            Console.WriteLine("Distribute Process");
            OutputProcessCandidates(distributeBranchProcess);
            ReturnExecutorTestHelper.OutputMainStream(distributeBranchProcess);

            Assert.AreEqual(4, consignBranchProcess.Activities.Count);
            Assert.AreEqual(2, distributeBranchProcess.Activities.Count);

            Assert.AreEqual(4, consignBranchProcess.MainStream.Activities.Count);
            Assert.AreEqual(2, distributeBranchProcess.MainStream.Activities.Count);
        }
コード例 #4
0
        public void ExpenseProcessSerializationTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.LoadProcessDescriptorFromFile("Expense.xml");

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            process.ApplicationRuntimeParameters["Amount"] = 500;

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfActivityDescriptor currentActDesp = process.CurrentActivity.Descriptor;

            ToTransitionsDescriptorCollection transitions = currentActDesp.ToTransitions;

            foreach (string key in transitions.GetAllKeys())
            {
                Assert.IsTrue(key.IsNotEmpty());

                IWfTransitionDescriptor transition = transitions[key];

                Assert.AreEqual(key, transition.Key);
            }
        }
コード例 #5
0
        public void PersistProcessWithTenantCode()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            TenantContext.Current.TenantCode = "1001";
            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单的带TenantCode的流程");
        }
コード例 #6
0
        public void ReturnTwiceTest()
        {
            IWfActivity activityD = ReturnExecutorTestHelper.PrepareAndMoveToSpecialActivity();

            Assert.AreEqual("D", activityD.Descriptor.Key);
            ReturnExecutorTestHelper.OutputMainStream(activityD.Process);
            ReturnExecutorTestHelper.OutputEveryActivities(activityD.Process);

            //第一次退回
            ReturnExecutorTestHelper.ExecuteReturnOperation(activityD, "A");

            Console.WriteLine("第一次退回后");
            ReturnExecutorTestHelper.OutputMainStream(activityD.Process);
            ReturnExecutorTestHelper.OutputEveryActivities(activityD.Process);

            WfProcessTestCommon.MoveToNextDefaultActivity(activityD.Process);   //B1
            WfProcessTestCommon.MoveToNextDefaultActivity(activityD.Process);   //C1
            WfProcessTestCommon.MoveToNextDefaultActivity(activityD.Process);   //D1

            Assert.AreEqual("D", activityD.Process.CurrentActivity.Descriptor.AssociatedActivityKey);

            //在B的出线C和E之间选择E
            activityD.Process.ApplicationRuntimeParameters["IsCLine"] = false;

            //第二次退回
            ReturnExecutorTestHelper.ExecuteReturnOperation(activityD, "A");

            Console.WriteLine("第二次退回后");
            ReturnExecutorTestHelper.OutputMainStream(activityD.Process);
            ReturnExecutorTestHelper.OutputEveryActivities(activityD.Process);

            ReturnExecutorTestHelper.ValidateMainStreamActivities(activityD.Process, "A", "B", "E", "D", "F");
        }
コード例 #7
0
        public void AddApproverReturnTest()
        {
            IWfProcessDescriptor processDesp = ReturnExecutorTestHelper.PrepareAddApproverReturnProcessDesp();

            IWfProcess process = ReturnExecutorTestHelper.StartSpecialReturnProcess(processDesp);

            WfProcessTestCommon.MoveToNextDefaultActivity(process);

            Assert.AreEqual("B", process.CurrentActivity.Descriptor.Key);

            WfAddApproverExecutor executor = new WfAddApproverExecutor(process.CurrentActivity, process.CurrentActivity);

            executor.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object);

            executor.ExecuteNotPersist();

            Assert.AreEqual(6, process.Activities.Count, "加签后变成6个活动");

            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //B的衍生点
            Assert.AreEqual("B", process.CurrentActivity.Descriptor.AssociatedActivityKey);

            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //C的衍生点
            Assert.AreEqual("C", process.CurrentActivity.Descriptor.Key);

            ReturnExecutorTestHelper.ExecuteReturnOperation(process.CurrentActivity, "B");

            Assert.AreEqual(8, process.Activities.Count, "退回后8个活动");
            Assert.AreEqual("B", process.CurrentActivity.Descriptor.AssociatedActivityKey);

            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //C的衍生点
            Assert.AreEqual("C", process.CurrentActivity.Descriptor.AssociatedActivityKey);

            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //D
            Assert.AreEqual("D", process.CurrentActivity.Descriptor.Key);
        }
コード例 #8
0
        public void BasicAdminDeleteTransitionWithMainStreamExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            IWfActivityDescriptor targetDesp = process.Descriptor.Activities["NormalActivity"];

            IWfTransitionDescriptor transitionDesp = targetDesp.ToTransitions.FirstOrDefault();

            IWfActivityDescriptor nextActDesp = transitionDesp.ToActivity;

            WfAdminDeleteTransitionExecutor executor = new WfAdminDeleteTransitionExecutor(process.CurrentActivity, process.Descriptor, transitionDesp, true);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfProcessDescriptor processDesp = process.Descriptor;

            targetDesp  = processDesp.Activities[targetDesp.Key];
            nextActDesp = processDesp.CompletedActivity;

            Assert.IsNull(targetDesp.ToTransitions.FirstOrDefault());
            Assert.IsNull(nextActDesp.FromTransitions.FirstOrDefault());

            processDesp = process.MainStream;

            targetDesp  = processDesp.Activities[targetDesp.Key];
            nextActDesp = processDesp.CompletedActivity;

            Assert.IsNull(targetDesp.ToTransitions.FirstOrDefault());
            Assert.IsNull(nextActDesp.FromTransitions.FirstOrDefault());
        }
コード例 #9
0
        public void EditActivityConditionExecutorTest()
        {
            WfConverterHelper.RegisterConverters();

            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessDescriptorWithActivityCondition();

            IWfActivity targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            const string targetCondition = "Amount > 5000000";

            targetActivity.Descriptor.Condition.Expression = targetCondition;

            targetActivity.Descriptor.Properties["Condition"].StringValue = JSONSerializerExecute.Serialize(targetActivity.Descriptor.Condition);

            WfEditActivityPropertiesExecutor executor = new WfEditActivityPropertiesExecutor(process.CurrentActivity, process, targetActivity.Descriptor, true);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            Assert.AreEqual(targetCondition, targetActivity.Descriptor.Condition.Expression);

            IWfActivityDescriptor msActDesp = process.Activities.FindActivityByDescriptorKey("NormalActivity").GetMainStreamActivityDescriptor();

            Console.WriteLine(msActDesp.Condition.Expression);

            Assert.AreEqual(targetCondition, msActDesp.Condition.Expression);
        }
コード例 #10
0
        public void BasicAdminAddActivityWithMainStreamExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            const string targetName = "修改后的名称";

            IWfActivityDescriptor targetDesp = new WfActivityDescriptor(process.Descriptor.FindNotUsedActivityKey(), WfActivityType.NormalActivity);

            targetDesp.Properties.SetValue("Name", targetName);
            process.Descriptor.Activities.Add(targetDesp);

            WfActivityBase.CreateActivityInstance(targetDesp, process);

            WfAdminAddActivityExecutor executor = new WfAdminAddActivityExecutor(process.CurrentActivity, process, null, targetDesp, true);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            targetDesp = process.Descriptor.Activities[targetDesp.Key];

            Assert.IsNotNull(targetDesp);
            Assert.AreEqual(targetName, targetDesp.Properties.GetValue("Name", string.Empty));

            IWfActivityDescriptor msActDesp = targetDesp.Instance.GetMainStreamActivityDescriptor();

            Assert.IsNotNull(msActDesp);
            Assert.AreEqual(process.MainStream, msActDesp.Process);
            Assert.AreEqual(targetName, msActDesp.Properties.GetValue("Name", string.Empty));
        }
コード例 #11
0
        public void BasicAdminDeleteActivityWithMainStreamExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            IWfActivityDescriptor targetDesp = process.Descriptor.Activities["NormalActivity"];

            WfAdminDeleteActivityExecutor executor = new WfAdminDeleteActivityExecutor(process.CurrentActivity, targetDesp, true);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IWfProcessDescriptor processDesp = process.Descriptor;

            targetDesp = processDesp.Activities["NormalActivity"];

            Assert.IsNull(targetDesp);
            Assert.AreEqual(0, processDesp.InitialActivity.ToTransitions.Count);
            Assert.AreEqual(0, processDesp.CompletedActivity.FromTransitions.Count);

            processDesp = process.MainStream;
            targetDesp  = processDesp.Activities["NormalActivity"];

            Assert.IsNull(targetDesp);
            Assert.AreEqual(0, processDesp.InitialActivity.ToTransitions.Count);
            Assert.AreEqual(0, processDesp.CompletedActivity.FromTransitions.Count);
        }
コード例 #12
0
        public void BasicAdminAddActivityWithFromActivityExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            const string targetName = "修改后的名称";

            IWfActivity fromActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            IWfActivityDescriptor targetDesp = new WfActivityDescriptor(process.Descriptor.FindNotUsedActivityKey(), WfActivityType.NormalActivity);

            targetDesp.Properties.SetValue("Name", targetName);
            process.Descriptor.Activities.Add(targetDesp);

            WfActivityBase.CreateActivityInstance(targetDesp, process);

            WfAdminAddActivityExecutor executor = new WfAdminAddActivityExecutor(process.CurrentActivity, process, fromActivity.Descriptor, targetDesp, false);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            targetDesp = process.Descriptor.Activities[targetDesp.Key];

            Assert.IsNotNull(targetDesp);
            Assert.AreEqual(targetName, targetDesp.Properties.GetValue("Name", string.Empty));

            fromActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            Assert.IsNotNull(fromActivity.Descriptor.ToTransitions.GetTransitionByToActivity(targetDesp));
        }
コード例 #13
0
        public void BasicAdminAddTransitionWithMainStreamExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            const string targetName = "修改后的名称";

            IWfActivity fromActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            IWfTransitionDescriptor targetDesp = fromActivity.Descriptor.ToTransitions.AddBackwardTransition(process.Descriptor.InitialActivity);

            targetDesp.Properties.SetValue("Name", targetName);

            WfAdminAddTransitionExecutor executor = new WfAdminAddTransitionExecutor(process.CurrentActivity, process, targetDesp, true);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            fromActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            targetDesp = fromActivity.Descriptor.ToTransitions.GetTransitionByToActivity(process.Descriptor.InitialActivity);

            Assert.IsNotNull(targetDesp);
            Assert.AreEqual(targetName, targetDesp.Properties.GetValue("Name", string.Empty));

            IWfActivityDescriptor msFromActDesp = process.MainStream.Activities["NormalActivity"];
            IWfActivityDescriptor msToActDesp   = process.MainStream.InitialActivity;

            targetDesp = msFromActDesp.ToTransitions.GetTransitionByToActivity(msToActDesp);

            Assert.IsNotNull(targetDesp);
            Assert.AreEqual(targetName, targetDesp.Properties.GetValue("Name", string.Empty));
        }
コード例 #14
0
        public void BasicEditActivityExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            IWfActivity targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            const string targetName = "修改后的名称";

            targetActivity.Descriptor.Properties.SetValue("Name", targetName);

            WfEditActivityPropertiesExecutor executor = new WfEditActivityPropertiesExecutor(process.CurrentActivity, process, targetActivity.Descriptor, false);

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            Assert.AreEqual(targetName, targetActivity.Descriptor.Properties.GetValue("Name", string.Empty));

            UserOperationLog log = UserOperationLogAdapter.Instance.Load(builder => builder.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID)).FirstOrDefault();

            Assert.IsNotNull(log);
            Console.WriteLine("{0}: {1}", log.OperationName, log.Subject);
        }
コード例 #15
0
        public void WfBranchProcessTransferParamsJsonTest()
        {
            WfConverterHelper.RegisterConverters();

            IUser user = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.requestor.ToString()].Object;

            IWfBranchProcessTemplateDescriptor template = WfProcessTestCommon.CreateTemplate("Consign", user);

            WfBranchProcessTransferParams data = new WfBranchProcessTransferParams(template);

            data.BranchParams.Clear();

            WfBranchProcessStartupParams bpsp = new WfBranchProcessStartupParams(user);

            bpsp.Department           = user.Parent;
            bpsp.RelativeParams["RP"] = UuidHelper.NewUuidString();
            bpsp.ApplicationRuntimeParameters["context"] = UuidHelper.NewUuidString();
            bpsp.ResourceID       = UuidHelper.NewUuidString();
            bpsp.DefaultTaskTitle = UuidHelper.NewUuidString();
            bpsp.StartupContext   = UuidHelper.NewUuidString();

            data.BranchParams.Add(bpsp);

            string serilizedData = JSONSerializerExecute.Serialize(data);

            Console.WriteLine(serilizedData);

            WfBranchProcessTransferParams deserilizedData = JSONSerializerExecute.Deserialize <WfBranchProcessTransferParams>(serilizedData);

            Assert.AreEqual(data.Template.Key, deserilizedData.Template.Key);
            Assert.AreEqual(data.Template.BranchProcessKey, deserilizedData.Template.BranchProcessKey);

            AssertBranchProcessStartupParams(data.BranchParams[0], deserilizedData.BranchParams[0]);
        }
コード例 #16
0
ファイル: WfNotifyTest.cs プロジェクト: wooln/AK47Source
        public void NoticeOfLeaveActivity()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;

            WfUserResourceDescriptor userResDesp = GetUserResDespInstance();

            nextActivityDesp.LeaveEventReceivers.Add(userResDesp);

            WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver2);

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);

            process.MoveTo(new WfTransferParams(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity));

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            string actKey = process.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key;

            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(userResDesp.User.ID, process.Activities[1].ID, TaskStatus.Yue));
        }
コード例 #17
0
        public void SimpleCopyMainStreamActivitiesTest()
        {
            IWfProcessDescriptor processDesp = ReturnExecutorTestHelper.PrepareStraightProcessDesp();

            IWfProcess process = ReturnExecutorTestHelper.StartSpecialReturnProcess(processDesp);

            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //To B
            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //To C

            IWfActivity activityB = process.Activities.FindActivityByDescriptorKey("B");

            //从B复制到C
            process.Activities.FindActivityByDescriptorKey("C").CopyMainStreamActivities(activityB, null, WfControlOperationType.Return);

            process.Descriptor.Output();

            WfProcessTestCommon.MoveToNextDefaultActivity(process);     //To CopiedB

            Assert.AreEqual("B", process.CurrentActivity.Descriptor.AssociatedActivityKey);

            IWfActivityDescriptor copiedB = process.CurrentActivity.Descriptor;

            Assert.AreEqual("B", copiedB.AssociatedActivityKey);
            Assert.AreEqual("C", copiedB.ToTransitions.First().ToActivity.AssociatedActivityKey, "复制出的B指向C");
        }
コード例 #18
0
        public void ReplaceUserResourceTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateProcessDescriptorWithBranchTemplateAndUsers();

            IUser approver1 = (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object;

            List <IUser> replaceUsers = new List <IUser>();

            IUser ceo = (IUser)OguObjectSettings.GetConfig().Objects["ceo"].Object;

            replaceUsers.Add((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object);
            replaceUsers.Add(ceo);

            int affectedUsers = processDesp.ReplaceAllUserResourceDescriptors(approver1, replaceUsers);

            Console.WriteLine(affectedUsers);

            Assert.AreEqual(2, processDesp.InitialActivity.Resources.Count);
            Assert.IsTrue(ContainsUserResource(processDesp.InitialActivity.Resources, ceo));

            IWfActivityDescriptor normalActivity = processDesp.Activities["NormalActivity"];

            Assert.AreEqual(1, normalActivity.BranchProcessTemplates["Consign"].Resources.Count);
            Assert.IsTrue(ContainsUserResource(normalActivity.BranchProcessTemplates["Consign"].Resources, ceo));

            IUser approver2 = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object;

            affectedUsers = processDesp.ReplaceAllUserResourceDescriptors(approver2, new IUser[] { });

            Assert.AreEqual(0, normalActivity.BranchProcessTemplates["Distribute"].Resources.Count);
        }
コード例 #19
0
        public void AgreeReturnTwiceThenWithdrawTest()
        {
            IWfActivity activityB = ReturnExecutorTestHelper.PrepareAndMoveToAgreeSelectorActivity();

            Assert.AreEqual("B", activityB.Descriptor.Key);

            SetToLineAndMSLineSelected(activityB, "C", false);
            SetToLineAndMSLineSelected(activityB, "A", true);

            Console.WriteLine("退回之前");
            Console.WriteLine("当前活动{0}", activityB.Process.CurrentActivity.Descriptor.Key);
            ReturnExecutorTestHelper.OutputMainStream(activityB.Process);
            ReturnExecutorTestHelper.OutputEveryActivities((activityB.Process));

            MoveAgreeProcessOneStepAndValidate(activityB.Process, 1);

            WfProcessTestCommon.MoveToNextDefaultActivity(activityB.Process);   //To N2(B)

            Console.WriteLine("第二次退回之前");
            Console.WriteLine("当前活动{0}", activityB.Process.CurrentActivity.Descriptor.Key);
            ReturnExecutorTestHelper.OutputMainStream(activityB.Process);
            ReturnExecutorTestHelper.OutputEveryActivities((activityB.Process));

            Assert.AreEqual("N2", activityB.Process.CurrentActivity.Descriptor.Key);

            MoveAgreeProcessOneStepAndValidate(activityB.Process, 2);

            Console.WriteLine("第二次退回之后");
            Console.WriteLine("当前活动{0}", activityB.Process.CurrentActivity.Descriptor.Key);
            ReturnExecutorTestHelper.OutputMainStream(activityB.Process);
            ReturnExecutorTestHelper.OutputEveryActivities(activityB.Process);

            Assert.AreEqual("N3", activityB.Process.CurrentActivity.Descriptor.Key);
        }
コード例 #20
0
        public void MovetoDelegationTest()
        {
            WfDelegation delegation = PrepareDelegation();

            WfDelegationAdapter.Instance.Update(delegation);             //添加委托

            try
            {
                //创建流程
                IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

                IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
                WfTransferParams      tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
                process.MoveTo(tp);                //流转

                WfRuntime.PersistWorkflows();
                process = WfRuntime.GetProcessByProcessID(process.ID);

                Assert.IsTrue((ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban).Count) >= 2, "至少有两个待办事项。或许其它人也会去为当前人指定相应的委托人");
            }
            finally
            {
                WfDelegationAdapter.Instance.Delete(delegation);                 //清理委托
            }
        }
コード例 #21
0
        public void SimpleProcessPersistRepeatTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            //process.DefaultTaskTitle = "测试保存的流程";
            WfRuntime.PersistWorkflows();

            IWfProcess loadedProcess  = WfRuntime.GetProcessByProcessID(process.ID);
            IWfProcess loadedProcess2 = WfRuntime.GetProcessByActivityID(process.Activities[0].ID);

            Assert.AreEqual(loadedProcess, loadedProcess2);

            int n = loadedProcess.Activities.Count;

            for (int i = 0; i < n; i++)
            {
                if (loadedProcess.Activities[i].Descriptor != loadedProcess.Descriptor.InitialActivity)
                {
                    WfTransferParams transferPara = new WfTransferParams(loadedProcess.Activities[i].Descriptor);
                    loadedProcess.MoveTo(transferPara);
                    WfRuntime.PersistWorkflows();
                }

                loadedProcess = WfRuntime.GetProcessByActivityID(loadedProcess.Activities[i].ID);
            }

            IWfProcess OnceAgainloadedProcess = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(OnceAgainloadedProcess.ID, process.ID);
        }
コード例 #22
0
        public void CancelDelegationTest()
        {
            WfDelegation delegation = PrepareDelegation();

            WfDelegationAdapter.Instance.Update(delegation);

            try
            {
                IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

                IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
                WfTransferParams      tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
                process.MoveTo(tp);
                WfRuntime.PersistWorkflows();

                process = WfRuntime.GetProcessByProcessID(process.ID);
                process.CancelProcess(false);                //取消
                WfRuntime.PersistWorkflows();

                process = WfRuntime.GetProcessByProcessID(process.ID);
                Assert.AreEqual(2, ProcessTestHelper.GetActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Yue).Count, "应该产生两条待阅");
            }
            finally
            {
                WfDelegationAdapter.Instance.Delete(delegation);                 //清理委托
            }
        }
コード例 #23
0
        public void BranchProcessPersistTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            WfTransferParams tp = ProcessTestHelper.GetInstanceOfWfTransferParams(process, WfBranchProcessExecuteSequence.Parallel, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            process.MoveTo(tp);

            Assert.AreEqual(1, process.CurrentActivity.BranchProcessGroups.Count);
            IWfBranchProcessGroup group = process.CurrentActivity.BranchProcessGroups[0];

            AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey);

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            group = process.CurrentActivity.BranchProcessGroups[0];

            AssertBranchProcessesInfo(group, tp.BranchTransferParams[0].Template.BranchProcessKey);

            string subProcessID = process.CurrentActivity.BranchProcessGroups[0].Branches[0].ID;

            WfRuntime.ClearCache();

            //构造子流程,反向查找主流程信息
            IWfProcess subProcess = WfRuntime.GetProcessByProcessID(subProcessID);

            AssertBranchProcessesInfo(subProcess.EntryInfo.OwnerActivity.BranchProcessGroups[0], tp.BranchTransferParams[0].Template.BranchProcessKey);
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        public void SimpleProcessPersistTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            //process.DefaultTaskTitle = "测试保存的流程";

            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单流程");

            try
            {
                IWfProcess loadedProcess = WfRuntime.GetProcessByProcessID(process.ID);

                Assert.AreEqual(process.ID, loadedProcess.ID);
                Assert.AreEqual(process.Status, loadedProcess.Status);
                Assert.AreEqual(DataLoadingType.External, loadedProcess.LoadingType);

                WfTransferParams transferParams = new WfTransferParams(process.Descriptor.CompletedActivity);

                transferParams.Assignees.Add(new WfAssignee((IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object));
                transferParams.Assignees.Add(new WfAssignee((IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object));

                loadedProcess.MoveTo(transferParams);
                WfRuntime.PersistWorkflows();

                Assert.AreEqual(process.ID, loadedProcess.ID);
                Assert.AreEqual(WfProcessStatus.Completed, loadedProcess.Status);
                Assert.AreEqual(DataLoadingType.External, loadedProcess.LoadingType);
            }
            finally
            {
                //WfRuntime.DeleteProcessByProcessID(process.ID);
            }
        }
コード例 #26
0
        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);
        }
コード例 #27
0
        public void ClearThenResetInitialActivitySecretaryTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            processDesp.InitialActivity.Properties.SetValue("AutoAppendSecretary", true);

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            ChangeActivityResource(process.Descriptor.InitialActivity, (IUser)OguObjectSettings.GetConfig().Objects["ceo"].Object);
            WfRuntime.DecorateProcess(process);

            ChangeActivityResource(process.Descriptor.Activities["Initial"], (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object);
            WfRuntime.DecorateProcess(process);

            OutputProcessCandidates(process);
            ReturnExecutorTestHelper.OutputMainStream(process);

            Assert.AreEqual(3, processDesp.Activities.Count);
            Assert.AreEqual(process.InitialActivity.Descriptor.Key, process.Descriptor.InitialActivity.Key);
            Assert.AreEqual(WfActivityType.InitialActivity, process.Descriptor.InitialActivity.ActivityType);
            Assert.AreEqual(WfActivityType.InitialActivity, process.Descriptor.Activities["Initial"].ActivityType);

            Assert.AreEqual(3, process.MainStream.Activities.Count);
            Assert.AreEqual(WfActivityType.InitialActivity, process.MainStream.InitialActivity.ActivityType);
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        public void SimpleSecretaryWithReturnLineTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptorWithSecretaryAndReturnLine();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            OutputProcessCandidates(process);
            ReturnExecutorTestHelper.OutputMainStream(process);

            Assert.AreEqual(5, processDesp.Activities.Count);
            Assert.AreEqual(5, process.MainStream.Activities.Count);

            IWfActivity normalActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");

            IWfActivityDescriptor firstSecretary = normalActivity.Descriptor.FromTransitions.FirstOrDefault().FromActivity;

            Assert.AreEqual(1, firstSecretary.ToTransitions.Count);

            IWfActivityDescriptor secondSecretary = normalActivity.Descriptor.ToTransitions.FirstOrDefault().ToActivity;

            Assert.AreEqual(2, secondSecretary.ToTransitions.Count);

            Assert.AreEqual(2, normalActivity.Descriptor.ToTransitions.Count);

            foreach (IWfTransitionDescriptor transition in normalActivity.Descriptor.ToTransitions)
            {
                Assert.AreEqual(secondSecretary.Key, transition.ToActivity.Key);
            }
        }
コード例 #30
0
        public void FetchPersistQueueTest()
        {
            WfPersistQueueAdapter.Instance.ClearQueue();
            WfPersistQueueAdapter.Instance.ClearArchivedQueue();

            IWfProcess process = WfProcessTestCommon.StartupSimpleProcessWithAssignee();

            ProcessTestHelper.OutputExecutionTime(() => WfRuntime.PersistWorkflows(), "保存简单流程");

            Assert.AreEqual(0, WfProcessCurrentAssigneeAdapter.Instance.Load(process.ID).Count);
            Assert.AreEqual(0, WfProcessRelativeParamsAdapter.Instance.Load(process.ID).Count);
            Assert.IsNull(WfProcessDimensionAdapter.Instance.Load(process.ID));

            Console.WriteLine(process.ID);

            WfPersistQueue pq = WfPersistQueueAdapter.Instance.FetchQueueItemsAndDoOperation(1).FirstOrDefault();

            Assert.IsTrue(WfProcessCurrentAssigneeAdapter.Instance.Load(pq.ProcessID).Count > 0);
            Assert.AreEqual(process.RelativeParams.Count, WfProcessRelativeParamsAdapter.Instance.Load(pq.ProcessID).Count);

            Assert.IsNull(WfPersistQueueAdapter.Instance.Load(pq.ProcessID));

            WfPersistQueue pqArchieved = WfPersistQueueAdapter.Instance.LoadArchived(pq.ProcessID);

            Assert.IsNotNull(pqArchieved);
            Assert.AreEqual(pq.UpdateTag, pqArchieved.UpdateTag);

            WfProcessDimension pd = WfProcessDimensionAdapter.Instance.Load(pq.ProcessID);

            Assert.IsNotNull(pd);

            Console.WriteLine(pd.Data);
        }