Beispiel #1
0
    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();
    }
Beispiel #2
0
        /// <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();
            }
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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());
        }
Beispiel #8
0
        /// <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);
        }
Beispiel #9
0
        /// <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);
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #11
0
        /// <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);
        }
Beispiel #12
0
        /// <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);
        }
Beispiel #14
0
    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();
    }
Beispiel #15
0
 /// <summary>
 /// 更新流程记录
 /// </summary>
 /// <param name="entity">流程实体</param>
 public void Update(ProcessEntity entity)
 {
     using (var session = DbFactory.CreateSession())
     {
         Update(entity, session);
     }
 }
Beispiel #16
0
        /// <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();
            }
        }
Beispiel #17
0
        /// <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);
            }
        }
Beispiel #18
0
        /// <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);
        }
Beispiel #19
0
        /// <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);
        }
Beispiel #20
0
        /// <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);
        }
Beispiel #22
0
        /// <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);
        }
Beispiel #23
0
        /// <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);
        }
Beispiel #24
0
        /// <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);
        }
Beispiel #25
0
        /// <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);
        }
Beispiel #26
0
 public ProcessModel(IServiceProvider serviceProvider, string processId, string billUid)
 {
     _serviceProvider = serviceProvider;
     _dataAccessor    = serviceProvider.GetService <IDbContext>();
     _logger          = serviceProvider.GetService <ILoggerFactory>().CreateLogger <ProcessModel>();
     ProcessEntity    = GetProcessEntity(processId, billUid);
 }
Beispiel #27
0
        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);
        }
Beispiel #28
0
        /// <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);
        }
Beispiel #30
0
        /// <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);
        }