Example #1
0
        protected void buttonCallBranchProcess_Click(object sender, EventArgs e)
        {
            WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post,
                                                                                "http://localhost/MCSWebApp/WfFormTemplate/Services/WfProcessService.svc",
                                                                                WfServiceContentType.Json);

            WfServiceOperationDefinition definition = new WfServiceOperationDefinition(address, "StartBranchProcesses");

            WfServiceOperationParameter p1 = new WfServiceOperationParameter("ownerActivityID", UuidHelper.NewUuidString());

            IWfBranchProcessTemplateDescriptor template       = new WfBranchProcessTemplateDescriptor("Test");
            WfBranchProcessTransferParams      transferParams = new WfBranchProcessTransferParams(template);

            WfServiceOperationParameter p2 = new WfServiceOperationParameter("branchTransferParams", WfSvcOperationParameterType.RuntimeParameter, "transferParams");

            definition.Params.Add(p1);
            definition.Params.Add(p2);

            WfServiceInvoker invoker = new WfServiceInvoker(definition);

            WfServiceInvoker.InvokeContext["transferParams"] = transferParams;

            object result = invoker.Invoke();

            resultLabel.Text = Server.HtmlEncode(result.ToString());
        }
		public void WfBranchProcessTransferParamsJsonTest()
		{
			WfConverterHelper.RegisterConverters();

			IUser user = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.requestor.ToString()].Object;

			IWfBranchProcessTemplateDescriptor template = WfProcessTestCommon.CreateTemplate("Consign", user);

			WfBranchProcessTransferParams data = new WfBranchProcessTransferParams(template);

			data.BranchParams.Clear();

			WfBranchProcessStartupParams bpsp = new WfBranchProcessStartupParams(user);

			bpsp.Department = user.Parent;
			bpsp.RelativeParams["RP"] = UuidHelper.NewUuidString();
			bpsp.ApplicationRuntimeParameters["context"] = UuidHelper.NewUuidString();
			bpsp.ResourceID = UuidHelper.NewUuidString();
			bpsp.DefaultTaskTitle = UuidHelper.NewUuidString();
			bpsp.StartupContext = UuidHelper.NewUuidString();

			data.BranchParams.Add(bpsp);

			string serilizedData = JSONSerializerExecute.Serialize(data);

			Console.WriteLine(serilizedData);

			WfBranchProcessTransferParams deserilizedData = JSONSerializerExecute.Deserialize<WfBranchProcessTransferParams>(serilizedData);

			Assert.AreEqual(data.Template.Key, deserilizedData.Template.Key);
			Assert.AreEqual(data.Template.BranchProcessKey, deserilizedData.Template.BranchProcessKey);

			AssertBranchProcessStartupParams(data.BranchParams[0], deserilizedData.BranchParams[0]);
		}
