internal protected override void DoOperation()
		{
			StartupParams.ResourceID = UuidHelper.NewUuidString();

			if (this.ApplicationName.IsNotEmpty())
				StartupParams.ProcessDescriptor.ApplicationName = this.ApplicationName;

			if (this.ProgramName.IsNotEmpty())
				StartupParams.ProcessDescriptor.ProgramName = this.ProgramName;

			if (string.IsNullOrEmpty(StartupParams.ProcessDescriptor.Url))
				StartupParams.ProcessDescriptor.Url = WfClientContext.Current.EntryUri.ToString();

			if (StartupParams.ProcessDescriptor.InitialActivity != null)
				StartupParams.ProcessDescriptor.InitialActivity.Properties.SetValue("AutoSendUserTask", false);

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, StartupParams);

			executor.PrepareApplicationData += new ExecutorEventHandler(StartWorkflowExecutor_PrepareApplicationData);
			//需要触发相关的事件

			WfClientContext.Current.Execute(executor);

			PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("SetScene", () =>
				{
					if (WfClientContext.Current.CurrentActivity.Status == WfActivityStatus.Running)
						SetSceneByActivity(WfClientContext.Current.CurrentActivity);
					else
						SetReadOnlyScene(WfClientContext.Current.CurrentActivity);
				});

			//需要导航到目标视图
			TransferToTargetView();
		}
Esempio n. 2
0
        private void StartWorkflow()
        {
            WfProcessStartupParams  startupParams = GenerateStartupParams();
            WfStartWorkflowExecutor executor      = new WfStartWorkflowExecutor(null, startupParams);

            executor.Execute();
        }
Esempio n. 3
0
        /// <summary>
        /// 带上下文参数的启动流程
        /// </summary>
        /// <param name="processDesp"></param>
        /// <returns></returns>
        public static IWfProcess StartupProcessByExecutor(this IWfProcessDescriptor processDesp, Dictionary <string, object> runtimeParameters = null)
        {
            WfProcessStartupParams startupParams = processDesp.PrepareStartupParams(runtimeParameters);

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams);

            return(executor.Execute());
        }
        public WfClientProcessInfo StartWorkflow(WfClientProcessStartupParams clientStartupParams)
        {
            if (clientStartupParams == null)
            {
                throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程的启动参数不能为空"));
            }

            //设置标准参数,优先使用外部参数
            if (!clientStartupParams.ApplicationRuntimeParameters.ContainsKey("ProcessRequestor"))
            {
                clientStartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = clientStartupParams.Creator;
            }

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessStartupParams startupParams = null;

            WfClientProcessStartupParamsConverter.Instance.ClientToServer(clientStartupParams, ref startupParams);

            IWfProcess process = null;

            DoPrincipalAction(startupParams.Creator, () =>
            {
                WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams);

                executor.AfterModifyWorkflow += (dataContext =>
                {
                    dataContext.CurrentProcess.GenerateCandidatesFromResources();
                    clientStartupParams.ProcessContext.ForEach(kp => dataContext.CurrentProcess.Context[kp.Key] = kp.Value);

                    WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity(
                        clientStartupParams.Opinion,
                        dataContext.CurrentProcess.CurrentActivity,
                        clientStartupParams.Creator,
                        clientStartupParams.Creator);
                });

                executor.SaveApplicationData += (dataContext) => SaveOpinion(clientStartupParams.Opinion);

                if (clientStartupParams.AutoPersist)
                {
                    process = executor.Execute();
                }
                else
                {
                    process = executor.ExecuteNotPersist();
                }
            });

            return(process.ToClientProcessInfo(clientStartupParams.Creator).FillCurrentOpinion(process.CurrentActivity, clientStartupParams.Creator));
        }
Esempio n. 5
0
        private static string GetStartWorkflowResourceID(IUser user)
        {
            IWfProcessDescriptor     procDesp = WfProcessTestCommon.CreateProcessDescriptor();
            WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user);

            procDesp.InitialActivity.Resources.Add(userDesp);

            WfProcessStartupParams  startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp);
            WfStartWorkflowExecutor exec        = new WfStartWorkflowExecutor(null, startParams);

            exec.Execute();

            return(startParams.ResourceID);
        }
