Пример #1
0
        public void DynamicActivityWithActivityMatrixLastDynamicActivityReturnToInitialTest()
        {
            //在最后一个动态活动上添加一个默认的退回线
            IRole role = PrepareSOARole((row, pds) =>
            {
                if (row.Values.GetValue(SOARolePropertyDefinition.ActivitySNColumn, string.Empty) == "30")
                {
                    row.Values.Add(new SOARolePropertyValue(pds[SOARolePropertyDefinition.TransitionsColumn])
                    {
                        Value =
                            "[{\"Name\":\"同意\",\"DefaultSelect\":true}, {\"Name\":\"不同意\",\"ToActivityKey\":\"FirstActivity\",\"DefaultSelect\":false,\"IsReturn\":true}]"
                    });
                }
            });

            IWfProcessDescriptor processDesp = ProcessHelper.CreateSimpleProcessDescriptor();

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

            FillDynamicActivitySimpleResource(templateActDesp, new WfResourceDescriptorCollection()
            {
                new WfRoleResourceDescriptor(role)
            });

            IWfProcess process = processDesp.StartupProcess(new Dictionary <string, object>()
            {
                { "CostCenter", "1001" }
            });

            //到第一个动态活动
            process = process.MoveToDefaultActivityByExecutor();

            //到第二个动态活动
            process = process.MoveToDefaultActivityByExecutor();

            //到第三个动态活动
            process = process.MoveToDefaultActivityByExecutor();

            //退回到起始点
            process = process.MoveToReturnActivityByExecutor();

            Console.WriteLine(process.CurrentActivity.Descriptor.Key);
            Console.WriteLine(process.CompletedActivity.Descriptor.FromTransitions.GetAllCanTransitForwardTransitions().Count);

            process.OutputMainStream();
            process.OutputAndAssertEveryActivities();

            Assert.AreEqual(1, process.CompletedActivity.Descriptor.FromTransitions.GetAllCanTransitForwardTransitions().Count,
                            "结束点应该只有一条有效的入线s");

            Assert.AreEqual(process.InitialActivity.Descriptor.Key, process.CurrentActivity.Descriptor.AssociatedActivityKey);
        }