private static IWfProcessDescriptor LoadProcessDescriptor() { using (FileStream stream = new FileStream("Expense.xml", FileMode.Open, FileAccess.Read)) { return(WfProcessDescriptorManager.LoadDescriptor(stream)); } }
public void ProcessWithMatrix() { try { var wfDescriptor = WfProcessDescriptorManager.GetDescriptor("workflowmatrixtest"); WfProcessStartupParams startParam = new WfProcessStartupParams(); startParam.ProcessDescriptor = wfDescriptor; var processInstance = WfRuntime.StartWorkflow(startParam); processInstance.ApplicationRuntimeParameters.Add("支付方式", "网银"); processInstance.ApplicationRuntimeParameters.Add("成本中心", "成1"); processInstance.ApplicationRuntimeParameters.Add("费用类型", "差旅费"); processInstance.ApplicationRuntimeParameters.Add("金额", "100"); processInstance.ApplicationRuntimeParameters.Add("部门", "商务部"); WfTransferParams transferParams = new WfTransferParams(processInstance.Descriptor.Activities["N2"]); var currentAct = processInstance.MoveTo(transferParams); currentAct.Candidates.ForEach(p => { Console.WriteLine(p.User.DisplayName); }); } catch { } }
public void SaveAndLoadTenantProcessTest() { IWfProcessDescriptor processDesp = CreateTestProcessDescriptor(); string tenantCode = UuidHelper.NewUuidString(); PrepareTenantContext(tenantCode); WfProcessDescriptorManager.SaveDescriptor(processDesp); //加载同一个租户的流程定义,如果不存在,会抛出异常 IWfProcessDescriptor loadedSameTenant = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key); Assert.AreEqual(processDesp.Key, loadedSameTenant.Key); PrepareTenantContext(UuidHelper.NewUuidString()); try { loadedSameTenant = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key); throw new ApplicationException("不应该加载到别的租户的流程"); } catch (SystemSupportException) { } }
protected override void OnPreRender(EventArgs e) { IWfProcess currentProcess = this.process; //if (currentProcess == null && ProcessContext.Current.OriginalActivity != null) //12-29 // currentProcess = ProcessContext.Current.OriginalActivity.Process; //12-29 if (currentProcess == null && WfClientContext.Current.OriginalActivity != null) { currentProcess = WfClientContext.Current.OriginalActivity.Process; } if (currentProcess != null) { IWfProcessDescriptor processDesp = currentProcess.CurrentActivity.Descriptor.Process; if (string.IsNullOrEmpty(ProcessDespKey) == false) { //processDesp = WorkflowSettings.GetConfig().ProcessDescriptorManager.GetProcessDescriptor(ProcessDespKey); processDesp = WfProcessDescriptorManager.GetDescriptor(ProcessDespKey); } RenderActivities(this, currentProcess, processDesp); } base.OnPreRender(e); }
private static List <IWfProcessDescriptor> SaveProcessDescriptor(WfProcessImporterContext context) { List <IWfProcessDescriptor> result = new List <IWfProcessDescriptor>(); XElementFormatter formatter = new XElementFormatter(); formatter.OutputShortType = false; foreach (PackagePart part in context.ProcessDescParts) { XDocument xmlDoc = XDocument.Load(part.GetStream()); IWfProcessDescriptor processDesp = (IWfProcessDescriptor)formatter.Deserialize(xmlDoc.Root); WfProcessDescriptorManager.SaveDescriptor(processDesp); IUser user = null; if (DeluxePrincipal.IsAuthenticated) { user = DeluxeIdentity.CurrentUser; } WfProcessDescriptorInfoAdapter.Instance.UpdateImportTime(processDesp.Key, user); result.Add(processDesp); } return(result); }
public static IWfProcessDescriptor LoadProcessDescriptorFromFile(string fileName) { using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { return(WfProcessDescriptorManager.LoadDescriptor(stream)); } }
public WfProcessStartupParams ClientToServer(WfClientProcessStartupParams client, ref WfProcessStartupParams server) { client.NullCheck("client"); if (server == null) { server = new WfProcessStartupParams(); } if (this._TestMode == false) { server.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(client.ProcessDescriptorKey); } WfClientDictionaryConverter.Instance.ClientToServer(client.ApplicationRuntimeParameters, server.ApplicationRuntimeParameters); WfClientDictionaryConverter.Instance.ClientToServer(client.OverridableInitialActivityProperties, server.OverridableInitialActivityProperties); server.AutoCommit = client.AutoCommit; server.AutoStartInitialActivity = client.AutoStartInitialActivity; server.CheckStartProcessUserPermission = client.CheckStartProcessUserPermission; server.DefaultTaskTitle = client.DefaultTaskTitle; server.DefaultUrl = client.DefaultUrl; server.RelativeID = client.RelativeID; server.RelativeURL = client.RelativeURL; server.ResourceID = client.ResourceID; server.RuntimeProcessName = client.RuntimeProcessName; server.Creator = (IUser)client.Creator.ToOguObject(); server.Department = (IOrganization)client.Department.ToOguObject(); WfClientAssigneeCollectionConverter.Instance.ClientToServer(client.Assignees, server.Assignees); return(server); }
private void InitInstanceByProcessDescKey(string processDescKey) { List <IWfProcessDescriptor> processDesps = new List <IWfProcessDescriptor>(); processDesps.Add(WfProcessDescriptorManager.LoadDescriptor(processDescKey)); instanceDescription.Value = JSONSerializerExecute.Serialize(processDesps); }
public Stream WfDynamicProcessToExcel(string processKey) { OperationContext.Current.FillContextToOguServiceContext(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(processKey); WfClientProcessDescriptor client = null; WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref client); return(WfClientProcessDescriptorConverter.Instance.ClientDynamicProcessToExcelStream(client)); }
public bool ExsitsProcessKey(string processKey) { if (processKey.IsNullOrEmpty()) { throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程描述的Key不能为空")); } OperationContext.Current.FillContextToOguServiceContext(); return(WfProcessDescriptorManager.ExsitsProcessKey(processKey)); }
private void RenderInfo(string processDescKey) { processDescKeyHidden.Value = processDescKey; if (processDescKey.IsNotEmpty()) { IWfProcessDescriptor processDesp = WfProcessDescriptorManager.GetDescriptor(processDescKey); processDescCaption.InnerText = string.Format("流程Key: {0}, 名称: {1}", processDescKey, processDesp.Name); } }
public void CreateProcessTemplateExecutorTest() { IWfProcessDescriptor processDesp = CreateTestProcessDescriptor(); WfSaveTemplateExecutor executor = new WfSaveTemplateExecutor(processDesp); executor.Execute(); Assert.AreEqual(WfDesignerOperationType.CreateTemplate, executor.OperationType); IWfProcessDescriptor loadedProcessDesp = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key); Assert.AreEqual(processDesp.Key, loadedProcessDesp.Key); }
public void ExcelToSaveDescriptor(string processKey, Stream stream) { OperationContext.Current.FillContextToOguServiceContext(); WfCreateClientDynamicProcessParams processParams = ExcelToWfCreateClientDynamicProcessParams(processKey, stream); WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams); WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name); WfProcessDescriptor processDesp = null; WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref processDesp); WfProcessDescriptorManager.SaveDescriptor(processDesp); }
public WfClientProcessDescriptor LoadDescriptor(string processKey) { if (processKey.IsNullOrEmpty()) { throw new ApplicationException(Translator.Translate(Define.DefaultCulture, "流程描述的Key不能为空")); } OperationContext.Current.FillContextToOguServiceContext(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(processKey); WfClientProcessDescriptor clientProcessDesp = null; WfClientProcessDescriptorConverter.Instance.ServerToClient(processDesp, ref clientProcessDesp); return(clientProcessDesp); }
public void ModifyProcessTemplateExecutorTest() { IWfProcessDescriptor processDesp = CreateTestProcessDescriptor(); WfSaveTemplateExecutor createExecutor = new WfSaveTemplateExecutor(processDesp); createExecutor.Execute(); WfSaveTemplateExecutor modifyExecutor = new WfSaveTemplateExecutor(processDesp); //再保存一次,变成修改操作 modifyExecutor.Execute(); Assert.AreEqual(WfDesignerOperationType.ModifyTemplate, modifyExecutor.OperationType); IWfProcessDescriptor loadedProcessDesp = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key); Assert.AreEqual(processDesp.Key, loadedProcessDesp.Key); }
private WfProcessStartupParams GenerateStartupParams() { var wfDescriptor = WfProcessDescriptorManager.GetDescriptor(this.ProcessKey); wfDescriptor.InitialActivity.Resources.Add(new WfUserResourceDescriptor(this.Creator)); WfProcessStartupParams startupParams = new WfProcessStartupParams(); startupParams.ProcessDescriptor = wfDescriptor; startupParams.Creator = this.Operator; startupParams.Department = this.Operator.TopOU; startupParams.Assignees.Add(this.Operator); startupParams.DefaultTaskTitle = startupParams.ProcessDescriptor.Name; startupParams.ResourceID = UuidHelper.NewUuidString(); startupParams.AutoCommit = true; return(startupParams); }
public void LoadProcessDesp() { IWfProcessDescriptor procDesp = WfProcessTestCommon.CreateProcessDescriptor(); WfProcessDescriptorManager.SaveDescriptor(procDesp); string key = procDesp.Key;; IWfProcessDescriptor desp = WfProcessDescriptorManager.LoadDescriptor(key); //本机修改过app.config,确实为此。 Assert.AreEqual(8, desp.Properties.Count, "流程在配置文件中的属性项。任意添加|减少项就会报错"); Assert.AreEqual(9, desp.InitialActivity.Properties.Count, "活动在配置文件中的属性项。任意添加|减少项就会报错"); if (desp.InitialActivity.BranchProcessTemplates.Count != 0) { Assert.AreEqual(7, desp.InitialActivity.BranchProcessTemplates[0].Properties.Count, "分支流程在配置文件中的属性项。任意添加|减少项就会报错"); } Assert.AreEqual(6, desp.InitialActivity.ToTransitions[0].Properties.Count, "线在配置文件中的属性项。任意添加|减少项就会报错"); }
public static void ExportProcessDescriptors(WfExportProcessDescriptorParams exportParams, Stream outputStream, params string[] processDespKeys) { exportParams.NullCheck("exportParams"); processDespKeys.NullCheck("processDespKeys"); WfExportProcessDescriptorContext context = new WfExportProcessDescriptorContext(exportParams); using (Package package = ZipPackage.Open(outputStream, FileMode.Create)) { foreach (string key in processDespKeys) { WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(key); ExportProcessPart(package, processDesp, context); ExportMatrixPart(package, processDesp, context); } ExportMappingPart(package, context); } }
public byte[] Export() { using (MemoryStream outputStream = new MemoryStream()) { using (Package package = ZipPackage.Open(outputStream, FileMode.Create)) { foreach (var key in this.ProcessKeys) { var processDesc = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(key); ExportProcessPart(package, processDesc); ExportMatrixPart(package, processDesc); } ExportMappingPart(package); package.Flush(); outputStream.Flush(); this.Reset(); return(outputStream.ToArray()); } } }
protected void btnConfirm_Click(object sender, EventArgs e) { try { List <IWfProcessDescriptor> processDesps = new List <IWfProcessDescriptor>(); foreach (string key in this.ProcessDescInfoDeluxeGrid.SelectedKeys) { processDesps.Add(WfProcessDescriptorManager.LoadDescriptor(key)); } resultData.Value = JSONSerializerExecute.Serialize(processDesps); Page.ClientScript.RegisterStartupScript(this.GetType(), "returnProcesses", string.Format("window.returnValue = $get('resultData').value; top.close();"), true); } catch (System.Exception ex) { WebUtility.ShowClientError(ex.Message, ex.StackTrace, "错误"); } }
protected void confirmButton_TextChanged(object sender, EventArgs e) { try { processKey.Value.IsNotEmpty().FalseThrow("流程模板的Key不能为空"); WfProcessDescriptorManager.ExsitsProcessKey(processKey.Value).TrueThrow("Key为{0}的流程模板定义已经存在", processKey.Value); string dropAppName = this.dropApp.Text; if (dropAppName == "其它") { dropAppName = string.Empty; } string returnValueJson = string.Format("{{\"Key\":\"{0}\",\"AppName\":\"{1}\"}}", processKey.Value, dropAppName); Response.Write(string.Format("<script type='text/javascript'>top.returnValue = '{0}'; top.close();</script>", WebUtility.CheckScriptString(returnValueJson))); Response.End(); } catch (System.Exception ex) { WebUtility.ShowClientError(ex.Message, ex.StackTrace, "错误"); } }
public int DisplaceUserInProcessDescriptor(string processDespKey, string userID, string[] displacingUserIDArray) { IWfProcessDescriptor processDesp = WfProcessDescriptorManager.LoadDescriptor(processDespKey); IUser originalUser = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.Guid, userID).FirstOrDefault(); OguObjectCollection <IUser> displacingUsers = OguMechanismFactory.GetMechanism().GetObjects <IUser>(SearchOUIDType.Guid, displacingUserIDArray); List <IUser> distinctUsers = new List <IUser>(); foreach (IUser user in displacingUsers) { if (distinctUsers.Exists(u => u.ID == user.ID) == false) { distinctUsers.Add(user); } } int result = processDesp.ReplaceAllUserResourceDescriptors(originalUser, distinctUsers); WfProcessDescriptorManager.SaveDescriptor(processDesp); return(result); }
private void InnerStartWorkflow(string processDescKey, string appName, string programName, string relativeID, string relativeURL, bool isCloned, NameValueCollection relativeParams) { StartWorkflowControllerOperation operation = new StartWorkflowControllerOperation(); operation.StartupParams.ProcessDescriptor = WfProcessDescriptorManager.GetDescriptor(processDescKey); if (operation.StartupParams.ProcessDescriptor.DefaultTaskTitle.IsNullOrEmpty()) { operation.StartupParams.DefaultTaskTitle = operation.StartupParams.ProcessDescriptor.Name; } else { operation.StartupParams.DefaultTaskTitle = operation.StartupParams.ProcessDescriptor.DefaultTaskTitle; } operation.StartupParams.ResourceID = UuidHelper.NewUuidString(); operation.StartupParams.ApplicationRuntimeParameters["ProcessRequestor"] = OguUser.CreateWrapperObject(DeluxeIdentity.CurrentUser); operation.ApplicationName = appName; operation.ProgramName = programName; operation.StartupParams.RelativeID = relativeID; operation.StartupParams.RelativeURL = relativeURL; operation.StartupParams.Department = DeluxeIdentity.CurrentUser.TopOU; operation.StartupParams.Assignees.Add(DeluxeIdentity.CurrentUser); operation.IsCloned = isCloned; operation.StartupParams.RelativeParams.CopyFrom(relativeParams); operation.NavigationCommand = CollectNavigationCommand(this.GetType()); operation.SceneInfo = CollectSceneInfo(this.GetType()); OnInitOperation(operation); PerformanceMonitorHelper.GetDefaultMonitor().WriteExecutionDuration("DoStartWorkflowControllerOperation", () => operation.DoOperation()); }
protected void Page_Load(object sender, EventArgs e) { string sProcessKeys = Request["wfProcessKeys"].ToString(); string[] arrProcessKeys = sProcessKeys.Split(','); var xDoc = new XDocument( new XDeclaration("1.0", "utf-8", "true"), new XElement("WorkflowProcesses") ); for (int i = 0; i < arrProcessKeys.Length; i++) { XElementFormatter formatter = new XElementFormatter(); formatter.OutputShortType = false; WfProcessDescriptor processDesc = (WfProcessDescriptor)WfProcessDescriptorManager.LoadDescriptor(arrProcessKeys[i]); XElement xeWfProcess = formatter.Serialize(processDesc); xDoc.Element("WorkflowProcesses").Add(xeWfProcess); } Response.ContentType = "text/xml"; Response.ContentEncoding = Encoding.UTF8; if (arrProcessKeys.Count() > 1) { Response.AppendHeader("content-disposition", "attachment;fileName=ExportedProcess.xml"); } else { Response.AppendHeader("content-disposition", string.Format("attachment;fileName={0}.xml", HttpUtility.UrlEncode(arrProcessKeys[0]))); } //"attachment;fileName=ExportedProcess.xml"); xDoc.Save(Response.OutputStream); }
public void DeleteProcessTemplateExecutorTest() { IWfProcessDescriptor processDesp = CreateTestProcessDescriptor(); WfSaveTemplateExecutor createExecutor = new WfSaveTemplateExecutor(processDesp); createExecutor.Execute(); WfDeleteTemplateExecutor deleteExecutor = new WfDeleteTemplateExecutor(processDesp.Key); deleteExecutor.Execute(); Assert.AreEqual(WfDesignerOperationType.DeleteTemplate, deleteExecutor.OperationType); try { IWfProcessDescriptor loadedProcessDesp = WfProcessDescriptorManager.LoadDescriptor(processDesp.Key); throw new ApplicationException("不应该加载到已经删除的流程"); } catch (SystemSupportException) { } }
/// <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); }