Esempio n. 6
0
        public void AddApproverExecutorTest()
        {
            //Initial  NormalActivity  NormalActivity1 NormalActivity2 NormalActivity3 Completed
            IUser user = (IUser)OguObjectSettings.GetConfig().Objects["requestor"].Object;

            IWfProcessDescriptor     procDesp = WfProcessTestCommon.CreateProcessDescriptor();
            WfUserResourceDescriptor userDesp = new WfUserResourceDescriptor(user);

            procDesp.InitialActivity.Resources.Add(userDesp);

            WfProcessStartupParams  startParams = WfProcessTestCommon.GetInstanceOfWfProcessStartupParams(procDesp);
            WfStartWorkflowExecutor exec        = new WfStartWorkflowExecutor(null, startParams);
            IWfProcess proc = exec.Execute();             //启动流程

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

            MoveToExecutor(wfp);            //流转一步 ,即第2个节点

            IWfProcess           p         = WfRuntime.GetProcessByProcessID(proc.ID);
            WfAssigneeCollection assignees = new WfAssigneeCollection();

            assignees.Add((IUser)OguObjectSettings.GetConfig().Objects[OguObject.approver1.ToString()].Object);

            WfAddApproverExecutor addExec = new WfAddApproverExecutor(p.CurrentActivity, p.CurrentActivity, assignees);

            addExec.Execute();             //加签,即流转到加签点上

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

            Assert.AreEqual(process.Descriptor.GetMainStreamActivities().Count, process.Activities.Count - 2, "动态添加两个活动,因被加签人要回到加签人");
            Assert.AreEqual(2, process.ElapsedActivities.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(process.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(process.CurrentActivity.Descriptor.ToTransitions.Count == 1);
            Assert.IsNotNull(process.CurrentActivity.Descriptor.ToTransitions[0].ToActivity);

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

            WfWithdrawExecutor withdrawExec = new WfWithdrawExecutor(wfProcess9.CurrentActivity, wfProcess9.CurrentActivity);

            withdrawExec.Execute();

            IWfProcess wfProcess1 = WfRuntime.GetProcessByProcessID(wfProcess9.ID);

            Assert.AreEqual(wfProcess1.Activities.Count, wfProcess1.Descriptor.GetMainStreamActivities().Count, "此处应该撤回到加签的活动点上,同时被加签的两个点都应该移除");
            Assert.AreEqual(1, wfProcess1.ElapsedActivities.Count);
            Assert.IsTrue(ProcessTestHelper.ExistsActivityUserTasks(wfProcess1.CurrentActivity.ID, TaskStatus.Ban));
            Assert.IsTrue(wfProcess1.CurrentActivity.Descriptor.ToTransitions.Count == 1);
        }
        internal protected override void DoOperation()
        {
            StartupParams.ResourceID = UuidHelper.NewUuidString();

            if (this.ApplicationName.IsNotEmpty())
            {
                StartupParams.ProcessDescriptor.ApplicationName = this.ApplicationName;
            }

            if (this.ProgramName.IsNotEmpty())
            {
                StartupParams.ProcessDescriptor.ProgramName = this.ProgramName;
            }

            if (string.IsNullOrEmpty(StartupParams.ProcessDescriptor.Url))
            {
                StartupParams.ProcessDescriptor.Url = WfClientContext.Current.EntryUri.ToString();
            }

            if (StartupParams.ProcessDescriptor.InitialActivity != null)
            {
                StartupParams.ProcessDescriptor.InitialActivity.Properties.SetValue("AutoSendUserTask", false);
            }

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, StartupParams);

            executor.PrepareApplicationData += new ExecutorEventHandler(StartWorkflowExecutor_PrepareApplicationData);
            //需要触发相关的事件

            WfClientContext.Current.Execute(executor);

            PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("SetScene", () =>
            {
                if (WfClientContext.Current.CurrentActivity.Status == WfActivityStatus.Running)
                {
                    SetSceneByActivity(WfClientContext.Current.CurrentActivity);
                }
                else
                {
                    SetReadOnlyScene(WfClientContext.Current.CurrentActivity);
                }
            });

            //需要导航到目标视图
            TransferToTargetView();
        }
        public WfClientProcessInfo StartWorkflow(WfClientProcessStartupParams clientStartupParams)
        {
            if (clientStartupParams == null)
                throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程的启动参数不能为空"));

            //设置标准参数,优先使用外部参数
            if (!clientStartupParams.ApplicationRuntimeParameters.ContainsKey("ProcessRequestor")) 
                clientStartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = clientStartupParams.Creator; 

            OperationContext.Current.FillContextToOguServiceContext();

            WfProcessStartupParams startupParams = null;

            WfClientProcessStartupParamsConverter.Instance.ClientToServer(clientStartupParams, ref startupParams);

            IWfProcess process = null;

            DoPrincipalAction(startupParams.Creator, () =>
            {
                WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams);

                executor.AfterModifyWorkflow += (dataContext =>
                {
                    dataContext.CurrentProcess.GenerateCandidatesFromResources();
                    clientStartupParams.ProcessContext.ForEach(kp => dataContext.CurrentProcess.Context[kp.Key] = kp.Value);

                    WfClientProcessInfoBaseConverter.Instance.FillOpinionInfoByProcessByActivity(
                        clientStartupParams.Opinion,
                        dataContext.CurrentProcess.CurrentActivity,
                        clientStartupParams.Creator,
                        clientStartupParams.Creator);
                });

                executor.SaveApplicationData += (dataContext) => SaveOpinion(clientStartupParams.Opinion);

                if (clientStartupParams.AutoPersist)
                    process = executor.Execute();
                else
                    process = executor.ExecuteNotPersist();
            });

            return process.ToClientProcessInfo(clientStartupParams.Creator).FillCurrentOpinion(process.CurrentActivity, clientStartupParams.Creator);
        }
