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);
        }
Example #2
0
        public void ReturnExecutorTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            WfReturnExecutor returnExec = new WfReturnExecutor(process.CurrentActivity, process.Activities[1]);

            returnExec.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID != "");
            Assert.AreEqual(process.ElapsedActivities[process.ElapsedActivities.Count - 1].ID, process.CurrentActivity.CreatorInstanceID);

            WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities();

            Assert.AreEqual(6, coll.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
        }
Example #3
0
        public void ReplaceAssigneeExecutorTestReplay()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

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

            IUser originalApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object;

            normalActDesp.Resources.Clear();
            normalActDesp.Resources.Add(new WfUserResourceDescriptor(originalApprover));

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            WfProcessTestCommon.MoveToNextDefaultActivityWithExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            IUser newApprover = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver2.ToString()].Object;

            WfReplaceAssigneesExecutor executor = new WfReplaceAssigneesExecutor(process.CurrentActivity, process.CurrentActivity, originalApprover, new IUser[] { newApprover });

            executor.Execute();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(build => build.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            Assert.AreEqual(1, tasks.Count);
            Assert.AreEqual(newApprover.ID, tasks[0].SendToUserID);
        }
Example #4
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);
        }
Example #5
0
        public void ConsignExecutorWithMoveToTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            List <IUser> users = null;

            //添加会签活动且启动了分支流程
            ConsignExecutorWithCondition(process, out users);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0);
            Assert.AreEqual(users.Count, process.CurrentActivity.BranchProcessGroups[0].Branches.Count);

            IWfActivity originalActivity = process.CurrentActivity;

            Assert.AreEqual(WfActivityStatus.Pending, process.CurrentActivity.Status);

            foreach (IWfProcess branchProcess in process.CurrentActivity.BranchProcessGroups[0].Branches)
            {
                IWfProcess subProcess = WfRuntime.GetProcessByProcessID(branchProcess.ID);

                MoveToExecutor(subProcess);
            }

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(originalActivity.ID, process.CurrentActivity.ID);
            Assert.AreEqual(WfActivityStatus.Running, process.CurrentActivity.Status);
        }
Example #6
0
        private static void CheckOperationAndStatusAfterWithdrawProcess(string processId, string fromActivityId, string toActivityId)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(processId);
            bool       flag    = false;

            for (int i = 0; i < process.Activities.Count; i++)
            {
                if (flag)
                {
                    Assert.AreEqual(WfActivityStatus.NotRunning, process.Activities[i].Status);
                    Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban));
                }
                if (process.Activities[i].ID == toActivityId)
                {
                    Assert.AreEqual(WfActivityStatus.Running, process.Activities[i].Status);
                    Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban));
                    flag = true;
                }

                if (process.Activities[i].ID == fromActivityId)
                {
                    Assert.IsFalse(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Ban));
                    Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.Activities[i].ID, TaskStatus.Yue));
                    break;
                }
            }
        }
Example #7
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);
        }
Example #8
0
        public void ReturnTestWithBranchActivity()
        {
            IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor();

            desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            GetProcDespWithBranchActivities(desp.Activities[1], 2);

            WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp);
            IWfProcess             process       = WfRuntime.StartWorkflow(startupParams);

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(2, process.ElapsedActivities.Count);
            WfRuntime.ProcessContext.ActivityChangingContext.CreatorInstanceID = process.CurrentActivity.ID;
            process.CurrentActivity.CopyMainStreamActivities(process.Activities[1], null, WfControlOperationType.Return); //退件
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID.IsNotEmpty());
            Assert.AreEqual(process.ElapsedActivities[2].ID, process.CurrentActivity.CreatorInstanceID);

            Assert.AreEqual(10, process.Activities.Count);
        }
Example #9
0
        public void ActivityOperatorResourceTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            IWfActivityDescriptor nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams      tp = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);
            IUser requestor          = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            tp.Operator = requestor;

            process.MoveTo(tp);

            WfActivityOperatorResourceDescriptor resource = new WfActivityOperatorResourceDescriptor();

            resource.ActivityKey = process.InitialActivity.Descriptor.Key;
            process.CurrentActivity.Descriptor.Resources.Add(resource);
            OguDataCollection <IUser> users = process.CurrentActivity.Descriptor.Resources.ToUsers();

            Assert.IsTrue(users.Count > 0);
            Assert.AreEqual(requestor.ID, users[0].ID, "验证资源中的人员是否是之前活动的操作人");

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

            users = process.CurrentActivity.Descriptor.Resources.ToUsers();

            Assert.IsTrue(users.Count > 0, "重新加载后资源中应该有人");
            Assert.AreEqual(requestor.ID, users[0].ID, "重新加载后验证资源中的人员是否是之前活动的操作人");
        }
