Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
0
        private void Run()
        {
            PendingActServiceConfigurationElement pendingActServiceParam = PendingActServiceSettings.GetConfig().PendingActServices[this.Params.Name];

            pendingActServiceParam.NullCheck(string.Format("pendingActServiceConfig配置节错误,没有找到线程{0}对应的节点.", this.Params.Name));

            WfPendingActivityInfoCollection pendingActs = LoadPendingActs(pendingActServiceParam.ApplicationName, pendingActServiceParam.ProgramName);

            if (pendingActs.Count > 0)
            {
                Thread.CurrentPrincipal = new DeluxePrincipal(new DeluxeIdentity(pendingActServiceParam.Operator));

                //WfActivity中CanMoveTo没有判断StartTime。我希望在workflowSettings加开关,是否使用它。
                foreach (var pendingAct in pendingActs)
                {
                    try
                    {
                        WfRuntime.ProcessPendingActivity(pendingAct);
                    }
                    catch (System.Exception ex)
                    {
                        this.Params.Log.Write(ex);
                    }
                    finally
                    {
                        WfRuntime.ClearCache();
                    }
                }
            }
        }
Пример #4
0
        public void DispatchStartBranchProcessTaskTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivity ownerActivity = process.CurrentActivity;

            Console.WriteLine("OwnerActivityID: {0}", ownerActivity.ID);

            //在Template设置资源为一个组织,用于后续分发分支流程的测试
            IWfBranchProcessTemplateDescriptor template = ownerActivity.Descriptor.BranchProcessTemplates[0];

            IUser userInTemplate = template.Resources.ToUsers().FirstOrDefault();

            WfDepartmentResourceDescriptor deptResourceDesp = new WfDepartmentResourceDescriptor(userInTemplate.Parent);

            template.Resources.Clear();
            template.Resources.Add(deptResourceDesp);

            SysTaskAdapter.Instance.ClearAll();

            SysTaskCommon.ExecuteAndAssertTask(DispatchStartBranchProcessTask.SendTask(ownerActivity.ID, template, true));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            int startedTaskCount = (int)WfServiceInvoker.InvokeContext["returnValue"];

            Console.WriteLine("Started Branch Task Count: {0}", startedTaskCount);

            Assert.IsTrue(startedTaskCount > 0);

            int executedTaskCount = SysTaskCommon.ExecuteAllTasks();

            Assert.AreEqual(startedTaskCount, executedTaskCount);

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Running, process.Status);
            Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0);

            Assert.AreEqual(startedTaskCount - 1, process.CurrentActivity.BranchProcessGroups[0].Branches.Count);
        }
Пример #5
0
        public static IWfProcess LoadProcessDescriptor(string processid)
        {
            WfRuntime.ClearCache();
            IWfProcess process = WfRuntime.GetProcessByProcessID(processid);

            //string xml = File.ReadAllText(@"C:\Documents and Settings\issuser\Desktop\111.txt");

            //Type descType = process.Descriptor.GetType();
            //PropertyInfo graphProp = descType.GetProperty("GraphDescription");
            //graphProp.SetValue(process.Descriptor, xml, null);

            //WorkflowSettings.GetConfig().GetPersistManager().SaveProcess(process);
            //WfRuntime.PersistWorkflows();
            return(process);
        }
Пример #6
0
        public void CancelProcessTaskTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            ExecuteAndAssertTask(() => CancelProcessTask.SendTask(process.ID, false));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Aborted, process.Status);
        }
Пример #7
0
        public void WithdrawProcessTaskTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            ExecuteAndAssertTask(() => WithdrawProcessTask.SendTask(process.ID, false));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Running, process.Status);

            Assert.AreEqual(WfActivityType.InitialActivity, process.CurrentActivity.Descriptor.ActivityType);
            Assert.AreEqual(WfActivityStatus.Running, process.CurrentActivity.Status);
        }
Пример #8
0
        public void DispatchCancelNoBranchProcessTaskTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            SysTaskAdapter.Instance.ClearAll();

            DispatchCancelProcessTask cancelTask = DispatchCancelProcessTask.SendTask(string.Empty, process.ID, true);

            //直接发布一个作废的任务流程
            SysTaskCommon.ExecuteAndAssertTask(cancelTask);

            int executedTaskCount = SysTaskCommon.ExecuteAllTasks();

            WfRuntime.ClearCache();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            AssertProcessAndAllBranchesStatus(WfProcessStatus.Aborted, process);
        }
Пример #9
0
        public void ExitMaintainingStatusTaskTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivity ownerActivity = process.CurrentActivity;

            WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]);

            Console.WriteLine("Process ID: {0}", process.ID);

            ExecuteAndAssertTask(() => ExitMaintainingStatusTask.SendTask(ownerActivity.ID, process.ID, true));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Completed, process.Status);
        }
Пример #10
0
        public void BasicDeleteActivityExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            int originalActCount = process.Activities.Count;

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

            WfActivityDescriptorCreateParams createParams = new WfActivityDescriptorCreateParams();

            WfAddActivityExecutor addExecutor = new WfAddActivityExecutor(process.CurrentActivity, targetActivity, createParams);

            addExecutor.Execute();

            IWfActivityDescriptor newActDesp = targetActivity.Descriptor.ToTransitions.FirstOrDefault().ToActivity;

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            targetActivity = process.Activities.FindActivityByDescriptorKey(newActDesp.Key);
            WfDeleteActivityExecutor deleteExecutor = new WfDeleteActivityExecutor(process.CurrentActivity, targetActivity);

            deleteExecutor.Execute();

            WfMainStreamActivityDescriptorCollection processDespMSA = process.Descriptor.GetMainStreamActivities();
            WfMainStreamActivityDescriptorCollection processMSA     = process.GetMainStreamActivities(true);

            processDespMSA.Output("流程描述中的主线活动");
            processMSA.Output("主线流程中的主线活动");

            Assert.AreEqual(process.Descriptor.Activities.Count, process.MainStream.Activities.Count);
            Assert.AreEqual(processDespMSA.Count, processMSA.Count);

            Assert.IsNull(process.Activities.FindActivityByDescriptorKey(targetActivity.Descriptor.Key));
            Assert.IsNull(process.MainStream.Activities[targetActivity.MainStreamActivityKey]);
        }
Пример #11
0
        public void StartBranchProcessTaskTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivity ownerActivity = process.CurrentActivity;

            Console.WriteLine("OwnerActivityID: {0}", ownerActivity.ID);

            WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]);

            ExecuteAndAssertTask(() => StartBranchProcessTask.SendTask(ownerActivity.ID, transferParams));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0);
            Assert.IsTrue(process.CurrentActivity.BranchProcessGroups[0].Branches.Count > 0);
        }