Esempio n. 9
0
        public void StartWorkflowAndMoveToNextDefaultExecutorTest()
        {
            IWfProcessDescriptor processDesp = ProcessHelper.CreateFreeStepsProcessDescriptor(OguObjectSettings.GetConfig().Objects["approver1"].User);

            WfProcessStartupParams startupParams = processDesp.PrepareStartupParams();

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

            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);
            Assert.AreEqual(processLoaded.CurrentActivity.FromTransitionDescriptor, processLoaded.InitialActivity.ToTransitionDescriptor);
        }
Esempio n. 10
0
        /// <summary>
        /// 启动工作流
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static WfClientProcess Startup(WfClientStartupParameters parameters)
        {
            //获取启动工作流的用户
            IUser user = DeluxeIdentity.CurrentUser;

            //设置启动参数
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = WorkflowSettings.GetConfig().GetDescriptorManager().GetDescriptor(parameters.ProcessKey);
            startupParams.Creator           = user;
            startupParams.Assignees.Add(user);
            startupParams.ResourceID         = parameters.ResourceID.ToString();
            startupParams.AutoCommit         = true;
            startupParams.DefaultTaskTitle   = parameters.TaskTitle;
            startupParams.DefaultUrl         = parameters.TaskUrl;
            startupParams.RuntimeProcessName = parameters.RuntimeProcessName;

            //设置工作流运行时参数
            SetWorkflowParameters(parameters.ProcessParameters, startupParams.ApplicationRuntimeParameters);

            //准备执行器
            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams, null, true);

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

            //添加审批意见
            executor.AfterSaveApplicationData += (dataContext) =>
            {
                PrepareStartupOpinions(dataContext, user, "请审批");
            };

            IWfProcess process = executor.Execute();

            return(GetClientProcess(process));
        }
Esempio n. 11
0
        /// <summary>
        /// 启动默认的流程
        /// </summary>
        private void StartDefaultWorkflow()
        {
            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ResourceID        = UuidHelper.NewUuidString();
            startupParams.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(DefaultProcessKey);

            if (string.IsNullOrEmpty(startupParams.ProcessDescriptor.Url))
            {
                startupParams.ProcessDescriptor.Url = WfClientContext.Current.EntryUri.ToString();
            }

            if (startupParams.ProcessDescriptor.InitialActivity != null)
            {
                startupParams.ProcessDescriptor.InitialActivity.Properties.SetValue("AutoSendUserTask", false);
            }

            startupParams.Department = DeluxeIdentity.CurrentUser.TopOU;
            startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams);

            WfClientContext.Current.Execute(executor);
        }
