Example #1
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);
        }
Example #2
0
        public void SingleStepWithDrawTest()
        {
            IUser  user           = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object;
            string procResourceId = GetStartWorkflowResourceID(user);

            WfProcessCollection processes;

            for (int i = 0; i < 2; i++)
            {
                processes = WfRuntime.GetProcessByResourceID(procResourceId);
                MoveToExecutor(processes[0]);
            }

            processes = WfRuntime.GetProcessByResourceID(procResourceId);
            IWfProcess process = processes[0];

            Assert.AreEqual(2, process.ElapsedActivities.Count);

            WfWithdrawExecutor exec = new WfWithdrawExecutor(process.CurrentActivity, process.CurrentActivity);

            exec.Execute();

            processes = WfRuntime.GetProcessByResourceID(procResourceId);
            MoveToExecutor(processes[0]);

            processes = WfRuntime.GetProcessByResourceID(procResourceId);
            WfActivityCollection coll = processes[0].ElapsedActivities;

            Assert.AreEqual(coll[coll.Count - 1].Descriptor.ToTransitions[0].ToActivity.Key, processes[0].CurrentActivity.Descriptor.Key);

            //撤回的单步是指业务上的一步,如在上一步动态添加的两个点,则当前就会撤回到动态添加两个点的活动
        }
        public List <WfClientProcess> GetProcessesByResourceID(string resourceID, WfClientUser user, WfClientProcessInfoFilter filter)
        {
            resourceID.CheckStringIsNullOrEmpty("resourceID");

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(resourceID).SortByUserRelativity((IUser)user.ToOguObject());

            WfClientProcessConverter converter = new WfClientProcessConverter(filter);

            List <WfClientProcess> result = new List <WfClientProcess>();

            foreach (IWfProcess process in processes)
            {
                WfClientProcess client = null;

                converter.ServerToClient(process, ref client);

                client.AuthorizationInfo = WfClientProcessInfoBaseConverter.Instance.GetAuthorizationInfo(process, process.CurrentActivity, user);

                if ((filter & WfClientProcessInfoFilter.CurrentOpinion) == WfClientProcessInfoFilter.CurrentOpinion)
                {
                    client.FillCurrentOpinion(process.CurrentActivity, user);
                }

                result.Add(client);
            }

            return(result);
        }
Example #4
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));
        }
        public List <WfClientProcessInfo> GetProcessesInfoByResourceID(string resourceID, WfClientUser user)
        {
            resourceID.CheckStringIsNullOrEmpty("resourceID");

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(resourceID).SortByUserRelativity((IUser)user.ToOguObject());

            List <WfClientProcessInfo> result = new List <WfClientProcessInfo>();

            processes.ForEach(process => result.Add(process.ToClientProcessInfo(user).FillCurrentOpinion(process.CurrentActivity, user)));

            return(result);
        }
Example #6
0
        public void MoveToExecutorTest()
        {
            IUser  user           = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;
            string procResourceId = GetStartWorkflowResourceID(user);

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceId);
            IWfProcess          process   = processes[0];
            string nextActivityDespKey    = process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity.Key;

            MoveToExecutor(process);

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

            Assert.AreEqual(nextActivityDespKey, proc.CurrentActivity.Descriptor.Key);
        }
Example #7
0
        public void StartWorkflowExecutorTest()
        {
            IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            string procResourceId = GetStartWorkflowResourceID(user);

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceId);

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

            WfUserResourceDescriptor uDesp = (WfUserResourceDescriptor)processes[0].InitialActivity.Descriptor.Resources[0];

            Assert.AreEqual(user.ID, uDesp.User.ID);
        }
Example #8
0
        protected virtual void CopyWorkflow(string processDescKey, string appName, string programName, string sourceResourceID, string sourceProcessID, string relativeID, string relativeURL)
        {
            IWfProcess originalProcess = null;

            if (sourceProcessID.IsNotEmpty())
            {
                originalProcess = WfRuntime.GetProcessByProcessID(sourceProcessID);
            }
            else
            {
                WfProcessCollection processes = WfRuntime.GetProcessByResourceID(sourceResourceID);

                (processes.Count > 0).FalseThrow("不能根据{0}找到对应的流程", sourceResourceID);
                originalProcess = processes[0];
            }

            InnerStartWorkflow(processDescKey, appName, programName, relativeID, relativeURL, true, originalProcess.ApprovalRootProcess.RelativeParams);
        }
