Rookey.Frame之系统初始化
昨天介绍了数据库的配置,今天继续介绍系统的初始化功能;针对系统初始化在开发中也是很重要的一部分,它可以提前将相关数据提前自动初始化到系统中,同时也可以为上线测试提供方便,可以很方便进行系统测试演练,防止人为处理带来的隐患并且可以节省大量部署时间。
本框架中系统初始化包含数据库(包括默认库和自定义库)初始化、数据表初始化、系统数据初始化以及自定义数据初始化,在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之系统初始化的更多相关文章
- Rookey.Frame之实体类
上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...
- Rookey.Frame v1.0快速开发平台-整体介绍
Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...
- Rookey.Frame之数据库及缓存配置
上一篇中讨论了Rookey.Frame框架菜单配置功能,这一节我们继续学习Rookey.Frame框架的数据库连接配置. 之前介绍了Rookey.Frame框架支持跨多数据库,并且支持读写分离,不过目 ...
- Rookey.Frame v1.0快速开发平台-用户登录
上一次介绍的了Rookey.Frame v1.0快速开发平台的整体功能,接下来会对各个功能点进行解析说明,今天给大家介绍下系统登录功能. 用户登录 系统中基本上所有功能页面都是从后台代码拼接后返回的, ...
- Rookey.Frame企业级极速开发框架
项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...
- Rookey.Frame企业级快速开发框架开源了
Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性:应广大网友要 ...
- Rookey.Frame之菜单设置
在上一篇博文 Rookey.Frame企业级快速开发框架开源了 中我们介绍了Rookey.Frame极速开发框架的最新更新及开源介绍,后面慢慢介绍该框架的使用方法,本人文笔不好,写得不够好的地方请大家 ...
- centos7 系统初始化脚本
现在自己的本地虚拟机系统,直接安装的是centos7.2 mini版,安装完成发现好多东西都没有安装,所以写了一个简单的系统初始化脚本,让自己可以省一些力气,哈哈 人懒主要是. 下面贴出写的脚本,脚本 ...
- ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题
想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...
随机推荐
- P3155 [CQOI2009]叶子的染色
P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...
- 我的编码习惯 - Controller规范
原文出处: 晓风轻 请先阅读我这2篇文章 程序员你为什么这么累? 和 我的编码习惯 - 接口定义. 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终 ...
- layoutSubviews何时被调用
layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews 但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时, ...
- JavaScript中replace()方法的第二个参数解析
语法 string.replace(searchvalue,newvalue) 参数值 searchvalue 必须.规定子字符串或要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则 ...
- JS中浮点数精度误差解决
问题出现 0.1 + 0.2 = 0.30000000000000004 问题分析 对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封 ...
- Git之用户凭证
由于 Git 和 Github 交互操作可能会很频繁,为了防止每次操作重复输入用户名和密码,Git 提供了两种解决方法:
- JavaScript 时间与时间戳转换
一.获取yyyy-MM-dd hh:mm:ss 格式的时间 function getdate(timeStamp) { if (timeStamp) { var now = new Date(time ...
- React基础笔记
参考文章: http://www.ruanyifeng.com/blog/2015/03/react.html https://segmentfault.com/a/1190000002767365 ...
- tomcat关闭后没有及时释放内存资源
1.ps -ef|grep java 找到对应的tomcat服务 2.kill -9 线程id 3.free -m 查看内存情况
- Linux学习-1进程
在Linux中,在一个程序的内部启动另外一个程序,从而创建一个新进程. 1.这个工作可以通过库函数system来完成. #include<stdlib.h> int system (con ...