Esempio n. 12
0
        public static WfClientProcess Startup(WfClientStartupFreeStepsParameters parameters, string viewUrl)
        {
            parameters.NullCheck("parameters");
            parameters.Approvers.NullCheck("Approvers");

            (parameters.Approvers.Count > 0).FalseThrow("必须包含至少一个以上的审批人");

            WfProcessDescriptor processDesc = new WfProcessDescriptor();

            processDesc.Key             = UuidHelper.NewUuidString();
            processDesc.Name            = "自由流程";
            processDesc.ApplicationName = "秘书服务";
            processDesc.ProgramName     = "部门通知";

            WfActivityDescriptor initActDesp = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);

            initActDesp.Name     = "起草";
            initActDesp.CodeName = "Initial Activity";
            initActDesp.Properties.SetValue("AutoSendUserTask", false);
            initActDesp.Properties.TrySetValue("AllowWithdraw", true);

            processDesc.Activities.Add(initActDesp);

            foreach (IUser user in parameters.Approvers)
            {
                string key = processDesc.FindNotUsedActivityKey();
                WfActivityDescriptor normalActDesp = new WfActivityDescriptor(key, WfActivityType.NormalActivity);
                normalActDesp.Name     = user.DisplayName;
                normalActDesp.CodeName = key;
                normalActDesp.Properties.SetValue("AutoAppendSecretary", true);

                WfUserResourceDescriptor userResourceDesc = new WfUserResourceDescriptor(user);
                normalActDesp.Resources.Add(userResourceDesc);

                processDesc.Activities.Add(normalActDesp);
            }

            WfActivityDescriptor completedActDesp = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);

            completedActDesp.Name     = "完成";
            completedActDesp.CodeName = "Completed Activity";

            processDesc.Activities.Add(completedActDesp);

            for (int j = 0; j < processDesc.Activities.Count - 1; j++)
            {
                processDesc.Activities[j].ToTransitions.AddForwardTransition(processDesc.Activities[j + 1]);
            }

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesc;
            startupParams.Creator           = DeluxeIdentity.CurrentUser;
            startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
            startupParams.DefaultTaskTitle   = "${Subject}$";
            startupParams.RuntimeProcessName = "${Subject}$";
            startupParams.ResourceID         = UuidHelper.NewUuidString();
            startupParams.Department         = DeluxeIdentity.CurrentUser.Parent;
            startupParams.DefaultUrl         = viewUrl;

            string subject = parameters.Title;

            if (subject.IsNullOrEmpty())
            {
                subject = "自由审批流程";
            }

            startupParams.ApplicationRuntimeParameters["Subject"] = subject;

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

            //添加审批意见
            executor.AfterSaveApplicationData += (dataContext) =>
            {
                PrepareStartupOpinions(dataContext, DeluxeIdentity.CurrentUser, "请审批");
            };

            IWfProcess process = executor.Execute();

            return(GetClientProcess(process));
        }
Esempio n. 13
0
		/// <summary>
		/// 启动默认的流程
		/// </summary>
		private void StartDefaultWorkflow()
		{
			WfProcessStartupParams startupParams = new WfProcessStartupParams();

			startupParams.ResourceID = UuidHelper.NewUuidString();
			startupParams.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(DefaultProcessKey);

			if (string.IsNullOrEmpty(startupParams.ProcessDescriptor.Url))
				startupParams.ProcessDescriptor.Url = WfClientContext.Current.EntryUri.ToString();

			if (startupParams.ProcessDescriptor.InitialActivity != null)
				startupParams.ProcessDescriptor.InitialActivity.Properties.SetValue("AutoSendUserTask", false);

			startupParams.Department = DeluxeIdentity.CurrentUser.TopOU;
			startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams);

			WfClientContext.Current.Execute(executor);
		}
