昨天介绍了数据库的配置,今天继续介绍系统的初始化功能;针对系统初始化在开发中也是很重要的一部分,它可以提前将相关数据提前自动初始化到系统中,同时也可以为上线测试提供方便,可以很方便进行系统测试演练,防止人为处理带来的隐患并且可以节省大量部署时间。

本框架中系统初始化包含数据库(包括默认库和自定义库)初始化、数据表初始化、系统数据初始化以及自定义数据初始化,在Rookey.Frame.Controllers\UserController.cs用户控制器中,在登录页面Login(Action)中,系统会自行判断当前系统是否需要初始化,判断条件是判断用户表中是否存在用户数据,同时会判断数据库是否存在,如果数据库不存在则先初始化数据库,判断初始化代码如下:

        /// <summary>
/// 是否需要初始化
/// </summary>
/// <returns></returns>
public static bool IsNeedInit()
{
try
{
DbLinkArgs dbLinkArgs = ModelConfigHelper.GetLocalDbLinkArgs();
if (dbLinkArgs == null) return true;
if (!SystemOperate.DbIsExists(dbLinkArgs))
{
//向各数据库注册存储过程
SystemOperate.RegStoredProcedure();
//在当前数据库中自动注册外部链接数据库服务器
SystemOperate.RegCrossDbServer();
}
string errMsg = string.Empty;
long count = CommonOperate.Count<Sys_User>(out errMsg, false);
return count == ;
}
catch
{
return true;
}
}

在判断需要初始化后,系统会依次进行数据表初始化、字段修复(目前只支持字段增加)、模块数据初始化、列表信息及列表字段初始化、列表按钮初始化、表单信息及表单字段初始化、图标初始化、添加管理员角色和用户、初始化系统菜单、调用自定义初始化

Rookey.Frame框架是基于业务无的框架,可以很容易将其应用到新项目中,只需要将相关组件添加到引用即可,详见Rookey.Demo,很多时候在一个稍大点的公司系统也很多,但是系统复用性非常低,重复造轮子的代码到处都是,一个系统中已经实现了但由于耦合性太强,另外一个系统不得不自己再写一套相关的逻辑处理,能共用的组件很少,有的一般也是采用服务或接口方式提供,本人从事信息化以来所在的公司很少有公司有一套公共的系统框架可复用,所以写此框架的目的也是基于此,Rookey.Frame做为一套基础框架,可以在其上衍生出自己的业务框架,这样业务框架也可以达到复用的目的,公司各个系统在此基础上可以进行快速开发,节省人力开发成本、时间成本,当然本框架也存在很多问题,我也会尽全力将其完善。说了这么多其他是想说自定义初始化的部分,当系统框架稳定后应该是一套独立的组件,开发新项目时直接引用即可,这时候框架初始化的时候同时初始化当前项目数据;在Rookey.Frame.Operate.Base\InitFactory.cs基类中提供了一个自定义初始化的抽象方法

        /// <summary>
/// 自定义初始化,包括菜单、模块、字段、字典等数据初始化
/// </summary>
public abstract void CustomerInit();

在各自的项目中只要继承框架中InitFactory类重写此方法即可初始化即可。

以下为Rookey.Demo中自定义初始化代码:

    /// <summary>
/// 自定义初始化
/// </summary>
public class InitOperate : InitFactory
{
/// <summary>
/// 自定义初始化
/// </summary>
public override void CustomerInit()
{
string errMsg = string.Empty;
CommonOperate.DeleteRecordsByExpression<Sys_Menu>(x => x.Name == "行政管理" || x.Name == "礼品申请", out errMsg);
Sys_Menu XZMenu = new Sys_Menu() { Name = "行政管理", Display = "行政管理", IsLeaf = false, IsValid = true };
Guid xZMenuId = CommonOperate.OperateRecord<Sys_Menu>(XZMenu, Frame.Operate.Base.OperateHandle.ModelRecordOperateType.Add, out errMsg);
Guid detpModuleId = SystemOperate.GetModuleIdByName("礼品申请");
if (xZMenuId!=Guid.Empty)
{
List<Sys_Menu> list = new List<Sys_Menu>();
list.Add(new Sys_Menu() { Name = "礼品申请", Display = "礼品申请", ParentId = xZMenuId, Sys_ModuleId = detpModuleId, IsLeaf = true, IsValid = true });
CommonOperate.OperateRecords<Sys_Menu>(list, Frame.Operate.Base.OperateHandle.ModelRecordOperateType.Add, out errMsg);
}
}
}