Example #3
0
        public void WfBranchProcessTransferParamsJsonTest()
        {
            WfConverterHelper.RegisterConverters();

            IUser user = (IUser)OguObjectSettings.GetConfig().Objects[OguObject.requestor.ToString()].Object;

            IWfBranchProcessTemplateDescriptor template = WfProcessTestCommon.CreateTemplate("Consign", user);

            WfBranchProcessTransferParams data = new WfBranchProcessTransferParams(template);

            data.BranchParams.Clear();

            WfBranchProcessStartupParams bpsp = new WfBranchProcessStartupParams(user);

            bpsp.Department           = user.Parent;
            bpsp.RelativeParams["RP"] = UuidHelper.NewUuidString();
            bpsp.ApplicationRuntimeParameters["context"] = UuidHelper.NewUuidString();
            bpsp.ResourceID       = UuidHelper.NewUuidString();
            bpsp.DefaultTaskTitle = UuidHelper.NewUuidString();
            bpsp.StartupContext   = UuidHelper.NewUuidString();

            data.BranchParams.Add(bpsp);

            string serilizedData = JSONSerializerExecute.Serialize(data);

            Console.WriteLine(serilizedData);

            WfBranchProcessTransferParams deserilizedData = JSONSerializerExecute.Deserialize <WfBranchProcessTransferParams>(serilizedData);

            Assert.AreEqual(data.Template.Key, deserilizedData.Template.Key);
            Assert.AreEqual(data.Template.BranchProcessKey, deserilizedData.Template.BranchProcessKey);

            AssertBranchProcessStartupParams(data.BranchParams[0], deserilizedData.BranchParams[0]);
        }
		protected void buttonCallBranchProcess_Click(object sender, EventArgs e)
		{
			WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post,
				"http://localhost/MCSWebApp/WfFormTemplate/Services/WfProcessService.svc",
				WfServiceContentType.Json);

			WfServiceOperationDefinition definition = new WfServiceOperationDefinition(address, "StartBranchProcesses");

			WfServiceOperationParameter p1 = new WfServiceOperationParameter("ownerActivityID", UuidHelper.NewUuidString());

			IWfBranchProcessTemplateDescriptor template = new WfBranchProcessTemplateDescriptor("Test");
			WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(template);

			WfServiceOperationParameter p2 = new WfServiceOperationParameter("branchTransferParams", WfSvcOperationParameterType.RuntimeParameter, "transferParams");

			definition.Params.Add(p1);
			definition.Params.Add(p2);

			WfServiceInvoker invoker = new WfServiceInvoker(definition);

			WfServiceInvoker.InvokeContext["transferParams"] = transferParams;

			object result = invoker.Invoke();

			resultLabel.Text = Server.HtmlEncode(result.ToString());
		}
		/// <summary>
		/// 构造并且发送任务到任务列表中
		/// </summary>
		/// <param name="ownerActivityID"></param>
		/// <param name="transferParams"></param>
		/// <returns></returns>
		public static StartBranchProcessTask SendTask(string ownerActivityID, WfBranchProcessTransferParams transferParams)
		{
			StartBranchProcessTask task = CreateTask(ownerActivityID, transferParams);

			InvokeServiceTaskAdapter.Instance.Update(task);

			return task;
		}
        /// <summary>
        /// 构造并且发送任务到任务列表中
        /// </summary>
        /// <param name="ownerActivityID"></param>
        /// <param name="transferParams"></param>
        /// <returns></returns>
        public static StartBranchProcessTask SendTask(string ownerActivityID, WfBranchProcessTransferParams transferParams)
        {
            StartBranchProcessTask task = CreateTask(ownerActivityID, transferParams);

            InvokeServiceTaskAdapter.Instance.Update(task);

            return(task);
        }
Example #7
0
        /// <summary>
        /// 创建任务流程活动中的任务
        /// </summary>
        /// <param name="users"></param>
        /// <returns></returns>
        private SysTask CreateUserTaskInActivity(IEnumerable <IUser> users)
        {
            WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(this.Template, users);

            transferParams.BranchParams.ForEach(bp => bp.ApplicationRuntimeParameters["ProcessName"] = this.Template.DefaultProcessName);

            return(StartBranchProcessTask.CreateTask(this.OwnerActivityID, transferParams));
        }
		public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
		{
			WfBranchProcessTransferParams data = new WfBranchProcessTransferParams();

			data.Template = JSONSerializerExecute.Deserialize<WfBranchProcessTemplateDescriptor>(dictionary["Template"]);
			data.BranchParams.CopyFrom(JSONSerializerExecute.Deserialize<WfBranchProcessStartupParamsCollection>(dictionary["BranchParams"]));

			return data;
		}