Esempio n. 14
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            string returnUrl = Request.QueryString.GetValue("ru", string.Empty);

            WfProcessDescriptor processDesc = new WfProcessDescriptor();

            processDesc.Key              = UuidHelper.NewUuidString();
            processDesc.Name             = "自由流程";
            processDesc.ApplicationName  = "秘书服务";
            processDesc.ProgramName      = "部门通知";
            processDesc.Url              = returnUrl;
            processDesc.DefaultTaskTitle = "${Subject}$";

            WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);

            initAct.Name     = "起草";
            initAct.CodeName = "Initial Activity";
            initAct.Properties.SetValue("AutoSendUserTask", false);
            initAct.Properties.TrySetValue("AllowWithdraw", true);

            processDesc.Activities.Add(initAct);

            foreach (IUser user in processUsers.SelectedOuUserData)
            {
                string key = processDesc.FindNotUsedActivityKey();
                WfActivityDescriptor normalAct = new WfActivityDescriptor(key, WfActivityType.NormalActivity);
                normalAct.Name     = user.DisplayName;
                normalAct.CodeName = key;
                normalAct.Properties.SetValue("AutoAppendSecretary", true);
                //normalAct.ActivityType = WfActivityType.NormalActivity;

                WfUserResourceDescriptor userResourceDesc = new WfUserResourceDescriptor(user);
                normalAct.Resources.Add(userResourceDesc);

                processDesc.Activities.Add(normalAct);
            }

            WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);

            completedAct.Name     = "完成";
            completedAct.CodeName = "Completed Activity";

            processDesc.Activities.Add(completedAct);

            for (int j = 0; j < processDesc.Activities.Count - 1; j++)
            {
                processDesc.Activities[j].ToTransitions.AddForwardTransition(processDesc.Activities[j + 1]);
            }

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesc;
            startupParams.Creator           = DeluxeIdentity.CurrentUser;
            startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
            startupParams.DefaultTaskTitle   = "${Subject}$";
            startupParams.RuntimeProcessName = "${Subject}$";
            startupParams.ResourceID         = UuidHelper.NewUuidString();
            startupParams.Department         = DeluxeIdentity.CurrentUser.Parent;

            string relativeParams = Request.QueryString["relativeParams"];

            if (relativeParams.IsNotEmpty())
            {
                startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams));
            }

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams);

            executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow);
            executor.Execute();

            IWfProcess process = WfClientContext.Current.OriginalActivity.Process;

            returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams");

            Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}",
                                            returnUrl, process.ResourceID, process.CurrentActivity.ID));
        }
