protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) { ASPxComboBox workUnit = ASPxGridView1.FindEditFormTemplateControl("WorkUnit") as ASPxComboBox; ASPxComboBox WorkShop = ASPxGridView1.FindEditFormTemplateControl("WorkShop") as ASPxComboBox; //ASPxTextBox company = ASPxGridView1.FindEditFormTemplateControl("COMPANY_CODE") as ASPxTextBox; ASPxTextBox pline = ASPxGridView1.FindEditFormTemplateControl("PLINE_CODE") as ASPxTextBox; ASPxTextBox hour = ASPxGridView1.FindEditFormTemplateControl("PROCESS_MANHOUR") as ASPxTextBox; ASPxTextBox sap = ASPxGridView1.FindEditFormTemplateControl("PROCESS_CODE_SAP") as ASPxTextBox; ASPxTextBox org = ASPxGridView1.FindEditFormTemplateControl("PROCESS_CODE_ORG") as ASPxTextBox; ASPxTextBox processcode = ASPxGridView1.FindEditFormTemplateControl("PROCESS_CODE") as ASPxTextBox; ASPxTextBox processname = ASPxGridView1.FindEditFormTemplateControl("PROCESS_NAME") as ASPxTextBox; ProcessEntity prEntity = new ProcessEntity(); prEntity.WORKUNIT_CODE = workUnit.SelectedItem.Value as string; prEntity.WORKSHOP_CODE = WorkShop.SelectedItem.Value as string; prEntity.COMPANY_CODE = "01"; prEntity.PROCESS_CODE = e.NewValues["PROCESS_CODE"] as string; prEntity.PROCESS_NAME = e.NewValues["PROCESS_NAME"] as string; prEntity.COMPANY_CODE = "01"; prEntity.PLINE_CODE = e.NewValues["PLINE_CODE"] as string; prEntity.PROCESS_MANHOUR = Convert.ToInt32(e.NewValues["PROCESS_MANHOUR"] as string); prEntity.PROCESS_CODE_ORG = e.NewValues["PROCESS_CODE_ORG"] as string; prEntity.PROCESS_CODE_SAP = e.NewValues["PROCESS_CODE_SAP"] as string; //string sql = "select pline_code from CODE_LOCATION where RMES_ID='" + prEntity.WORKUNIT_CODE + "' union all select RMES_ID pline_code from CODE_PRODUCT_LINE where RMES_ID='" + prEntity.WORKUNIT_CODE + "'"; //string pline_code = dc.GetValue(sql); //string strWorkShop = dc.GetValue("select WORKSHOP_CODE from rel_workshop_pline where PLINE_CODE='" + pline_code + "'"); //switch (strWorkShop) //{ // case "XK_WS01": // prEntity.PROJECT_CODE = "BWF"; // prEntity.PROJECT_NAME = "ZF8-500/ZHW-500/ZF-800/1100KV"; // break; // case "XK_WS02": // prEntity.PROJECT_CODE = "252"; // prEntity.PROJECT_NAME = "ZF9A-252/ZF9C-252"; // break; // case "XK_WS03": // prEntity.PROJECT_CODE = "126"; // prEntity.PROJECT_NAME = "ZF7C-126"; // break; //} //prEntity.ROUTING_CODE = e.NewValues["ROUTING_CODE"] as string; //prEntity.ROUTING_NAME = e.NewValues["ROUTING_NAME"] as string; //if (prEntity.FLAG != "A") //{ // prEntity.PROCESS_CODE = e.NewValues["ROUTING_CODE"] as string; // prEntity.PROCESS_NAME = e.NewValues["ROUTING_NAME"] as string; //} ProcessFactory.Insert(prEntity); e.Cancel = true; ASPxGridView1.CancelEdit(); setCondition(); }
/// <summary> /// 创建流程定义记录新版本 /// </summary> /// <param name="entity">流程</param> public int CreateProcessVersion(ProcessEntity entity) { var processManager = new ProcessManager(); entity.CreatedDateTime = DateTime.Now; entity.IsUsing = 1; var session = SessionFactory.CreateSession(); try { session.BeginTrans(); processManager.UpdateUsingState(session.Connection, entity.ProcessGUID, session.Transaction); int processId = processManager.Insert(session.Connection, entity, session.Transaction); session.Commit(); return(processId); } catch (System.Exception ex) { session.Rollback(); throw; } finally { session.Dispose(); } }
/// <summary> /// 生成基本XML文档 /// </summary> /// <param name="entity">流程定义实体</param> /// <returns>XML文档</returns> private XmlDocument GenerateXmlContent(ProcessEntity entity) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml("<Package/>"); XmlDeclaration xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null); //Add the new node to the document. XmlElement root = xmlDoc.DocumentElement; xmlDoc.InsertBefore(xmldecl, root); XmlElement workflowNode = xmlDoc.CreateElement("WorkflowProcesses"); XmlElement processNode = xmlDoc.CreateElement("Process"); processNode.SetAttribute("name", entity.ProcessName); processNode.SetAttribute("id", entity.ProcessGUID); XmlElement descriptionNode = xmlDoc.CreateElement("Description"); descriptionNode.InnerText = entity.Description; processNode.AppendChild(descriptionNode); workflowNode.AppendChild(processNode); root.AppendChild(workflowNode); return(xmlDoc); }
/// <summary> /// 创建流程定义记录 /// </summary> /// <param name="entity">流程定义实体</param> /// <returns>新ID</returns> public int CreateProcess(ProcessEntity entity) { var pm = new ProcessManager(); var processID = pm.CreateProcess(entity); return(processID); }
/// <summary> /// 消息发布方法 /// </summary> /// <param name="processInstance">流程实例</param> /// <param name="throwActivity">消息活动</param> /// <param name="throwActivityInstance">消息活动实例</param> public void PublishMessage(ProcessInstanceEntity processInstance, ActivityEntity throwActivity, ActivityInstanceEntity throwActivityInstance) { var topic = throwActivity.ActivityTypeDetail.Expression; ProcessEntity catchProcess = null; var catchActivity = XPDLHelper.GetMessageCatchActivity(processInstance, throwActivity, throwActivityInstance, out catchProcess); var appRunner = new WfAppRunner(); appRunner.MessageTopic = topic; appRunner.AppName = throwActivityInstance.AppName; appRunner.AppInstanceID = throwActivityInstance.AppInstanceID; appRunner.AppInstanceCode = throwActivityInstance.AppInstanceCode; appRunner.UserID = throwActivityInstance.CreatedByUserID; appRunner.UserName = throwActivityInstance.CreatedByUserName; var msgRunnerView = new MessageRunnerView(); msgRunnerView.ProcessEntity = catchProcess; msgRunnerView.ActivityEntity = catchActivity; msgRunnerView.WfAppRunner = appRunner; var jsonRunner = JsonConvert.SerializeObject(msgRunnerView); var messageService = MessageQueueServiceFactory.Create(); messageService.Publish(topic, jsonRunner); }
/// <summary> /// 获取跨流程XML的消息节点实体对象 /// </summary> /// <param name="processInstance">流程实例</param> /// <param name="throwActivity">消息抛出节点</param> /// <param name="throwActivityInstance">消息抛出节点活动实例</param> /// <param name="catchProcessEntity">消息捕获流程实体对象</param> /// <returns>消息接收节点实体</returns> internal static ActivityEntity GetMessageCatchActivity(ProcessInstanceEntity processInstance, ActivityEntity throwActivity, ActivityInstanceEntity throwActivityInstance, out ProcessEntity catchProcessEntity) { ActivityEntity catchActivity = null; var pm = new ProcessManager(); var processEntity = pm.GetByVersion(processInstance.ProcessGUID, processInstance.Version); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(processEntity.XmlContent); var packageNode = xmlDoc.DocumentElement; var messagesNode = packageNode.SelectSingleNode("Layout/Messages"); var messageNode = messagesNode.SelectSingleNode(string.Format("Message[@from='{0}']", throwActivity.ActivityGUID)); var catchActivityGUID = XMLHelper.GetXmlAttribute(messageNode, "to"); var catchActivityNode = packageNode.SelectSingleNode(string.Format("WorkflowProcesses/Process/Activities/Activity[@id='{0}']", catchActivityGUID)); var catchProcessNode = catchActivityNode.ParentNode.ParentNode; catchProcessEntity = new ProcessEntity(); catchProcessEntity.ProcessGUID = XMLHelper.GetXmlAttribute(catchProcessNode, "id"); catchProcessEntity.Version = XMLHelper.GetXmlAttribute(catchProcessNode, "version"); catchProcessEntity.ProcessName = XMLHelper.GetXmlAttribute(catchProcessNode, "name"); catchProcessEntity.ProcessCode = XMLHelper.GetXmlAttribute(catchProcessNode, "code"); catchActivity = ConvertHelper.ConvertXmlActivityNodeToActivityEntity(catchActivityNode, catchProcessEntity.ProcessGUID); return(catchActivity); }
public void asdasd() { var result = System.Diagnostics.Process.GetProcesses().Where(i => i.MainWindowTitle.Length > 0).ToList(); foreach (var item in result) { if (ConfigurationViewModel.process != null) { foreach (var item1 in ConfigurationViewModel.process) { if (item1 == item.MainWindowTitle) { item.Kill(); } } } ProcessEntity entity = new ProcessEntity() { Datetime = item.StartTime, Id = item.Id, Title = item.MainWindowTitle, Name = item.ProcessName }; ProcessList.Add(entity); } Task task = Task.Run(() => LogFile()); }
/// <summary> /// 按照版本获取流程记录 /// </summary> /// <param name="processGUID">流程GUID</param> /// <param name="version">版本</param> /// <returns>流程实体</returns> internal ProcessEntity GetByVersionInternal(string processGUID, string version) { ProcessEntity entity = null; string sql = @"SELECT * FROM WfProcess WHERE ProcessGUID=@processGUID AND VERSION=@version"; var list = Repository.Query <ProcessEntity>(sql, new { processGUID = processGUID, version = version }) .ToList <ProcessEntity>(); if (list != null) { if (list.Count() > 1) { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getbyversioninternal.error")); } else if (list.Count() == 1) { entity = list[0]; } } return(entity); }
/// <summary> /// 根据消息主题获取流程 /// </summary> /// <param name="topic">消息表达式</param> /// <returns>流程实体</returns> public ProcessEntity GetByMessage(string topic) { //StartType:2 --- message var sql = @"SELECT * FROM WfProcess WHERE StartType=2 AND StartExpression=@startExpression"; ProcessEntity entity = null; var list = Repository.Query <ProcessEntity>(sql, new { startExpression = topic }) .ToList <ProcessEntity>(); if (list.Count() == 1) { entity = list[0]; } else if (list.Count() == 0) { ; } else { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getbymessage.error")); } return(entity); }
/// <summary> /// 获取当前使用的流程版本 /// </summary> /// <param name="processGUID">流程GUID</param> /// <returns>流程实体</returns> public ProcessEntity GetVersionUsing(string processGUID) { ProcessEntity entity = null; var sql = @"SELECT * FROM WfProcess WHERE ProcessGUID=@processGUID AND IsUsing=1 ORDER BY ID DESC"; //current using process definition record var list = Repository.Query <ProcessEntity>(sql, new { processGUID = processGUID }).ToList <ProcessEntity>(); if (list.Count() == 1) { entity = list[0]; } else { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getbyversion.error", string.Format("ProcessGUID: {0}", processGUID) )); } return(entity); }
/// <summary> /// 根据流程名称和版本标识获取流程 /// </summary> /// <param name="processCode">流程代码</param> /// <param name="version">流程版本</param> /// <returns>流程实体</returns> public ProcessEntity GetByCode(string processCode, string version = null) { ProcessEntity entity = null; if (string.IsNullOrEmpty(version)) { version = "1"; } var sql = @"SELECT * FROM WfProcess WHERE ProcessCode=@processCode AND VERSION=@version"; var list = Repository.Query <ProcessEntity>(sql, new { processCode = processCode, version = version }) .ToList <ProcessEntity>(); if (list.Count() == 1) { entity = list[0]; } else if (list.Count() == 0) { ; } else { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getbycode.error")); } return(entity); }
/// <summary> /// 根据AppType获取流程记录 /// </summary> /// <param name="appType"></param> /// <param name="session"></param> /// <returns></returns> public ProcessEntity GetSingleByAppType(string appType, IDbSession session) { ProcessEntity entity = null; var sql = @"SELECT * FROM WfProcess WHERE AppType=@appType"; var list = Repository.Query <ProcessEntity>(session.Connection, sql, new { appType = appType }, session.Transaction) .ToList <ProcessEntity>(); if (list.Count() == 1) { entity = list[0]; } else { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getsinglebyapptype.error")); } return(entity); }
public ResponseResult UpdateProcess([FromBody] ProcessEntity entity) { var result = ResponseResult.Default(); try { var wfService = new WorkflowService(); var processEntity = wfService.GetProcessByVersion(entity.ProcessGUID, entity.Version); processEntity.ProcessName = entity.ProcessName; processEntity.ProcessCode = entity.ProcessCode; processEntity.XmlFileName = entity.XmlFileName; processEntity.AppType = entity.AppType; processEntity.Description = entity.Description; if (!string.IsNullOrEmpty(entity.XmlContent)) { processEntity.XmlContent = PaddingContentWithRightSpace(entity.XmlContent); } wfService.UpdateProcess(processEntity); result = ResponseResult.Success(); } catch (System.Exception ex) { result = ResponseResult.Error(string.Format("更新流程记录失败,错误:{0}", ex.Message)); } return(result); }
protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) { dataConn dc = new dataConn(); ProcessEntity prEntity = new ProcessEntity(); prEntity.RMES_ID = e.NewValues["RMES_ID"] as string; prEntity.WORKUNIT_CODE = e.NewValues["WORKUNIT_CODE"] as string; prEntity.WORKSHOP_CODE = e.NewValues["WORKSHOP_CODE"] as string; prEntity.PROCESS_CODE = e.NewValues["PROCESS_CODE"] as string; prEntity.PROCESS_NAME = e.NewValues["PROCESS_NAME"] as string; prEntity.COMPANY_CODE = "01"; prEntity.PLINE_CODE = e.NewValues["PLINE_CODE"] as string; prEntity.PROCESS_MANHOUR = Convert.ToInt32(e.NewValues["PROCESS_MANHOUR"] as string); prEntity.PROCESS_CODE_ORG = e.NewValues["PROCESS_CODE_ORG"] as string; prEntity.PROCESS_CODE_SAP = e.NewValues["PROCESS_CODE_SAP"] as string; //string upSql = "UPDATE CODE_PROCESS SET WORKUNIT_CODE='" + workUnit.SelectedItem.Value.ToString() + "'," + // "WORKSHOP_CODE='" + comWorkShop.SelectedItem.Value.ToString() + "' WHERE COMPANY_CODE = '" + companyCode + "' and PLINE_CODE='" + PlineCode.SelectedItem.Value.ToString() + "'" + // " and STATION_SPECIAL_CODE='" + SCode.Text.Trim() + "'"; //dc.ExeSql(upSql); //prEntity.ROUTING_NAME = e.NewValues["ROUTING_NAME"] as string; //if (prEntity.FLAG != "A") //{ // prEntity.PROCESS_NAME = e.NewValues["ROUTING_NAME"] as string; //} ProcessFactory.Update(prEntity); e.Cancel = true; ASPxGridView1.CancelEdit(); setCondition(); }
/// <summary> /// 更新流程记录 /// </summary> /// <param name="entity">流程实体</param> public void Update(ProcessEntity entity) { using (var session = DbFactory.CreateSession()) { Update(entity, session); } }
/// <summary> /// 更新流程记录 /// </summary> /// <param name="entity">实体</param> public void Update(ProcessEntity entity) { var entityDB = GetByVersion(entity.ProcessGUID, entity.Version); IDbSession session = SessionFactory.CreateSession(); try { session.BeginTrans(); if (entityDB.PackageType == (short)PackageTypeEnum.MainProcess) { //更新主流程泳道流程的使用状态信息 var sql = @"UPDATE WfProcess SET IsUsing=@isUsing WHERE PackageProcessID=@packageProcessID"; Repository.Execute(session.Connection, sql, new { isUsing = entity.IsUsing, packageProcessID = entity.ID }, session.Transaction); } Repository.Update <ProcessEntity>(session.Connection, entity, session.Transaction); session.Commit(); } catch (System.Exception) { session.Rollback(); throw; } finally { session.Dispose(); } }
/// <summary> /// 按照版本获取流程记录 /// </summary> /// <param name="processGUID">流程GUID</param> /// <param name="version">版本</param> /// <returns>流程实体</returns> internal ProcessEntity GetByVersionInternal(string processGUID, string version) { //string sql = @"SELECT // * // FROM WfProcess // WHERE ProcessGUID=@processGUID // AND VERSION=@version"; ProcessEntity entity = null; using (var session = DbFactory.CreateSession()) { var list = session.GetRepository <ProcessEntity>().Query(e => e.ProcessGUID == processGUID && e.Version == version).ToList(); if (list != null) { if (list.Count() > 1) { throw new ApplicationException(string.Format( "数据库有多条重复的流程定义记录存在,ProcessGUID: {0}, Version: {1}", processGUID, version )); } else if (list.Count() == 1) { entity = list[0]; } } return(entity); } }
/// <summary> /// 根据版本选择流程 /// </summary> /// <param name="conn">数据库链接</param> /// <param name="processGUID">流程GUID</param> /// <param name="version">版本</param> /// <param name="throwException">抛出异常</param> /// <param name="trans">交易</param> /// <returns>流程实体</returns> internal ProcessEntity GetByVersion(IDbConnection conn, string processGUID, string version, bool throwException = true, IDbTransaction trans = null) { ProcessEntity entity = null; var sql = @"SELECT * FROM WfProcess WHERE ProcessGUID=@processGUID AND VERSION=@version"; var list = Repository.Query <ProcessEntity>(conn, sql, new { processGUID = processGUID, version = version }, trans).ToList <ProcessEntity>(); if (list.Count() == 1) { entity = list[0]; } else { if (throwException == true) { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getbyversion.error", string.Format("ProcessGUID: {0}, Version: {1}", processGUID, version) )); } } return(entity); }
/// <summary> /// 创建流程模型实例 /// </summary> /// <param name="conn">链接</param> /// <param name="processGUID">流程GUID</param> /// <param name="version">版本</param> /// <param name="trans">事务</param> /// <returns>流程模型</returns> internal static IProcessModel Create(IDbConnection conn, string processGUID, string version, IDbTransaction trans) { ProcessEntity entity = null; var pm = new ProcessManager(); if (!string.IsNullOrEmpty(version)) { entity = pm.GetByVersion(conn, processGUID, version, false, trans); } else { //如果版本信息缺省,默认取当前IsUsing=1的流程记录 entity = pm.GetVersionUsing(conn, processGUID, trans); } if (entity == null) { throw new WfXpdlException(LocalizeHelper.GetEngineMessage("processmodel.factory.processnullexception")); } IProcessModel processModel = new ProcessModel(entity); return(processModel); }
/// <summary> /// 根据版本选择流程 /// </summary> /// <param name="conn">数据库链接</param> /// <param name="processGUID">流程GUID</param> /// <param name="version">版本</param> /// <param name="trans">交易</param> /// <returns>流程实体</returns> internal ProcessEntity GetByVersion(IDbConnection conn, string processGUID, string version, IDbTransaction trans = null) { ProcessEntity entity = null; var sql = @"SELECT * FROM WfProcess WHERE ProcessGUID=@processGUID AND VERSION=@version"; var list = Repository.Query <ProcessEntity>(conn, sql, new { processGUID = processGUID, version = version }, trans).ToList <ProcessEntity>(); if (list != null && list.Count() == 1) { entity = list[0]; } else { throw new ApplicationException(string.Format( "数据库没有对应的流程定义记录,ProcessGUID: {0}, Version: {1}", processGUID, version )); } return(entity); }
public ResponseResult UpdateProcess([FromBody] ProcessEntity entity) { var result = ResponseResult.Default(); try { var wfService = new WorkflowService(); var processEntity = wfService.GetProcessByVersion(entity.ProcessGUID, entity.Version); processEntity.ProcessName = entity.ProcessName; processEntity.ProcessCode = entity.ProcessCode; processEntity.XmlFileName = entity.XmlFileName; processEntity.AppType = entity.AppType; processEntity.Description = entity.Description; processEntity.IsUsing = entity.IsUsing; if (!string.IsNullOrEmpty(entity.XmlContent)) { processEntity.XmlContent = PaddingContentWithRightSpace(entity.XmlContent); } wfService.UpdateProcess(processEntity); result = ResponseResult.Success(LocalizeHelper.GetDesignerMessage("wf2xmlcontroller.updateprocess.success") ); } catch (System.Exception ex) { result = ResponseResult.Error(LocalizeHelper.GetDesignerMessage("wf2xmlcontroller.updateprocess.error", ex.Message)); } return(result); }
/// <summary> /// 按照版本获取流程记录 /// </summary> /// <param name="processGUID"></param> /// <param name="version"></param> /// <returns></returns> internal ProcessEntity GetByVersionInternal(string processGUID, string version) { ProcessEntity entity = null; string sql = @"SELECT * FROM WfProcess WHERE ProcessGUID=@processGUID AND VERSION=@version"; var list = Repository.Query <ProcessEntity>(sql, new { processGUID = processGUID, version = version }) .ToList <ProcessEntity>(); if (list != null) { if (list.Count() > 1) { throw new ApplicationException(string.Format( "数据库有多条重复的流程定义记录存在,ProcessGUID: {0}, Version: {1}", processGUID, version )); } else if (list.Count() == 1) { entity = list[0]; } } return(entity); }
/// <summary> /// 导入流程XML文件,并生成新流程 /// </summary> /// <param name="entity">流程实体</param> /// <returns>新流程ID</returns> public int ImportProcess(ProcessEntity entity) { var pm = new ProcessManager(); var processID = pm.Insert(entity); return(processID); }
/// <summary> /// 转换流程文件实体 /// </summary> /// <param name="processEntity">流程实体</param> /// <param name="extStorage">外部存储</param> /// <returns></returns> private ProcessFileEntity FillProcessFileEntity(ProcessEntity processEntity, IXPDLStorage extStorage = null) { //流程文件实体 var processFileEntity = new ProcessFileEntity(); processFileEntity.ProcessGUID = processEntity.ProcessGUID; processFileEntity.ProcessName = processEntity.ProcessName; processFileEntity.ProcessCode = processEntity.ProcessCode; processFileEntity.Version = processEntity.Version; processFileEntity.StartType = processEntity.StartType; processFileEntity.StartExpression = processEntity.StartExpression; processFileEntity.Description = processEntity.Description; if (extStorage != null) { //扩展方式读取xml文件内容 var xmlDoc = extStorage.Read(processEntity); processFileEntity.XmlContent = xmlDoc.OuterXml; } else { processFileEntity.XmlContent = processEntity.XmlContent; } return(processFileEntity); }
/// <summary> /// 创建流程定义记录 /// </summary> /// <param name="entity">流程定义实体</param> /// <returns>新ID</returns> public int CreateProcess(ProcessEntity entity) { var pm = new ProcessManager(); var processID = pm.CreateProcess(entity, XPDLStorageFactory.CreateXPDLStorage()); return(processID); }
public ProcessModel(IServiceProvider serviceProvider, string processId, string billUid) { _serviceProvider = serviceProvider; _dataAccessor = serviceProvider.GetService <IDbContext>(); _logger = serviceProvider.GetService <ILoggerFactory>().CreateLogger <ProcessModel>(); ProcessEntity = GetProcessEntity(processId, billUid); }
private ProcessEntity GetProcessEntity(string processUid, string billUid) { ProcessEntity entity = null; WfProcess wfProcess = _dataAccessor.Get <WfProcess>(processUid); if (wfProcess != null) { entity = new ProcessEntity(); dynamic bizData = _dataAccessor.Get(wfProcess.BillTable, billUid); var processInstance = _dataAccessor.QueryFirstOrDefaultWhere <WfProcessInstance>("ProcessUid=@ProcessUid and BillUid=@BillUid", new DynamicParameters(new { ProcessUid = processUid, BillUid = billUid })); if (processInstance == null) { WfDiagram diagram = _dataAccessor.Get <WfDiagram>(wfProcess.DiagramId); entity.XmlContent = diagram.XmlContent; } else { var diagramInstance = _dataAccessor.QueryFirstOrDefaultWhere <WfDiagramInstance>("ProcessInsUid=@ProcessInsUid", new DynamicParameters(new { ProcessInsUid = processInstance.Fid })); entity.XmlContent = diagramInstance.XmlContent; } entity.ProcessUid = wfProcess.Fid; entity.ProcessName = wfProcess.ProcessName; entity.AppType = wfProcess.ProcessGroupUid; entity.IsUsing = wfProcess.Status == WfProcessState.Using; entity.Version = wfProcess.Version; entity.BizData = bizData; } else { _logger.LogError($"数据库没有对应的流程定义记录,模板{processUid}"); } return(entity); }
/// <summary> /// 解析XML文件 /// </summary> /// <param name="xmlContent"></param> private bool CreateNewProcess(string xmlContent, out string message) { bool isUploaded = false; message = string.Empty; //xml package var xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xmlContent); var workflowNode = xmlDocument.DocumentElement.SelectSingleNode("WorkflowProcesses"); if (workflowNode != null) { var processNode = workflowNode.SelectSingleNode("Process"); if (processNode != null) { var processName = XMLHelper.GetXmlAttribute(processNode, "name"); var processGUID = XMLHelper.GetXmlAttribute(processNode, "id"); var processCode = XMLHelper.GetXmlAttribute(processNode, "code"); //获取8位随机字符串和数字序列作为ProcessCode,保证唯一性 if (string.IsNullOrEmpty(processCode)) { processCode = (new RandomSequenceGenerator()).GetRandomSequece(); } if (!string.IsNullOrEmpty(processName) && !string.IsNullOrEmpty(processGUID)) { var processEntity = new ProcessEntity { ProcessGUID = processGUID, ProcessName = processName, ProcessCode = processCode, Version = "1", IsUsing = 1, XmlContent = xmlContent, CreatedDateTime = System.DateTime.Now }; var wfService = new WorkflowService(); wfService.ImportProcess(processEntity); isUploaded = true; message = LocalizeHelper.GetDesignerMessage("fineuploadcontroller.importprocess.success"); } else { message = LocalizeHelper.GetDesignerMessage("fineuploadcontroller.createnewprocess.warning"); } } else { message = LocalizeHelper.GetDesignerMessage("fineuploadcontroller.createnewprocess.noxmlnode.warning"); } } else { message = LocalizeHelper.GetDesignerMessage("fineuploadcontroller.createnewprocess.norootelement.warning"); } return(isUploaded); }
/// <summary> /// 根据流程定义,创建新的流程实例 /// </summary> /// <param name="runner">运行者</param> /// <param name="processEntity">流程定义</param> /// <param name="parentProcessInstance">父流程实例</param> /// <param name="subProcessNode">子流程节点</param> /// <returns>流程实例的ID</returns> internal ProcessInstanceEntity CreateNewProcessInstanceObject(WfAppRunner runner, ProcessEntity processEntity, ProcessInstanceEntity parentProcessInstance, ActivityInstanceEntity subProcessNode) { ProcessInstanceEntity entity = new ProcessInstanceEntity(); entity.ProcessGUID = processEntity.ProcessGUID; entity.ProcessName = processEntity.ProcessName; entity.Version = processEntity.Version; entity.AppName = runner.AppName; entity.AppInstanceID = runner.AppInstanceID; entity.ProcessState = (int)ProcessStateEnum.Running; if (parentProcessInstance != null) { //流程的Parent信息 entity.ParentProcessInstanceID = parentProcessInstance.ID; entity.ParentProcessGUID = parentProcessInstance.ProcessGUID; entity.InvokedActivityInstanceID = subProcessNode.ID; entity.InvokedActivityGUID = subProcessNode.ActivityGUID; } entity.CreatedByUserID = runner.UserID; entity.CreatedByUserName = runner.UserName; entity.CreatedDateTime = System.DateTime.Now; entity.LastUpdatedByUserID = runner.UserID; entity.LastUpdatedByUserName = runner.UserName; entity.LastUpdatedDateTime = System.DateTime.Now; return(entity); }
/// <summary> /// 根据消息主题获取流程 /// </summary> /// <param name="topic">消息表达式</param> /// <returns>流程实体</returns> public ProcessEntity GetByMessage(string topic) { ProcessEntity entity = null; //StartType:2 --- message //var sql = @"SELECT // * // FROM WfProcess // WHERE StartType=2 // AND StartExpression=@startExpression"; //var list = Repository.Query<ProcessEntity>(sql, new { startExpression = topic}) // .ToList<ProcessEntity>(); var sqlQuery = (from p in Repository.GetAll <ProcessEntity>() where p.StartType == 2 && p.StartExpression == topic select p ); var list = sqlQuery.ToList <ProcessEntity>(); if (list.Count() > 1) { throw new ApplicationException(LocalizeHelper.GetEngineMessage("processmanager.getbymessage.error")); } else if (list.Count() == 1) { entity = list[0]; } return(entity); }