Example #9
0
        public void ConsignExecutorTest()
        {
            IUser  user           = (IUser)OguObjectSettings.GetConfig().Objects["approver2"].Object;
            string procResourceID = GetStartWorkflowResourceID(user);
            string processID      = string.Empty;

            WfProcessCollection processes = WfRuntime.GetProcessByResourceID(procResourceID);

            processID = processes[0].ID;
            MoveToExecutor(processes[0]);
            Assert.AreEqual(1, processes[0].ElapsedActivities.Count);

            processes = WfRuntime.GetProcessByResourceID(procResourceID);
            List <IUser> users;

            ConsignExecutor(processes[0], out users);

            processes = WfRuntime.GetProcessByResourceID(procResourceID);
            Assert.AreEqual(3, processes.Count, "共3个流程,主流程与两个子流程");

            IWfProcess proc = WfRuntime.GetProcessByProcessID(processID);

            Assert.AreEqual(7, proc.Activities.Count);
            string k = proc.CurrentActivity.Descriptor.FromTransitions[0].FromActivity.Key;

            Assert.IsNotNull(proc.Activities.FindActivityByDescriptorKey(k).CreatorInstanceID, "添加会签点的活动确实没值");

            Assert.AreEqual(WfActivityStatus.Pending, proc.CurrentActivity.Status);            //NO
            Assert.AreEqual(users.Count, proc.CurrentActivity.BranchProcessGroups[0].Branches.Count);

            //使子流程完成
            proc = WfRuntime.GetProcessByProcessID(processID);
            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(proc.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);
            WfRuntime.PersistWorkflows();
            ProcessTestHelper.ProcessPendingActivity(proc.CurrentActivity.ID);

            proc = WfRuntime.GetProcessByProcessID(processID);
            Assert.AreEqual(WfActivityStatus.Running, proc.CurrentActivity.Status, "此为添加的会签点");
            Assert.AreEqual(2, proc.CurrentActivity.BranchProcessGroups[0].Branches.Count, "存在两个子流程");
            Assert.AreEqual(2, proc.ElapsedActivities.Count);
            MoveToExecutor(proc);
            Assert.AreEqual(3, proc.ElapsedActivities.Count);
        }
Example #10
0
        private bool OriginalDataExists(string resourceID)
        {
            bool result = false;

            try
            {
                WfProcessCollection processes = WfRuntime.GetProcessByResourceID(resourceID);

                result = processes.Count > 0;

                if (result == false)
                {
                    result = AppCommonInfoAdapter.Instance.ExistsAndNotArchived(resourceID);
                }
            }
            catch (System.Exception)
            {
            }

            return(result);
        }
Example #11
0
        private void InitOriginalActivityByResourceID(string resourceID)
        {
            if (resourceID.IsNotEmpty())
            {
                WfProcessCollection procCollection = WfRuntime.GetProcessByResourceID(resourceID);

                (procCollection.Count > 0).FalseThrow <WfRuntimeException>("不能根据'{0}'找到ResourceID对应的流程", resourceID);

                IWfProcess process = procCollection.Find(p =>
                {
                    return(p.HasParentProcess == false);
                });

                if (process == null)
                {
                    process = procCollection[0].SameResourceRootProcess;
                }

                OriginalActivity = process.CurrentActivity;
                this._OriginalCurrentActivity = OriginalActivity;
            }
        }
Example #12
0
        public void SingleStepWithDrawByDynamicAdd()
        {
            //Initial  NormalActivity  NormalActivity1 NormalActivity2 NormalActivity3 Completed
            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

            processes = WfRuntime.GetProcessByResourceID(procResourceId);
            List <IUser> users;

            ConsignExecutor(processes[0], out users);

            IWfProcess proc = WfRuntime.GetProcessByProcessID(processId);

            Assert.AreEqual(2, proc.ElapsedActivities.Count);            //NormalActivity
            ProcessTestHelper.CompleteActivityBranchProcessesByBlockingType(proc.CurrentActivity, WfBranchProcessBlockingType.WaitAllBranchProcessesComplete);
            WfRuntime.PersistWorkflows();
            ProcessTestHelper.ProcessPendingActivity(proc.CurrentActivity.ID);

            proc = WfRuntime.GetProcessByProcessID(processId);
            WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(proc.CurrentActivity, proc.CurrentActivity);            //"NO"

            withdrawExec.Execute();

            proc = WfRuntime.GetProcessByProcessID(processId);
            Assert.AreEqual(1, proc.ElapsedActivities.Count);
            Assert.AreEqual(proc.Descriptor.GetMainStreamActivities().Count, proc.Activities.Count);
            Assert.AreEqual(proc.ElapsedActivities[0].Descriptor.ToTransitions[0].ToActivity.Key, proc.CurrentActivity.Descriptor.Key);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(proc.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(proc.CurrentActivity.Descriptor.ToTransitions.Count == 1);
        }