Esempio n. 15
0
        /// <summary>
        /// 带上下文参数的启动流程
        /// </summary>
        /// <param name="processDesp"></param>
        /// <returns></returns>
        public static IWfProcess StartupProcessByExecutor(this IWfProcessDescriptor processDesp, Dictionary<string, object> runtimeParameters = null)
        {
            WfProcessStartupParams startupParams = processDesp.PrepareStartupParams(runtimeParameters);

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(startupParams);

            return executor.Execute();
        }
		protected void btnOK_Click(object sender, EventArgs e)
		{
			string returnUrl = Request.QueryString.GetValue("ru", string.Empty);

			WfProcessDescriptor processDesc = new WfProcessDescriptor();

			processDesc.Key = UuidHelper.NewUuidString();
			processDesc.Name = "自由流程";
			processDesc.ApplicationName = "秘书服务";
			processDesc.ProgramName = "部门通知";
			processDesc.Url = returnUrl;
			processDesc.DefaultTaskTitle = "${Subject}$";

			WfActivityDescriptor initAct = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);
			initAct.Name = "起草";
			initAct.CodeName = "Initial Activity";
			initAct.Properties.SetValue("AutoSendUserTask", false);
			initAct.Properties.TrySetValue("AllowWithdraw", true);

			processDesc.Activities.Add(initAct);

			foreach (IUser user in processUsers.SelectedOuUserData)
			{
				string key = processDesc.FindNotUsedActivityKey();
				WfActivityDescriptor normalAct = new WfActivityDescriptor(key, WfActivityType.NormalActivity);
				normalAct.Name = user.DisplayName;
				normalAct.CodeName = key;
				normalAct.Properties.SetValue("AutoAppendSecretary", true);
				//normalAct.ActivityType = WfActivityType.NormalActivity;

				WfUserResourceDescriptor userResourceDesc = new WfUserResourceDescriptor(user);
				normalAct.Resources.Add(userResourceDesc);

				processDesc.Activities.Add(normalAct);
			}

			WfActivityDescriptor completedAct = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);
			completedAct.Name = "完成";
			completedAct.CodeName = "Completed Activity";

			processDesc.Activities.Add(completedAct);

			for (int j = 0; j < processDesc.Activities.Count - 1; j++)
			{
				processDesc.Activities[j].ToTransitions.AddForwardTransition(processDesc.Activities[j + 1]);
			}

			WfProcessStartupParams startupParams = new WfProcessStartupParams();
			startupParams.ProcessDescriptor = processDesc;
			startupParams.Creator = DeluxeIdentity.CurrentUser;
			startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
			startupParams.DefaultTaskTitle = "${Subject}$";
			startupParams.RuntimeProcessName = "${Subject}$";
			startupParams.ResourceID = UuidHelper.NewUuidString();
			startupParams.Department = DeluxeIdentity.CurrentUser.Parent;

			string relativeParams = Request.QueryString["relativeParams"];

			if (relativeParams.IsNotEmpty())
				startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams));

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams);

			executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow);
			executor.Execute();

			IWfProcess process = WfClientContext.Current.OriginalActivity.Process;

			returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams");

			Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}",
				returnUrl, process.ResourceID, process.CurrentActivity.ID));
		}
        /// <summary>
        /// 准备流程
        /// </summary>
        private void PrepareProcess()
        {
            string returnUrl = Request.QueryString.GetValue("ru", string.Empty);

            WfProcessDescriptor processDesp = new WfProcessDescriptor();

            processDesp.Key              = UuidHelper.NewUuidString();
            processDesp.Name             = "自由流程";
            processDesp.ApplicationName  = "秘书服务";
            processDesp.ProgramName      = "部门通知";
            processDesp.Url              = returnUrl;
            processDesp.DefaultTaskTitle = "${Subject}$";

            WfActivityDescriptor initDesp = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);

            initDesp.Name     = "起草";
            initDesp.CodeName = "Initial Activity";
            initDesp.Properties.SetValue("AutoSendUserTask", false);

            processDesp.Activities.Add(initDesp);

            processDesp.Activities.Add(PrepareAURelativeActivityDescriptor(processDesp.FindNotUsedActivityKey()));

            WfActivityDescriptor completedActDesp = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);

            completedActDesp.Name     = "完成";
            completedActDesp.CodeName = "Completed Activity";

            processDesp.Activities.Add(completedActDesp);

            for (int i = 0; i < processDesp.Activities.Count - 1; i++)
            {
                processDesp.Activities[i].ToTransitions.AddForwardTransition(processDesp.Activities[i + 1]);
            }

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ApplicationRuntimeParameters["AdministrativeUnit"] = "Group";
            startupParams.ApplicationRuntimeParameters["Amount"]             = "";
            startupParams.ApplicationRuntimeParameters["CostCenter"]         = "1001";
            startupParams.ProcessDescriptor = processDesp;
            startupParams.Creator           = DeluxeIdentity.CurrentUser;
            startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
            startupParams.DefaultTaskTitle = "${Subject}$";
            startupParams.ResourceID       = UuidHelper.NewUuidString();
            startupParams.Department       = DeluxeIdentity.CurrentUser.Parent;

            string relativeParams = Request.QueryString["relativeParams"];

            if (relativeParams.IsNotEmpty())
            {
                startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams));
            }

            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams);

            executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow);
            executor.Execute();

            IWfProcess process = WfClientContext.Current.OriginalActivity.Process;

            returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams");

            HttpContext.Current.Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}",
                                                                returnUrl, process.ResourceID, process.CurrentActivity.ID));
        }
		/// <summary>
		/// 准备流程
		/// </summary>
		private void PrepareProcess()
		{
			string returnUrl = Request.QueryString.GetValue("ru", string.Empty);

			WfProcessDescriptor processDesp = new WfProcessDescriptor();

			processDesp.Key = UuidHelper.NewUuidString();
			processDesp.Name = "自由流程";
			processDesp.ApplicationName = "秘书服务";
			processDesp.ProgramName = "部门通知";
			processDesp.Url = returnUrl;
			processDesp.DefaultTaskTitle = "${Subject}$";

			WfActivityDescriptor initDesp = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);
			initDesp.Name = "起草";
			initDesp.CodeName = "Initial Activity";
			initDesp.Properties.SetValue("AutoSendUserTask", false);

			processDesp.Activities.Add(initDesp);

			processDesp.Activities.Add(PrepareAURelativeActivityDescriptor(processDesp.FindNotUsedActivityKey()));

			WfActivityDescriptor completedActDesp = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);
			completedActDesp.Name = "完成";
			completedActDesp.CodeName = "Completed Activity";

			processDesp.Activities.Add(completedActDesp);

			for (int i = 0; i < processDesp.Activities.Count - 1; i++)
			{
				processDesp.Activities[i].ToTransitions.AddForwardTransition(processDesp.Activities[i + 1]);
			}

			WfProcessStartupParams startupParams = new WfProcessStartupParams();

			startupParams.ApplicationRuntimeParameters["AdministrativeUnit"] = "Group";
			startupParams.ApplicationRuntimeParameters["Amount"] = "";
			startupParams.ApplicationRuntimeParameters["CostCenter"] = "1001";
			startupParams.ProcessDescriptor = processDesp;
			startupParams.Creator = DeluxeIdentity.CurrentUser;
			startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
			startupParams.DefaultTaskTitle = "${Subject}$";
			startupParams.ResourceID = UuidHelper.NewUuidString();
			startupParams.Department = DeluxeIdentity.CurrentUser.Parent;

			string relativeParams = Request.QueryString["relativeParams"];

			if (relativeParams.IsNotEmpty())
				startupParams.RelativeParams.CopyFrom(UriHelper.GetUriParamsCollection(relativeParams));

			WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(WfClientContext.Current.OriginalActivity, startupParams);

			executor.AfterModifyWorkflow += new ExecutorEventHandler(executor_AfterModifyWorkflow);
			executor.Execute();

			IWfProcess process = WfClientContext.Current.OriginalActivity.Process;

			returnUrl = UriHelper.RemoveUriParams(returnUrl, "relativeParams");

			HttpContext.Current.Response.Redirect(string.Format("{0}?resourceID={1}&activityID={2}",
				returnUrl, process.ResourceID, process.CurrentActivity.ID));
		}