Example #10
0
        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));
        }
Example #11
0
        public void MainStreamActivitiesWithConditionActivityPassed()
        {
            IWfProcessDescriptor desp = WfProcessTestCommon.CreateProcessDescriptor();

            desp.InitialActivity.Resources.Add(new WfUserResourceDescriptor((IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object));

            IWfActivityDescriptor actDesp = desp.Activities[1];

            AddActivitiesDespToSameActivityDesp(actDesp, 2);
            ToTransitionsDescriptorCollection transDespColl = actDesp.ToTransitions;

            SetTransitionCondition(transDespColl[0], false, 1);
            SetTransitionCondition(transDespColl[1], true, 3);

            WfProcessStartupParams startupParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(desp);

            IWfProcess process = WfRuntime.StartWorkflow(startupParams);

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.requestor, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            Assert.AreEqual(3, process.ElapsedActivities.Count);

            WfMainStreamActivityDescriptorCollection coll = process.Descriptor.GetMainStreamActivities();

            Assert.AreEqual(process.Activities.Count - 1, coll.Count);

            Assert.AreEqual(transDespColl[1].ToActivity.Key, coll[2].Activity.Key, "此处为动态添加的活动");
        }
Example #12
0
        private void serverConfirmButton_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.processGrid != null)
                {
                    List <WorkflowInfo> processInfoList = new List <WorkflowInfo>();

                    foreach (string key in this.processGrid.SelectedKeys)
                    {
                        IWfProcess process     = WfRuntime.GetProcessByProcessID(key);
                        var        processInfo = WorkflowInfo.ProcessAdapter(process);
                        processInfoList.Add(processInfo);
                    }

                    HtmlInputHidden resultData = (HtmlInputHidden)WebControlUtility.FindControlByID(this, "resultData", true);

                    if (resultData != null)
                    {
                        resultData.Value = JSONSerializerExecute.Serialize(processInfoList);
                    }

                    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Close",
                                                            string.Format("window.returnValue = $get('{0}').value; top.close()", resultData.ClientID),
                                                            true);
                }
            }
            catch (System.Exception ex)
            {
                string errorScript = WebUtility.GetShowClientErrorScript(ex.Message, ex.StackTrace, "错误");
                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "ShowError",
                                                        "SubmitButton.resetAllStates();" + errorScript,
                                                        true);
            }
        }
        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);
        }
        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());
        }
Example #15
0
        public void CancelProcessInOtherActivityTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            WfRuntime.PersistWorkflows();

            process = WfRuntime.GetProcessByProcessID(process.ID);

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

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

            process.MoveTo(tp);

            WfRuntime.PersistWorkflows();

            UserTaskCollection tasks = UserTaskAdapter.Instance.LoadUserTasks(b => b.AppendItem("ACTIVITY_ID", process.CurrentActivity.ID));

            Console.WriteLine("Current Activity ID: {0}", process.CurrentActivity.ID);
            Console.WriteLine("User Task Count: {0}", tasks.Count);

            process = CancelProcess(process, false);

            UserTaskCollection userAccomlishedTasks = UserTaskAdapter.Instance.GetUserAccomplishedTasks(UserTaskIDType.ActivityID, UserTaskFieldDefine.All, false, process.CurrentActivity.ID);

            Console.WriteLine("User Accomplished Task Count: {0}", userAccomlishedTasks.Count);

            Assert.AreEqual(tasks.Count, userAccomlishedTasks.Count);
        }
Example #16
0
        private static IWfProcess GetProcessInstanceWithAssigneesResource()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

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

            process.MoveTo(tp);

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

            IWfActivityDescriptor actDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfActivityAssigneesResourceDescriptor actAssResDesp = new WfActivityAssigneesResourceDescriptor();

            actAssResDesp.ActivityKey = actDesp.Key;
            actDesp.Resources.Add(actAssResDesp);

            nextActivityDesp = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity;
            WfTransferParams tpa = ProcessTestHelper.GetInstanceOfWfTransferParams(nextActivityDesp, OguObject.approver1);

            process.MoveTo(tpa);

            WfRuntime.PersistWorkflows();
            process = WfRuntime.GetProcessByProcessID(process.ID);
            return(process);
        }
