public WfClientProcessInfo MoveToNextDefaultActivity(string processID, WfClientRuntimeContext runtimeContext)
        {
            processID.CheckStringIsNullOrEmpty("processID");

            OperationContext.Current.FillContextToOguServiceContext();

            IWfProcess process = GetProcessByProcessID(processID, runtimeContext);

            MeregeRuntimeContext(process, runtimeContext);

            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            MergeTransferParams(transferParams, runtimeContext);

            IWfActivity originalActivity = process.CurrentActivity;

            ExecuteExecutor(process, runtimeContext, (p) =>
            {
                WfMoveToExecutor executor = new WfMoveToExecutor(p.CurrentActivity, p.CurrentActivity, transferParams);

                executor.SaveApplicationData += (dataContext) => SaveOpinion(runtimeContext.Opinion, originalActivity, transferParams);
                executor.PrepareMoveToTasks  += (dataContext, tasks) =>
                                                tasks.ForEach(task => task.Purpose = p.CurrentActivity.Descriptor.Name);

                return(executor);
            });

            return(process.ToClientProcessInfo(transferParams.Operator).FillCurrentOpinion(process.CurrentActivity, runtimeContext.Operator));
        }
Beispiel #2
0
        public static WfClientProcess Moveto(WfClientMovetoParameters parameters)
        {
            IWfProcess process = WfRuntime.GetProcessByProcessID(parameters.ProcessID);

            IWfActivity activity = process.CurrentActivity;

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

            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            UserTaskCollection userTask = new UserTaskCollection();
            WfMoveToExecutor   executor = new WfMoveToExecutor(activity, activity, transferParams);

            //调整待办的url和标题
            executor.PrepareMoveToTasks += (dataContext, tasks) =>
            {
                PrepareUserTasks(tasks, null, null, transferParams.NextActivityDescriptor.Name);
            };

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

            if (activity.Descriptor.ActivityType == WfActivityType.InitialActivity)
            {
                serverOpinion.OpinionType = "提交";
            }
            else if (activity.Descriptor.ActivityType == WfActivityType.CompletedActivity)
            {
                serverOpinion.OpinionType = string.Empty;
            }
            else if (activity.Descriptor.ActivityType == WfActivityType.NormalActivity)
            {
                serverOpinion.OpinionType = "同意";

                if (serverOpinion.Content.IsNullOrEmpty())
                {
                    serverOpinion.Content = "同意";
                }
            }

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

            return(GetClientProcess(executor.Execute()));
        }
Beispiel #3
0
        public static IWfProcess MoveToDefaultActivityByExecutor(this IWfProcess process, bool persist = true)
        {
            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(process);

            WfMoveToExecutor executor = new WfMoveToExecutor(process.CurrentActivity, process.CurrentActivity, transferParams);

            IWfProcess result = process;

            if (persist)
            {
                executor.Execute();
                result = WfRuntime.GetProcessByProcessID(process.ID);
            }
            else
            {
                executor.ExecuteNotPersist();
            }

            return(result);
        }
Beispiel #4
0
        public void StartWorkflowAndMoveToNextExecutorTest()
        {
            IWfProcessDescriptor processDesp = ProcessHelper.CreateFreeStepsProcessDescriptor(OguObjectSettings.GetConfig().Objects["approver1"].User);

            WfTransferParams transferParams = WfTransferParams.FromNextDefaultActivity(processDesp.InitialActivity);

            WfProcessStartupParams startupParams = processDesp.PrepareStartupParams();

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams, transferParams);

            IWfProcess process = executor.Execute();

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

            Console.WriteLine("Process ID: {0}, Status: {1}", process.ID, process.Status);
            Console.WriteLine("Current ActivityKey : {0}, Status: {1}", process.CurrentActivity.Descriptor.Key, process.CurrentActivity.Status);

            Assert.AreEqual(process.CurrentActivity.ID, processLoaded.CurrentActivity.ID);
            Assert.AreEqual(WfActivityStatus.Running, processLoaded.CurrentActivity.Status);
            Assert.IsTrue(processLoaded.CurrentActivity.Assignees.Count > 0);
        }