Esempio n. 19
0
        public static WfClientProcess DynamicProcessStartup(WfClientDynamicProcessStartupParameters parameters)
        {
            WfProcessDescriptor processDesc = new WfProcessDescriptor();

            processDesc.Key              = string.IsNullOrEmpty(parameters.ProcessKey) ? UuidHelper.NewUuidString() : parameters.ProcessKey;
            processDesc.Name             = parameters.RuntimeProcessName;
            processDesc.ApplicationName  = "动态流程";
            processDesc.ProgramName      = "动态流程";
            processDesc.DefaultTaskTitle = "${TaskTitle}$";
            processDesc.Url              = "${TaskUrl}$";

            processDesc.DefaultTaskTitle = "${Subject}$";

            WfActivityDescriptor initActDesp = new WfActivityDescriptor("Initial", WfActivityType.InitialActivity);

            initActDesp.Name     = parameters.InitialActivityDescriptor.ActivityName;
            initActDesp.CodeName = "Initial Activity";
            initActDesp.Properties.SetValue("AutoSendUserTask", false);
            initActDesp.Properties.TrySetValue("AllowWithdraw", true);

            foreach (WfClientUserResourceDescriptorParameters userResourceDescriptor in parameters.InitialActivityDescriptor.UserResourceList)
            {
                IUser user = userResourceDescriptor.User;
                WfUserResourceDescriptor userResourceDesc = new WfUserResourceDescriptor(user);
                initActDesp.Resources.Add(userResourceDesc);
            }

            processDesc.Activities.Add(initActDesp);

            WfActivityDescriptor completedActDesp = new WfActivityDescriptor("Completed", WfActivityType.CompletedActivity);

            completedActDesp.Name     = "完成";
            completedActDesp.CodeName = "Completed Activity";

            processDesc.Activities.Add(completedActDesp);

            for (int j = 0; j < processDesc.Activities.Count - 1; j++)
            {
                processDesc.Activities[j].ToTransitions.AddForwardTransition(processDesc.Activities[j + 1]);
            }

            WfProcessStartupParams startupParams = new WfProcessStartupParams();

            startupParams.ProcessDescriptor = processDesc;
            startupParams.Creator           = DeluxeIdentity.CurrentUser;
            startupParams.Assignees.Add(DeluxeIdentity.CurrentUser);
            startupParams.ResourceID         = parameters.ResourceID.ToString();
            startupParams.AutoCommit         = true;
            startupParams.DefaultTaskTitle   = parameters.TaskTitle;
            startupParams.DefaultUrl         = parameters.TaskUrl;
            startupParams.RuntimeProcessName = parameters.RuntimeProcessName;
            startupParams.Department         = DeluxeIdentity.CurrentUser.Parent;
            startupParams.RuntimeProcessName = parameters.RuntimeProcessName;

            //设置工作流运行时参数
            SetWorkflowParameters(parameters.ProcessParameters, startupParams.ApplicationRuntimeParameters);

            //准备执行器
            WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams, null, false);   //根据需要设是否自动往下走一步

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

            //添加审批意见
            executor.AfterSaveApplicationData += (dataContext) =>
            {
                //根据实际需要添加审批意见
                //PrepareStartupOpinions(dataContext, user, "请审批");
            };

            IWfProcess process = executor.Execute();

            return(GetClientProcess(process));
        }