Example #9
0
        public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams)
        {
            List <string> result = new List <string>();

            result.Add(UuidHelper.NewUuidString());
            result.Add(UuidHelper.NewUuidString());

            return(result.ToArray());
        }
		public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams)
		{
			List<string> result = new List<string>();

			result.Add(UuidHelper.NewUuidString());
			result.Add(UuidHelper.NewUuidString());

			return result.ToArray();
		}
        /// <summary>
        /// 构造发送流程的任务
        /// </summary>
        /// <param name="ownerActivityID"></param>
        /// <param name="transferParams"></param>
        /// <returns></returns>
        public static StartBranchProcessTask CreateTask(string ownerActivityID, WfBranchProcessTransferParams transferParams)
        {
            StartBranchProcessTask task = new StartBranchProcessTask(ownerActivityID, transferParams);

            task.TaskID     = UuidHelper.NewUuidString();
            task.ResourceID = ownerActivityID;
            task.TaskTitle  = string.Format("启动活动{0}的子流程", ownerActivityID);

            return(task);
        }
		/// <summary>
		/// 构造发送流程的任务
		/// </summary>
		/// <param name="ownerActivityID"></param>
		/// <param name="transferParams"></param>
		/// <returns></returns>
		public static StartBranchProcessTask CreateTask(string ownerActivityID, WfBranchProcessTransferParams transferParams)
		{
			StartBranchProcessTask task = new StartBranchProcessTask(ownerActivityID, transferParams);

			task.TaskID = UuidHelper.NewUuidString();
			task.ResourceID = ownerActivityID;
			task.TaskTitle = string.Format("启动活动{0}的子流程", ownerActivityID);

			return task;
		}
        protected override void OnModifyWorkflow(WfExecutorDataContext dataContext)
        {
            this.TargetActivity.Process.Committed = true;

            WfBranchProcessTransferParams bptp = new WfBranchProcessTransferParams(
                WfTemplateBuilder.CreateDefaultCirculationTemplate("Circulate", this.Circulators));

            WfRuntime.ProcessContext.AfterStartupBranchProcess += new WfAfterStartupBranchProcessHandler(WfActivityRelativeExecutorBase.AfterStartupBranchProcess);

            this.TargetActivity.StartupBranchProcesses(bptp);
        }
		public WfStartBranchProcessExecutor(IWfActivity operatorActivity, IWfActivity ownerActivity, WfBranchProcessTransferParams branchTransferParams)
			: base(operatorActivity, WfControlOperationType.StartBranchProcess)
		{
			ownerActivity.NullCheck("ownerActivity");
			branchTransferParams.NullCheck("branchTransferParams");

			this.OwnerActivity = ownerActivity;
			this.BranchTransferParams = branchTransferParams;

			if (this.OperatorActivity == null)
				this.OperatorActivity = ownerActivity;
		}
        public StartBranchProcessTask(string ownerActivityID, WfBranchProcessTransferParams transferParams)
            : base()
        {
            ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID");
            transferParams.NullCheck("transferParams");

            this.OwnerActivityID = ownerActivityID;
            this.TransferParams  = transferParams;

            this.InitServiceDefinitions();
            this.Context["transferParams"] = this.TransferParams;
        }
		public StartBranchProcessTask(string ownerActivityID, WfBranchProcessTransferParams transferParams)
			: base()
		{
			ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID");
			transferParams.NullCheck("transferParams");

			this.OwnerActivityID = ownerActivityID;
			this.TransferParams = transferParams;

			this.InitServiceDefinitions();
			this.Context["transferParams"] = this.TransferParams;
		}
Example #17
0
        public void ClientToServer(IEnumerable <WfClientBranchProcessTransferParams> client, ICollection <WfBranchProcessTransferParams> server)
        {
            client.NullCheck("client");

            foreach (WfClientBranchProcessTransferParams ct in client)
            {
                WfBranchProcessTransferParams st = null;

                WfClientBranchProcessTransferParamsConverter.Instance.ClientToServer(ct, ref st);

                server.Add(st);
            }
        }
Example #18
0
        public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams)
        {
            ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID");
            branchTransferParams.NullCheck("branchTransferParams");

            IWfProcess process = WfRuntime.GetProcessByActivityID(ownerActivityID);

            IWfActivity ownerActivity = process.Activities[ownerActivityID];

            WfStartBranchProcessExecutor executor = new WfStartBranchProcessExecutor(ownerActivity, ownerActivity, branchTransferParams);

            executor.Execute();

            List <string> startedProcessIDs = new List <string>();

            executor.StartedProcesses.ForEach(p => startedProcessIDs.Add(p.ID));

            return(startedProcessIDs.ToArray());
        }