Example #17
0
        public void CancelSerialSubProcessTest()
        {
            IWfProcess process = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            IWfProcess branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[0];

            CheckOperationAndStatusBeforeCancelProcess(branchProcess);

            CancelProcess(branchProcess, false);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            //检查第二个流程是否启动
            branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[1];
            Assert.AreEqual(WfProcessStatus.Running, branchProcess.Status);

            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(process.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            WfRuntime.PersistWorkflows();

            ProcessTestHelper.ProcessPendingActivity(process.CurrentActivity.ID);

            process       = WfRuntime.GetProcessByProcessID(process.ID);
            branchProcess = process.CurrentActivity.BranchProcessGroups[0].Branches[1];
            Assert.AreEqual(WfProcessStatus.Completed, branchProcess.Status, "第二个子流程的状态");
        }
Example #18
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);                 //清理委托
            }
        }
Example #19
0
        protected override void AfterCreateProcessInstance(SysTaskProcess sysTaskProcess)
        {
            sysTaskProcess.Name = string.Format("作废ID为{0}的流程", this.ProcessID);

            int index = 0;

            sysTaskProcess.OwnerActivityID = this.OwnerSysActivityID;

            IWfProcess process = WfRuntime.GetProcessByProcessID(this.ProcessID);

            WfProcessCurrentInfoCollection branchProcessesStatus = WfRuntime.GetProcessStatusByOwnerActivityID(process.CurrentActivity.ID, string.Empty, false);

            if (branchProcessesStatus.Count > 0 && this.CancelAllBranchProcesses)
            {
                //作废子流程
                sysTaskProcess.Activities.Add(sysTaskProcess.CreateDispatchCancelBranchesProcessActivity(process.CurrentActivity.ID, this.CancelAllBranchProcesses, index++));
            }

            if (this.CancelSelf)
            {
                sysTaskProcess.Activities.Add(sysTaskProcess.CreateCancelProcessActivity(this.ProcessID, index++));
            }

            sysTaskProcess.Activities.Add(sysTaskProcess.CreateExitMaintainingActivity(this.ProcessID, index++));
        }
Example #20
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);                 //清理委托
            }
        }
Example #21
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);
            }
        }
Example #22
0
        public static WfClientProcess GetClientProcess(IWfClientSearchParameters parameters)
        {
            IWfProcess process = null;

            if (parameters.ActivityID.IsNotEmpty())
            {
                process = WfRuntime.GetProcessByActivityID(parameters.ActivityID);
            }
            else
            {
                if (parameters.ProcessID.IsNotEmpty())
                {
                    process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);
                }
                else
                {
                    if (parameters.ResourceID.IsNotEmpty())
                    {
                        process = WfRuntime.GetProcessByResourceID(parameters.ResourceID).FirstOrDefault();
                    }
                }
            }

            return(GetClientProcess(process));
        }
Example #23
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);
            }
        }
Example #24
0
        public static WfClientProcess Cancel(WfClientCancelParameters parameters)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);

            IWfActivity activity = process.CurrentActivity;

            if (activity == null || activity.Assignees == null)// || !activity.Assignees.Contains(UserHelper.UserId))
            {
                return(null);
            }

            WfCancelProcessExecutor executor = new WfCancelProcessExecutor(activity, process);

            GenericOpinion serverOpinion = PrepareOpinion(process.CurrentActivity, parameters.CurrentOpinion, DeluxeIdentity.CurrentUser);

            serverOpinion.OpinionType = "拒绝";

            if (serverOpinion.Content.IsNullOrEmpty())
            {
                serverOpinion.Content = "拒绝";
            }

            executor.PrepareApplicationData += dataContext => GenericOpinionAdapter.Instance.Update(serverOpinion);

            return(GetClientProcess(executor.Execute()));
        }
Example #25
0
        public void SingleStepWithdrawByDynamicAddReplay()
        {
            //会签都是针对同样的两个人操作,且串行
            IUser  user           = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object;
            string procResourceId = GetStartWorkflowResourceID(user);

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceId);
            string processID = processes[0].ID;

            MoveToExecutor(processes[0]);
            Assert.AreEqual(1, processes[0].ElapsedActivities.Count);            //initial

            IWfProcess   proc = WfRuntime.GetProcessByProcessID(processID);
            List <IUser> users;

            ConsignExecutorWithCondition(proc, out users);

            proc = WfRuntime.GetProcessByProcessID(processID);
            WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(proc.CurrentActivity, proc.CurrentActivity);

            withdrawExec.Execute();

            proc = WfRuntime.GetProcessByProcessID(processID);
            Assert.AreEqual(1, proc.ElapsedActivities.Count);
        }
        public string GetProcessUrl(string processID, bool autoNormalize)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(processID);

            string result = GetUrlFromCurrentUserTask(process);

            if (result.IsNullOrEmpty())
            {
                result = GetUrlFromAppCommonInfo(process);
            }

            if (result.IsNullOrEmpty())
            {
                result = GetUrlFromUserAccomplishedTask(process);
            }

            if (result.IsNotEmpty() && autoNormalize)
            {
                NameValueCollection uriParams = UriHelper.GetUriParamsCollection(result);

                uriParams.Remove("activityID");
                uriParams["processID"] = process.ID;

                result = UriHelper.CombineUrlParams(result, uriParams);

                result = UserTask.GetNormalizedUrl(process.Descriptor.ApplicationName, process.Descriptor.ProgramName, result);
            }


            return(result);
        }
