コード例 #1
0
        protected override void AfterCreateProcessInstance(SysTaskProcess sysTaskProcess)
        {
            sysTaskProcess.Name = string.Format("创建活动{0}的分支流程", this.OwnerActivityID);

            //这一步可能是很长时间的操作
            OguDataCollection <IUser> users = this.Template.Resources.ToUsers();

            int index = 0;

            if (this.Template.ExecuteSequence == WfBranchProcessExecuteSequence.SerialInSameProcess)
            {
                sysTaskProcess.Activities.Add(CreateUserActivity(sysTaskProcess, index++, users));

                SysTaskProcessRuntime.Persist();
            }
            else
            {
                foreach (IUser user in users)
                {
                    sysTaskProcess.Activities.Add(CreateUserActivity(sysTaskProcess, index++, new IUser[] { user }));

                    SysTaskProcessRuntime.Persist();
                }
            }

            if (this.AutoAddExitMaintainingStatusTask)
            {
                IWfProcess process = WfRuntime.GetProcessByActivityID(this.OwnerActivityID);

                sysTaskProcess.Activities.Add(sysTaskProcess.CreateExitMaintainingActivity(process.ID, index++));

                SysTaskProcessRuntime.Persist();
            }
        }
コード例 #2
0
        public int DispatchStartBranchProcessTasks(string ownerActivityID, IWfBranchProcessTemplateDescriptor template, bool autoAddExitMaintainingStatusTask)
        {
            ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID");
            template.NullCheck("template");

            StartBranchProcessSysTaskProcessBuilder builder = new StartBranchProcessSysTaskProcessBuilder(ownerActivityID, template, autoAddExitMaintainingStatusTask);

            SysTaskProcess sysTaskProcess = builder.Build();

            SysTaskProcessRuntime.StartProcess(sysTaskProcess);

            return(sysTaskProcess.Activities.Count);
        }
コード例 #3
0
        public void StartSysTaskProcessWithBranchesAndMoveToCompleteTest()
        {
            SysTaskAdapter.Instance.ClearAll();

            SysTaskProcess process = PrepareSysTaskProcessWithBranchData(() => PrepareInvokeServiceTask());

            SysTaskProcessRuntime.StartProcess(process);

            SysTaskCommon.ExecuteAllTasks();

            SysTaskProcessRuntime.ClearCache();
            process = SysTaskProcessRuntime.GetProcessByID(process.ID);
            Assert.AreEqual(SysTaskProcessStatus.Completed, process.Status);
        }
コード例 #4
0
        public SysTaskProcess Build()
        {
            SysTaskProcess sysTaskProcess = CreateProcessInstance();

            SysTaskProcessRuntime.ProcessContext.AffectedProcesses.AddOrReplace(sysTaskProcess);

            this.AfterCreateProcessInstance(sysTaskProcess);

            SysTaskProcessRuntime.Persist();

            sysTaskProcess = SysTaskProcessRuntime.GetProcessByID(sysTaskProcess.ID);

            return(sysTaskProcess);
        }
コード例 #5
0
        public int DispatchWithdrawProcessTask(string ownerSysActivityID, string processID, bool cancelAllBranchProcesses)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(processID);

            IWfActivity currentActivity = process.CurrentActivity;

            process.EntrtMaintainingStatus();

            WfRuntime.PersistWorkflows();

            DispatchWithdrawProcessSysTaskProcessBuilder builder = new DispatchWithdrawProcessSysTaskProcessBuilder(ownerSysActivityID, process.ID, cancelAllBranchProcesses);

            SysTaskProcess sysTaskProcess = builder.Build();

            SysTaskProcessRuntime.StartProcess(sysTaskProcess);

            return(sysTaskProcess.Activities.Count);
        }
コード例 #6
0
        public int DispatchCancelBranchProcessesTasks(string ownerSysActivityID, string ownerActivityID, bool cancelAllBranchProcesses)
        {
            int result = 0;

            WfProcessCurrentInfoCollection branchProcessesStatus = WfRuntime.GetProcessStatusByOwnerActivityID(ownerActivityID, string.Empty, false);

            foreach (WfProcessCurrentInfo processInfo in branchProcessesStatus)
            {
                DispatchCancelProcessSysTaskProcessBuilder builder = new DispatchCancelProcessSysTaskProcessBuilder(ownerSysActivityID, processInfo.InstanceID, true, cancelAllBranchProcesses);

                SysTaskProcess sysTaskProcess = builder.Build();

                SysTaskProcessRuntime.StartProcess(sysTaskProcess);

                result += sysTaskProcess.Activities.Count;
            }

            return(result);
        }
コード例 #7
0
        public void StartSysTaskProcessTest()
        {
            SysTaskAdapter.Instance.ClearAll();

            SysTaskProcess process = PrepareSysTaskProcessData(() => PrepareInvokeServiceTask());

            SysTaskProcessRuntime.StartProcess(process);

            DO.SysTask moveToTask = SysTaskAdapter.Instance.LoadByResourceID(process.Activities[0].ID).FirstOrDefault();

            Assert.IsNotNull(moveToTask);

            SysTaskCommon.ExecuteAndAssertTask(moveToTask);

            SysTaskProcessRuntime.ClearCache();

            process = SysTaskProcessRuntime.GetProcessByID(process.ID);

            Assert.AreEqual(1, process.CurrentActivityIndex);
        }
コード例 #8
0
        public void CreateSysTaskProcessAndPersist()
        {
            SysTaskAdapter.Instance.ClearAll();

            SysTaskProcess process = PrepareSysTaskProcessData(() => PrepareInvokeServiceTask());

            SysTaskProcessRuntime.ProcessContext.AffectedProcesses.AddOrReplace(process);
            SysTaskProcessRuntime.Persist();

            SysTaskProcess loadedProcess = SysTaskProcessRuntime.GetProcessByID(process.ID);

            Assert.AreNotEqual(process, loadedProcess);
            Assert.AreEqual(process.ID, loadedProcess.ID);
            Assert.AreEqual(process.Activities.Count, loadedProcess.Activities.Count);

            Assert.AreEqual(process.Activities[0].Sequence, loadedProcess.Activities[0].Sequence);
            Assert.AreEqual(process.Activities[1].Sequence, loadedProcess.Activities[1].Sequence);

            Assert.AreEqual(process.Activities[0].Task.TaskID, loadedProcess.Activities[0].Task.TaskID);
        }
コード例 #9
0
        public void BuildStartBranchProcessTaskProcessTest()
        {
            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();

            StartBranchProcessSysTaskProcessBuilder builder = new StartBranchProcessSysTaskProcessBuilder(ownerActivity.ID, template, true);

            SysTaskProcess sysTaskProcess = builder.Build();

            SysTaskProcessRuntime.ClearCache();

            sysTaskProcess = SysTaskProcessRuntime.GetProcessByID(sysTaskProcess.ID);

            Console.WriteLine("SysTaskProcess ID: {0}", sysTaskProcess.ID);
            Console.WriteLine("SysTaskProcess Activities: {0}", sysTaskProcess.Activities.Count);

            Assert.AreEqual(template.Resources.ToUsers().Count + 1, sysTaskProcess.Activities.Count);
        }