Example #19
0
        public WfBranchProcessTransferParams ClientToServer(WfClientBranchProcessTransferParams client, ref WfBranchProcessTransferParams server)
        {
            client.NullCheck("client");
            client.Template.NullCheck("Template");

            if (server == null)
            {
                server = new WfBranchProcessTransferParams();
            }

            WfBranchProcessTemplateDescriptor serverTemplate = null;

            WfClientBranchProcessTemplateDescriptorConverter.Instance.ClientToServer(client.Template, ref serverTemplate);
            server.Template = serverTemplate;

            WfClientBranchProcessStartupParamsCollectionConverter.Instance.ClientToServer(client.BranchParams, server.BranchParams);

            return(server);
        }
Example #20
0
        public void ExitMaintainingStatusTaskTest()
        {
            IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

            IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

            MoveToExecutor(process);

            process = WfRuntime.GetProcessByProcessID(process.ID);
            IWfActivity ownerActivity = process.CurrentActivity;

            WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]);

            Console.WriteLine("Process ID: {0}", process.ID);

            ExecuteAndAssertTask(() => ExitMaintainingStatusTask.SendTask(ownerActivity.ID, process.ID, true));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.AreEqual(WfProcessStatus.Completed, process.Status);
        }
		public void StartBranchProcessTaskTest()
		{
			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);

			WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]);

			ExecuteAndAssertTask(() => StartBranchProcessTask.SendTask(ownerActivity.ID, transferParams));

			WfRuntime.ClearCache();

			process = WfRuntime.GetProcessByProcessID(process.ID);

			Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0);
			Assert.IsTrue(process.CurrentActivity.BranchProcessGroups[0].Branches.Count > 0);
		}
Example #22
0
        public void StartBranchProcessTaskTest()
        {
            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);

            WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]);

            ExecuteAndAssertTask(() => StartBranchProcessTask.SendTask(ownerActivity.ID, transferParams));

            WfRuntime.ClearCache();

            process = WfRuntime.GetProcessByProcessID(process.ID);

            Assert.IsTrue(process.CurrentActivity.BranchProcessGroups.Count > 0);
            Assert.IsTrue(process.CurrentActivity.BranchProcessGroups[0].Branches.Count > 0);
        }
