Example #1
0
        public void ComplexDynamicActivityWithTwoAssigneesTest()
        {
            IWfProcessDescriptor processDesp = CreateComplexDynamicActivityProcess(
                (IUser)OguObjectSettings.GetConfig().Objects["approver1"].Object,
                (IUser)OguObjectSettings.GetConfig().Objects["cfo"].Object);

            IWfProcess process = processDesp.StartupProcess();

            IWfActivityDescriptor templateActDesp = process.Descriptor.Activities["NormalActivity"];
            IWfActivityDescriptor a1Activity      = process.Descriptor.Activities["A1"];
            IWfActivityDescriptor a2Activity      = process.Descriptor.Activities["A2"];

            IWfActivityDescriptor firstDynamicActDesp1 = ValidateDynamicActivities(a1Activity, templateActDesp);
            IWfActivityDescriptor firstDynamicActDesp2 = ValidateDynamicActivities(a2Activity, templateActDesp);

            Assert.AreEqual(firstDynamicActDesp1.Key, firstDynamicActDesp2.Key);

            IWfActivityDescriptor secondDynamicActDesp = firstDynamicActDesp1.GetToActivities().FirstOrDefault();

            //第二个动态点的出线对应活动
            WfActivityDescriptorCollection secondDynamicActDespOutDesps = secondDynamicActDesp.GetToActivities();

            Assert.AreEqual(2, secondDynamicActDespOutDesps.Count);
            Assert.IsTrue(secondDynamicActDespOutDesps.ContainsKey("B1"));
            Assert.IsTrue(secondDynamicActDespOutDesps.ContainsKey("B2"));

            ValidateLastDynamicTransitions(templateActDesp);
            ValidateTemplateCandidatesAndDynamicActivityCandidates(firstDynamicActDesp1, templateActDesp);
        }
        private static void RemoveExistedDynamicActivityRecursively(IWfActivityDescriptor currentActDesp, WfActivityDescriptorCollection endActivities)
        {
            //判断当前活动不在结束的活动中
            if (currentActDesp != null && ((WfActivityDescriptor)currentActDesp).GeneratedByTemplate && endActivities.ContainsKey(currentActDesp.Key) == false)
            {
                //判断当前活动是不已经被删除
                if (currentActDesp.Process.Activities.ContainsKey(currentActDesp.Key))
                {
                    WfActivityDescriptorCollection nextActivities = currentActDesp.GetToActivities();

                    if (currentActDesp.IsMainStreamActivity == false && currentActDesp.Instance != null)
                    {
                        currentActDesp.Instance.Remove();
                    }
                    else
                    {
                        currentActDesp.Remove();
                    }

                    foreach (IWfActivityDescriptor nextActivity in nextActivities)
                    {
                        RemoveExistedDynamicActivityRecursively(nextActivity, endActivities);
                    }
                }
            }
        }
        private static void RemoveExistedDynamicActivityRecursively(IWfActivityDescriptor currentActDesp, WfActivityDescriptorCollection endActivities)
        {
            //判断当前活动不在结束的活动中
            if (currentActDesp != null && ((WfActivityDescriptor)currentActDesp).GeneratedByTemplate && endActivities.ContainsKey(currentActDesp.Key) == false)
            {
                //判断当前活动是不已经被删除
                if (currentActDesp.Process.Activities.ContainsKey(currentActDesp.Key))
                {
                    WfActivityDescriptorCollection nextActivities = currentActDesp.GetToActivities();

                    if (currentActDesp.IsMainStreamActivity == false && currentActDesp.Instance != null)
                        currentActDesp.Instance.Remove();
                    else
                        currentActDesp.Remove();

                    foreach (IWfActivityDescriptor nextActivity in nextActivities)
                        RemoveExistedDynamicActivityRecursively(nextActivity, endActivities);
                }
            }
        }