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(); }
private void StartWorkflow() { WfProcessStartupParams startupParams = GenerateStartupParams(); WfStartWorkflowExecutor executor = new WfStartWorkflowExecutor(null, startupParams); executor.Execute(); }
/// <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)); }
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); }
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); }
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); }
/// <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)); }
/// <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); }
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)); }
/// <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); }
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> /// <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)); }
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)); }