Example #23
0
        private WfServiceStartupProcessParams PrepareOneServiceStartupProcessParams(WfBranchProcessTransferParams branchParams, IWfBranchProcessGroup group, int index)
        {
            IWfBranchProcessTemplateDescriptor template = branchParams.Template;
            WfBranchProcessStartupParams branchStartupParams = branchParams.BranchParams[index];

            WfServiceStartupProcessParams startupParams = new WfServiceStartupProcessParams();

            startupParams.Creator = this.Process.Creator;

            if (branchStartupParams.Department == null)
                startupParams.Department = this.Process.OwnerDepartment;
            else
                startupParams.Department = branchStartupParams.Department;

            startupParams.Assignees = branchStartupParams.Assignees.ToUsers();

            if (branchStartupParams.DefaultTaskTitle.IsNullOrEmpty())
            {
                if (startupParams.DefaultTaskTitle.IsNullOrEmpty())
                    startupParams.DefaultTaskTitle = this.Process.Descriptor.DefaultTaskTitle;
                else
                    startupParams.DefaultTaskTitle = this.Descriptor.TaskTitle;
            }
            else
                startupParams.DefaultTaskTitle = branchStartupParams.DefaultTaskTitle;

            if (branchStartupParams.ResourceID.IsNullOrEmpty())
            {
                WfSubProcessResourceMode mode = template.Properties.GetValue("CreateResourceMode", WfSubProcessResourceMode.DependsOnProcess);
                switch (mode)
                {
                    //这里的规则是什么?
                    case WfSubProcessResourceMode.DependsOnProcess:
                        startupParams.ResourceID = this.Process.ResourceID;
                        break;
                    case WfSubProcessResourceMode.SameWithRoot:
                        startupParams.ResourceID = this.Process.ResourceID;
                        break;
                    case WfSubProcessResourceMode.NewCreate:
                        startupParams.ResourceID = UuidHelper.NewUuidString();
                        break;
                }

            }
            else
                startupParams.ResourceID = branchStartupParams.ResourceID;

            startupParams.OwnerActivityID = this.ID;
            startupParams.OwnerTemplateKey = template.Key;
            startupParams.Sequence = index;
            startupParams.RelativeParams = new Dictionary<object, object>();

            foreach (var strpar in branchStartupParams.RelativeParams.AllKeys)
            {
                startupParams.RelativeParams.Add(strpar, this.Process.ApplicationRuntimeParameters[branchStartupParams.RelativeParams[strpar]]);
            }

            if (!string.IsNullOrEmpty(template.DefaultUrl))
                startupParams.DefaultURL = template.DefaultUrl;
            else if (!string.IsNullOrEmpty(this.Descriptor.Url))
                startupParams.DefaultURL = this.Descriptor.Url;
            else
                startupParams.DefaultURL = this.Process.Descriptor.Url;

            //如果是串行执行,且不是第一个流程,则不启动第一个活动,子流程处于未启动状态
            if (template.ExecuteSequence == WfBranchProcessExecuteSequence.Serial && index > 0)
                startupParams.AutoStartInitialActivity = false;

            return startupParams;
        }
		public string[] StartBranchProcesses(string ownerActivityID, WfBranchProcessTransferParams branchTransferParams)
		{
			ownerActivityID.CheckStringIsNullOrEmpty("ownerActivityID");
			branchTransferParams.NullCheck("branchTransferParams");

			IWfProcess process = WfRuntime.GetProcessByActivityID(ownerActivityID);

			IWfActivity ownerActivity = process.Activities[ownerActivityID];

			WfStartBranchProcessExecutor executor = new WfStartBranchProcessExecutor(ownerActivity, ownerActivity, branchTransferParams);

			executor.Execute();

			List<string> startedProcessIDs = new List<string>();

			executor.StartedProcesses.ForEach(p => startedProcessIDs.Add(p.ID));

			return startedProcessIDs.ToArray();
		}
		/// <summary>
		/// 创建任务流程活动中的任务
		/// </summary>
		/// <param name="users"></param>
		/// <returns></returns>
		private SysTask CreateUserTaskInActivity(IEnumerable<IUser> users)
		{
			WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(this.Template, users);

			transferParams.BranchParams.ForEach(bp => bp.ApplicationRuntimeParameters["ProcessName"] = this.Template.DefaultProcessName);

			return StartBranchProcessTask.CreateTask(this.OwnerActivityID, transferParams);
		}
Example #26
0
        public static void AreSame(this WfClientBranchProcessTransferParams expected, WfBranchProcessTransferParams actual)
        {
            expected.Template.AreSame(actual.Template);

            expected.BranchParams.AreSame(actual.BranchParams);
        }
Example #27
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;
        }
        public static void AreSame(this WfClientBranchProcessTransferParams expected, WfBranchProcessTransferParams actual)
        {
            expected.Template.AreSame(actual.Template);

            expected.BranchParams.AreSame(actual.BranchParams);
        }