Example #27
0
        public void ReturnExecutorTestReplay()
        {
            IWfProcess process = WfProcessTestCommon.StartupProcessWithAssignee();

            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver1, process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            ProcessTestHelper.MoveToAndSaveNextActivityWithDefSelectTranstion(OguObject.approver2, process);

            //退件到初始活动
            process = WfRuntime.GetProcessByProcessID(process.ID);
            WfReturnExecutor returnExec = new WfReturnExecutor(process.CurrentActivity, process.Activities[0]);

            returnExec.Execute();

            Assert.IsTrue(process.CurrentActivity.CreatorInstanceID != "");
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivity act = process.Activities.FindActivityByDescriptorKey(process.CurrentActivity.Descriptor.AssociatedActivityKey);

            Assert.AreEqual(act.Assignees.Count, process.CurrentActivity.Assignees.Count);

            Assert.AreEqual(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.AssociatedActivityKey, act.Descriptor.ToTransitions[0].ToActivity.Key);
            Assert.IsTrue(process.Activities.FindActivityByDescriptorKey(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.Key).Assignees.Count > 0);
        }
Example #28
0
        public void WaitAllCompleteOfSerialBranchProcessTest()
        {
            IWfProcess wfProcess = GetProcessInstanceWithBranchProcessRunning(WfBranchProcessExecuteSequence.Serial, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);

            AssertProcessStatus(wfProcess);

            CheckProcessRelationOperationAndStatus(wfProcess, false);

            //第一个子流程办结
            wfProcess.Activities[1].BranchProcessGroups[0].Branches[0].CompleteProcess(true);
            WfRuntime.PersistWorkflows();

            wfProcess = WfRuntime.GetProcessByProcessID(wfProcess.ID);
            Assert.AreEqual(WfProcessStatus.Completed, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Running, wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].InitialActivity.ID, TaskStatus.Ban));


            //第二个子流程办结
            wfProcess.CurrentActivity.BranchProcessGroups[0].Branches[1].CompleteProcess(true);
            WfRuntime.PersistWorkflows();


            ProcessTestHelper.ProcessPendingActivity(wfProcess.CurrentActivity.ID);

            IWfProcess wfProc = WfRuntime.GetProcessByProcessID(wfProcess.ID);

            Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[0].Status);
            Assert.AreEqual(WfProcessStatus.Completed, wfProc.CurrentActivity.BranchProcessGroups[0].Branches[1].Status);

            Assert.AreEqual(WfActivityStatus.Running, wfProc.CurrentActivity.Status);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProc.CurrentActivity.ID, TaskStatus.Ban));
        }
Example #29
0
        public void BaseAddApproverExecutorStandardModeWithWithdrawTest()
        {
            IWfProcess process = WfProcessTestCommon.StartupSimpleProcess();

            int originalActCount = process.Activities.Count;

            WfProcessTestCommon.MoveToNextDefaultActivity(process);

            int originalElapsedActCount = process.ElapsedActivities.Count;

            IWfActivity           targetActivity = process.Activities.FindActivityByDescriptorKey("NormalActivity");
            WfAddApproverExecutor executor       = new WfAddApproverExecutor(process.CurrentActivity, targetActivity);

            executor.Assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object);
            executor.Execute();

            Console.WriteLine("Elapsed activities: {0}", process.ElapsedActivities.Count);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            WfWithdrawExecutor withdrawExecutor = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity);

            withdrawExecutor.Execute();

            Console.WriteLine("Elapsed activities: {0}", process.ElapsedActivities.Count);

            Assert.AreEqual(originalElapsedActCount, process.ElapsedActivities.Count);
            Assert.AreEqual(originalActCount, process.Activities.Count, "撤回后,恢复为加签之前的状态");
            Assert.AreEqual(originalActCount, process.MainStream.Activities.Count, "撤回后,主线流程的活动也没有变化");

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

            processDespMSA.Output("流程描述中的主线活动");
            processMSA.Output("主线流程中的主线活动");
        }
        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));
        }