OK,今天初始化的部分就介绍到此地,下次给大家介绍下系统通用类,祝大家生活愉快!

Rookey.Frame之系统初始化的更多相关文章

  1. Rookey.Frame之实体类

    上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...

  2. Rookey.Frame v1.0快速开发平台-整体介绍

    Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...

  3. Rookey.Frame之数据库及缓存配置

    上一篇中讨论了Rookey.Frame框架菜单配置功能,这一节我们继续学习Rookey.Frame框架的数据库连接配置. 之前介绍了Rookey.Frame框架支持跨多数据库,并且支持读写分离,不过目 ...

  4. Rookey.Frame v1.0快速开发平台-用户登录

    上一次介绍的了Rookey.Frame v1.0快速开发平台的整体功能,接下来会对各个功能点进行解析说明,今天给大家介绍下系统登录功能. 用户登录 系统中基本上所有功能页面都是从后台代码拼接后返回的, ...

  5. Rookey.Frame企业级极速开发框架

    项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...

  6. Rookey.Frame企业级快速开发框架开源了

    Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性:应广大网友要 ...

  7. Rookey.Frame之菜单设置

    在上一篇博文 Rookey.Frame企业级快速开发框架开源了 中我们介绍了Rookey.Frame极速开发框架的最新更新及开源介绍,后面慢慢介绍该框架的使用方法,本人文笔不好,写得不够好的地方请大家 ...

  8. centos7 系统初始化脚本

    现在自己的本地虚拟机系统,直接安装的是centos7.2 mini版,安装完成发现好多东西都没有安装,所以写了一个简单的系统初始化脚本,让自己可以省一些力气,哈哈 人懒主要是. 下面贴出写的脚本,脚本 ...

  9. ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题

    想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...

随机推荐

  1. [大数据]-Fscrawler导入文件(txt,html,pdf,worf...)到Elasticsearch5.3.1并配置同义词过滤

    fscrawler是ES的一个文件导入插件,只需要简单的配置就可以实现将本地文件系统的文件导入到ES中进行检索,同时支持丰富的文件格式(txt.pdf,html,word...)等等.下面详细介绍下f ...

  2. activity 中获取控件的宽高

    1.第一种方式: TextView textview3 = findViewById(R.id.textview3); textView3.post(new Runnable() { @Overrid ...

  3. 详解tomcat连接数和线程数

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xm ...

  4. Xilinx Altera FPGA中的逻辑资源(Slices VS LE)比较

    前言 经常有朋友会问我,“我这个方案是用A家的FPGA还是X家的FPGA呢?他们的容量够不够呢?他们的容量怎么比较呢?”当然,在大部分时候,我在给客户做设计的时候,直接会用到最高容量的产品,因为我们的 ...

  5. vue_表单_组件

    表单.组件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  6. boost::bind的使用

    最近在几经波折之后,终于对于boost::bind有点理解了.对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法.其实这得益于c++的模板以及操作 ...

  7. STL容器基本功能与分类

    STL有7中容器. 分别为: vector 向量 <vector>(头文件) 随机访问容器.顺序容器 deque 双端队列 <deque> 随机访问容器.顺序容器 list   ...

  8. 18 - csv文件-ini文件处理

    目录 1 CSV文件 1.1 手动生成一个csv文件 1.2 cvs模块 1.2.1 reader方法 1.2.2 writer方法 2 ini文件处理 2.1 configparser模块 2.2 ...

  9. jQuery插件之ajaxFileUpload(异步上传图片并实时显示,并解决onchange后ajaxFileUpload失效问题)

    参考学习: 第一篇:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html 第二篇:http://www.jb51.net/a ...

  10. Django-自动HTML转义

    一.自动HTML转义 从模板生成HTML时,总会有变量包含影响最终HTML的字符风险,例如,考虑这个模板的片段: Hello, {{ name }} 起初,这是一种显示用户名的无害方式,但考虑用户输入 ...