Example #29
0
        private WfProcessStartupParams PrepareOneBranchProcessStartupParams(WfBranchProcessTransferParams branchTransferParams, IWfBranchProcessGroup group, int index)
        {
            IWfBranchProcessTemplateDescriptor template = branchTransferParams.Template;
            WfBranchProcessStartupParams branchStartupParams = branchTransferParams.BranchParams[index];

            //准备启动子流程的参数
            //先检查有没有预定义好的分支流程
            IWfProcessDescriptor subProcessDesp = null;

            using (WfApplicationParametersContext apContext = WfApplicationParametersContext.CreateContext(branchStartupParams.ApplicationRuntimeParameters))
            {
                subProcessDesp = template.GetBranchProcessDescriptor();
            }

            if (template.DefaultProcessName.IsNotEmpty())
            {
                string runtimeProcessName = this.Process.ApplicationRuntimeParameters.GetMatchedString(template.DefaultProcessName);

                if (runtimeProcessName.IsNullOrEmpty())
                    runtimeProcessName = template.DefaultProcessName;

                if (runtimeProcessName.IsNullOrEmpty())
                    ((WfProcessDescriptor)subProcessDesp).Name = runtimeProcessName;

                if (subProcessDesp.InitialActivity != null && subProcessDesp.InitialActivity.Name.IsNullOrEmpty())
                    ((WfActivityDescriptor)subProcessDesp.InitialActivity).Name = runtimeProcessName;
            }

            if (template.DefaultTaskTitle.IsNotEmpty())
                subProcessDesp.DefaultTaskTitle = template.DefaultTaskTitle;

            if (template.DefaultUrl.IsNotEmpty())
                subProcessDesp.Url = template.DefaultUrl;

            if (subProcessDesp.Url.IsNullOrEmpty())
                subProcessDesp.Url = this.Descriptor.Url.IsNotEmpty() ? this.Descriptor.Url : this.Descriptor.Process.Url;

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.Creator = this.Operator;

            if (branchStartupParams.Department == null)
                startupParams.Department = this.Process.OwnerDepartment;
            else
                startupParams.Department = branchStartupParams.Department;

            startupParams.Assignees.CopyFrom(branchStartupParams.Assignees);
            startupParams.ProcessDescriptor = subProcessDesp;

            if (branchStartupParams.DefaultTaskTitle.IsNullOrEmpty())
            {
                if (startupParams.DefaultTaskTitle.IsNullOrEmpty())
                {
                    if (subProcessDesp.DefaultTaskTitle.IsNotEmpty())
                        startupParams.DefaultTaskTitle = subProcessDesp.DefaultTaskTitle;
                    else
                        startupParams.DefaultTaskTitle = this.Process.Descriptor.DefaultTaskTitle;
                }
                else
                    startupParams.DefaultTaskTitle = this.Descriptor.TaskTitle;
            }
            else
                startupParams.DefaultTaskTitle = branchStartupParams.DefaultTaskTitle;

            if (branchStartupParams.ResourceID.IsNullOrEmpty())
            {
                WfSubProcessResourceMode mode = template.Properties.GetValue("CreateResourceMode", WfSubProcessResourceMode.DependsOnProcess);
                switch (mode)
                {
                    case WfSubProcessResourceMode.DependsOnProcess:
                        if (subProcessDesp.Properties.GetValue("Independent", false))
                            startupParams.ResourceID = UuidHelper.NewUuidString();
                        else
                            startupParams.ResourceID = this.Process.ResourceID;
                        break;
                    case WfSubProcessResourceMode.SameWithRoot:
                        startupParams.ResourceID = this.Process.ResourceID;
                        break;
                    case WfSubProcessResourceMode.NewCreate:
                        startupParams.ResourceID = UuidHelper.NewUuidString();
                        break;
                }

            }
            else
                startupParams.ResourceID = branchStartupParams.ResourceID;

            if (branchStartupParams.RelativeParams.Count == 0)
                startupParams.RelativeParams.CopyFrom(this.Process.RelativeParams);
            else
                startupParams.RelativeParams.CopyFrom(branchStartupParams.RelativeParams);

            startupParams.BranchStartupParams = branchStartupParams;
            startupParams.Group = group;
            startupParams.OwnerActivityID = this.ID;
            startupParams.OwnerTemplateKey = template.Key;
            startupParams.Sequence = index;
            startupParams.AutoCommit = this.Process.Committed;  //子流程的提交属性默认等于主流程的

            branchStartupParams.ApplicationRuntimeParameters.ForEach(kp => startupParams.ApplicationRuntimeParameters.Add(kp.Key, kp.Value));

            //如果是串行执行,且不是第一个流程,则不启动第一个活动,子流程处于未启动状态
            if (template.ExecuteSequence == WfBranchProcessExecuteSequence.Serial && index > 0)
                startupParams.AutoStartInitialActivity = false;

            return startupParams;
        }
		public void ExitMaintainingStatusTaskTest()
		{
			IWfProcessDescriptor processDesp = CreateProcessWithAutoMaintainProperty();

			IWfProcess process = WfProcessTestCommon.StartupProcess(processDesp);

			MoveToExecutor(process);

			process = WfRuntime.GetProcessByProcessID(process.ID);
			IWfActivity ownerActivity = process.CurrentActivity;

			WfBranchProcessTransferParams transferParams = new WfBranchProcessTransferParams(ownerActivity.Descriptor.BranchProcessTemplates[0]);

			Console.WriteLine("Process ID: {0}", process.ID);

			ExecuteAndAssertTask(() => ExitMaintainingStatusTask.SendTask(ownerActivity.ID, process.ID, true));

			WfRuntime.ClearCache();

			process = WfRuntime.GetProcessByProcessID(process.ID);

			Assert.AreEqual(WfProcessStatus.Completed, process.Status);
		}
