Esempio n. 1
0
        /// <summary>
        /// 启动一个模版(组)下的一组分支流程,在服务模式下,可能返回多个流程。其它情况返回单个流程
        /// </summary>
        /// <param name="branchTransferParams"></param>
        /// <param name="group"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private WfProcessCollection StartupBranchProcess(WfBranchProcessTransferParams branchTransferParams, IWfBranchProcessGroup group, int index)
        {
            WfProcessCollection processes = null;

            if (branchTransferParams.Template.OperationDefinition == null)
            {
                WfProcessStartupParams startupParams = PrepareOneBranchProcessStartupParams(branchTransferParams, group, index);

                startupParams.CheckStartProcessUserPermission = false;

                processes = new WfProcessCollection();
                processes.Add(WfRuntime.StartWorkflow(startupParams));
            }
            else
            {
                if (WfRuntime.ProcessContext.EnableServiceCall)
                {
                    WfServiceStartupProcessParams startupParams = PrepareOneServiceStartupProcessParams(branchTransferParams, group, index);

                    processes = InvokeBranchProcess(startupParams, branchTransferParams.Template);
                }
                else
                {
                    processes = new WfProcessCollection();
                }
            }

            return(processes);
        }
Esempio n. 2
0
        protected override void OnModifyWorkflow(WfExecutorDataContext dataContext)
        {
            IWfProcess process = WfRuntime.StartWorkflow(StartupParams);

            if (this.OperatorActivity == null)
            {
                this.OperatorActivity = process.CurrentActivity;
            }

            if (this.AutoMoveTo)
            {
                if (this.TransferParams == null)
                {
                    this.TransferParams = WfTransferParams.FromNextDefaultActivity(process);
                }

                //如果流转参数中没有下一步的人员,则从下一步活动的候选人中复制
                if (this.TransferParams.Assignees.Count == 0)
                {
                    IWfActivity nextActivity = process.Activities.FindActivityByDescriptorKey(this.TransferParams.NextActivityDescriptor.Key);

                    if (nextActivity != null)
                    {
                        this.TransferParams.Assignees.CopyFrom(nextActivity.Candidates);
                    }
                }

                this.TransferParams.FillActivityAndTransitionInfoFromContext(process);

                WfMoveToExecutor.DoMoveToOperation(process, this.TransferParams);
            }

            WfRuntime.ProcessContext.ResetContextByProcess(process);
        }