Example #31
0
        /// <summary>
        /// 内部启动分支流程
        /// </summary>
        /// <param name="branchTransferParams">分支流程启动参数</param>
        /// <param name="addToOwnerBranches"></param>
        /// <returns></returns>
        internal WfProcessCollection InternalStartupBranchProcesses(WfBranchProcessTransferParams branchTransferParams, bool addToOwnerBranches)
        {
            WfProcessCollection processes = null;

            if (CanStartBranchProcessFromTemplate(branchTransferParams.Template))
            {
                IWfBranchProcessGroup group = this.BranchProcessGroups[branchTransferParams.Template.Key];

                //以模版Key为分支流程实例的分组标准
                if (group == null)
                {
                    group = new WfBranchProcessGroup(this, branchTransferParams.Template);
                    this.BranchProcessGroups.Add(group);
                }

                WfRuntime.ProcessContext.FirePrepareBranchProcessParams(group, branchTransferParams.BranchParams);

                ProcessProgress.Current.MaxStep += branchTransferParams.BranchParams.Count;
                ProcessProgress.Current.Response();

                //根据模板内的分支流程参数,逐一启动具体流程
                for (int i = 0; i < branchTransferParams.BranchParams.Count; i++)
                {
                    //processes = StartupBranchProcess(branchTransferParams, group, group.BranchProcessStatistics.MaxSequence++);
                    processes = StartupBranchProcess(branchTransferParams, group, i);

                    processes.ForEach(p =>
                    {
                        if (addToOwnerBranches)
                        {
                            if (group.Branches.Contains(p) == false)
                            {
                                group.Branches.Add(p);
                            }
                        }

                        WfRuntime.ProcessContext.FireAfterStartupBranchProcess(p);
                    });

                    ProcessProgress.Current.MaxStep = Math.Max(ProcessProgress.Current.MaxStep, ProcessProgress.Current.CurrentStep + processes.Count);
                    ProcessProgress.Current.IncrementBy(processes.Count);
                    ProcessProgress.Current.Response();
                }

                WfRuntime.ProcessContext.AffectedProcesses.AddOrReplace(this.Process);
            }

            if (processes == null)
                processes = new WfProcessCollection();

            return processes;
        }
Example #32
0
 /// <summary>
 /// 启动分支流程
 /// </summary>
 /// <param name="branchTransferParams">启动分支流程的参数,里面包括一个分支流程模板</param>
 public void StartupBranchProcesses(WfBranchProcessTransferParams branchTransferParams)
 {
     InternalStartupBranchProcesses(branchTransferParams, true);
 }