RookeyFrame 代码层面 常用方法
测试代码均写在这个类里面的,因为是测试嘛,所以表名那些就将就看了。最后写完了再贴上全部代码
类的路径:Rookey.Frame.Operate.Base -> Test -> Class1.cs
1、获取用户信息
//获取 用户信息
public static string test1()
{
string tempUserName = "admin";
string userpwd = "admin";
string errMsg = "";
UserInfo userInfo = UserOperate.GetUserInfo(tempUserName, userpwd, out errMsg);
return JsonHelper.Serialize(userInfo);
}
2、获取分页数据
public static string test2()
{
//用户信息
string tempUserName = "admin";
string userpwd = "admin";
string errMsg = "";
var currUser = UserOperate.GetUserInfo(tempUserName, userpwd, out errMsg); //构建request对象
var url = "http://localhost:8088/DataAsync/LoadGridData.html";
var para = "moduleId=d8e80345-71b7-4a3f-8d37-2f0f32e17cc5&tgt=0&gvId=bb9e294c-fcff-4c3c-bcd4-6584a0e5140a&page=1&rows=15";
var request = new HttpRequest("", url, para);
HttpRequestWrapper wrapper = new HttpRequestWrapper(request); //获取 分页参数
var para_grid = GetGridDataParams(wrapper); //获取 分页数据
long total = ;
object list = CommonOperate.GetGridData(para_grid, out total, currUser);
//var result = (list as IEnumerable).Paged(total); return JsonHelper.Serialize(list);
}
public static GridDataParmas GetGridDataParams(HttpRequestBase request)
{
//模块信息
Sys_Module module = SystemOperate.GetModuleByRequest(request);
if (module == null) return null;
Type modelType = GetModelType(module.TableName);
bool isEnableCache = ModelConfigHelper.IsModelEnableCache(modelType);
string defaultSortField = isEnableCache || ModelConfigHelper.ModelIsViewMode(modelType) ? "CreateDate" : null;
//分页信息
PageInfo pageInfo = PageInfo.GetPageInfo(request, defaultSortField);
List<string> sortNames = pageInfo.sortname.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
if (sortNames != null && sortNames.Count > )
{
List<string> tempSortNames = new List<string>();
foreach (string sortName in sortNames)
{
if (SystemOperate.IsForeignNameField(module.Id, sortName))
tempSortNames.Add(sortName.Substring(, sortName.Length - ) + "Id");
else
tempSortNames.Add(sortName);
}
pageInfo.sortname = string.Join(",", tempSortNames);
}
//搜索条件
string q = request["q"].ObjToStr().Trim();
if (!string.IsNullOrEmpty(q) && (string.IsNullOrEmpty(pageInfo.sortname) || pageInfo.sortname == "CreateDate"))
{
var searchDic = JsonHelper.Deserialize<Dictionary<string, string>>(q);
if (searchDic != null && searchDic.Count == )
{
if (isEnableCache)
{
pageInfo.sortname = string.Format("CreateDate,len({0})", searchDic.Keys.FirstOrDefault());
pageInfo.sortorder = "desc,asc";
}
else
{
pageInfo.sortname = string.IsNullOrEmpty(pageInfo.sortname) ? string.Format("len({0}),AutoIncrmId", searchDic.Keys.FirstOrDefault()) : string.Format("len({0}),CreateDate", searchDic.Keys.FirstOrDefault());
pageInfo.sortorder = "asc,desc";
}
}
}
//自定义条件
string condition = HttpUtility.UrlDecode(request["condition"].ObjToStr());
//复杂条件集合
string cdItemStr = HttpUtility.UrlDecode(request["cdItems"]).ObjToStr();
List<ConditionItem> cdItems = new List<ConditionItem>();
if (!string.IsNullOrEmpty(cdItemStr))
{
try
{
cdItems = JsonHelper.Deserialize<List<ConditionItem>>(cdItemStr);
}
catch { }
}
//where条件语句,用Base64加密后传输
string whereCon = string.Empty;
try
{
string tempWhere = HttpUtility.UrlDecode(request["where"].ObjToStr());
if (!string.IsNullOrWhiteSpace(tempWhere))
{
whereCon = HttpUtility.UrlDecode(MySecurity.DecodeBase64(tempWhere)).ReplaceSpecialCharOfSQL();
}
}
catch
{ }
//弹出框的原始模块
string initModule = HttpUtility.UrlDecode(request["initModule"].ObjToStr());
//弹出框的原始字段
string initField = request["initField"].ObjToStr();
//弹出框的依赖字段值
string relyFieldsValue = HttpUtility.UrlDecode(request["p_relyValues"]);
//自动完成字段名
string fieldName = request["fieldName"].ObjToStr(); //字段名
//组装参数对象
GridDataParmas gridParams = null;
pageInfo.request = request;
if (!string.IsNullOrWhiteSpace(initModule) && !string.IsNullOrWhiteSpace(initField)) //弹出框网格数据参数
{
gridParams = new DialogGridDataParams(module.Id, initModule, initField, pageInfo, q, condition, relyFieldsValue, cdItems, whereCon);
}
else if (!string.IsNullOrWhiteSpace(fieldName)) //自动完成数据参数
{
gridParams = new AutoCompelteDataParams(module.Id, fieldName, pageInfo, q, condition, cdItems, whereCon);
}
else
{
gridParams = new GridDataParmas(module.Id, pageInfo, q, condition, cdItems, whereCon);
}
try
{
string gt = request["tgt"].ObjToStr();
gridParams.GridType = (DataGridType)Enum.Parse(typeof(DataGridType), gt);
gridParams.PagingInfo.gridTypeParam = gridParams.GridType;
if (gridParams.IsEditGridPageing)
{
if (gridParams.GridType == DataGridType.EditDetailGrid && gridParams.PagingInfo != null && gridParams.PagingInfo.pagesize > )
gridParams.PagingInfo.pagesize = ; //编辑网格最多支持100条记录
}
else if (gridParams.GridType == DataGridType.EditDetailGrid)
{
gridParams.PagingInfo.pagesize = ;
}
}
catch { }
//其他参数
if (request.Params.AllKeys.Where(x => x.StartsWith("p_")).Count() > )
{
gridParams.OtherParams = new Dictionary<string, string>();
List<string> keys = request.Params.AllKeys.Where(x => x.StartsWith("p_")).ToList();
foreach (string key in keys)
{
gridParams.OtherParams.Add(key, request.Params[key]);
}
}
if (request["node"].ObjToStr() != string.Empty)
{
if (gridParams.OtherParams == null)
gridParams.OtherParams = new Dictionary<string, string>();
gridParams.OtherParams.Add("node", HttpUtility.UrlDecode(request["node"].ObjToStr()));
}
//行过滤规则解析
string filterRules = request["filterRules"].ObjToStr();
if (!string.IsNullOrEmpty(filterRules))
{
try
{
List<GridFilterRule> gridFilters = JsonHelper.Deserialize<List<GridFilterRule>>(filterRules);
List<ConditionItem> ruleItems = new List<ConditionItem>();
foreach (GridFilterRule rule in gridFilters)
{
QueryMethod method = QueryMethod.Equal;
string field = rule.field;
if (rule.op == FilterOpEnum.isnull || rule.op == FilterOpEnum.isnotnull)
{
method = rule.op == FilterOpEnum.isnull ? QueryMethod.Equal : QueryMethod.NotEqual;
}
else
{
method = (QueryMethod)Enum.Parse(typeof(QueryMethod), ((int)rule.op).ToString());
}
object value = rule.value;
if (rule.op == FilterOpEnum.isnull || rule.op == FilterOpEnum.isnotnull)
{
value = null;
}
if (!CommonDefine.BaseEntityFields.Contains(field))
{
if (SystemOperate.IsForeignNameField(module.Id, field))
field = field.Substring(, field.Length - ) + "Id";
}
ruleItems.Add(new ConditionItem() { Field = field, Method = method, Value = value });
}
gridParams.FilterRules = ruleItems;
}
catch { }
}
gridParams.ViewId = request["viewId"].ObjToGuidNull(); //综合视图Id
gridParams.GridViewId = request["gvId"].ObjToGuidNull(); //当前加载视图ID
gridParams.IsComprehensiveDetailView = request["dv"].ObjToInt() == ; //综合明细视图
gridParams.IsDetailCopy = request["copy"].ObjToInt() == ; //是否明细复制
gridParams.IsTreeGrid = request["tg"].ObjToInt() == ; //是否为树型网格
gridParams.IsPermissionFilter = request["nfp"].ObjToInt() != ; //是否过滤权限
gridParams.IsRestartFlow = request["rsf"].ObjToInt() == ; //是否为重新发起流程
//调用自定义设置参数方法
ExecuteCustomeOperateHandleMethod(module.Id, "GridLoadDataParamsSet", new object[] { module, gridParams, null });
return gridParams;
}
public static Type GetModelType(string tableName)
{
return BridgeObject.GetModelType(tableName);
}
public static Type GetModelType(Guid moduleId)
{
string tableName = SystemOperate.GetModuleTableNameById(moduleId);
return BridgeObject.GetModelType(tableName);
}
public static object ExecuteCustomeOperateHandleMethod(Guid moduleId, string methodName, object[] args)
{
try
{
Type tempType = typeof(OperateHandleFactory<>);
Type modelType = GetModelType(moduleId);
Type relectType = tempType.MakeGenericType(new Type[] { modelType });
//实例化对象
object obj = Activator.CreateInstance(relectType);
MethodInfo method = relectType.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if (method == null) return null;
//反射执行方法
FastInvoke.FastInvokeHandler fastInvoker = FastInvoke.GetMethodInvoker(method);
object executedObj = fastInvoker(obj, args);
return executedObj;
}
catch { }
return null;
}
3、创建 Model
public static string test3()
{
//这个类有一些要求,比如:需要用特性 ModuleConfig 来描述这个类
string errMsg = ToolOperate.RepairTables(new List<string> { "Class1" });
return "测试:" + errMsg;
}
RookeyFrame 代码层面 常用方法的更多相关文章
- 通过从代码层面分析Linux内核启动来探知操作系统的启动过程
通过从代码层面分析Linux内核启动来探知操作系统的启动过程 前言说明 本篇为网易云课堂Linux内核分析课程的第三周作业,我将围绕Linux 3.18的内核中的start_kernel到init进程 ...
- 请问具体到PHP的代码层面,改善高并发的措施有哪些
1.今天被问一个问题:请问具体到PHP的代码层面,改善高并发的措施有哪些? 面对高并发问题我首先想到的是集群.缓存(apt.redis.mem.内存...),但具体到PHP代码层面除了想到队列.减少网 ...
- java虚拟机jvm启动后java代码层面发生了什么?
java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...
- UDP代码编写、操作系统发展史、多道技术、进程理论与代码层面创建、进程join方法与进程对象方法
昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...
- C6000代码层面优化(一)
2014年8月7日,看了一片很长见识的博文,关于DSP如何优化的,有一个问题没有搞通,“百度”一下关键字,居然搜查了一模一样的博文N片,现在也搞不懂这篇博文的原创作者是谁了.反正我感觉直接转摘过去,要 ...
- XSS代码触发条件,插入XSS代码的常用方法
1.脚本插入 (1)插入javascript和vbscript正常字符. 例1:<img src=”javascript:alert(/xss/)”> 例2:<table backg ...
- java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- Java 7代码层面上的更新
Java 7已经完成的7大新功能: 1 对集合类的语言支持: 2 自动资源管理: 3 改进的通用实例创建类型推断: 4 数字字面量下划线支持: ...
- 前端性能优化-Vue代码层面
1.v-if 和 v-show 区分使用场景 v-if 是 真正 的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建:也是惰性的:如果在初始渲染时条件为假,则什么也不做 ...
随机推荐
- Kubernetes学习续之一键部署kubeadm
1.Kubernetes的架构和组件,在部署时,它的每一个组件都是一个需要被执行的.单独的二进制文件,所以不难想象,SaltStack这样的运维工具或由社区维护的脚本的功能,就是要把这些二进制文件传输 ...
- BUAA-OO-2019 第三单元总结
JML语言理论基础梳理及工具链 注释结构 JML以javadoc注释的方式来表示规格,每行都以@起头. 行注释://@annotation 块注释:/* @ annotation @*/ JML表达式 ...
- mybatis的一级缓存与二级缓存
一级缓存 Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中 ...
- Java深入学习(6):Disruptor
Disruptor框架简介: 并发框架,基于事件驱动,使用观察者模式 底层采用环形数组,取模算法 简单使用: /** * 声明一个Event:表示生产者和消费者之间传递的数据类型 */ public ...
- MySQL用户及权限
1. MySQL根据对象级别划分的权限类别: 常见的权限类别:库级别.表级别.字段级别.管理类权限.程序类权限 管理类权限: CREATE TEMPORARY TABLES 创建临时表,一般为16M; ...
- Linux errno 与 Python
以下均为Linux环境测试. 起因: 开发的一个程序,经常会由于内存不足而被kill掉,使用的是os.system函数执行的,返回值总是35072,当时没多想.后来由于一些原因,要模拟OOM 被kil ...
- python遍历列表删除多个元素的坑
如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...
- 【Netty】初识Netty
一.为什么会出现Netty 之前我们使用通用的应用程序或库来相互通信.例如,我们经常使用HTTP客户机库从web服务器检索信息,并通过web服务调用远程过程调用.然而,通用协议或其实现有时伸缩性不是很 ...
- Miniconda安装 虚拟环境创建 与包管理
安装python 之前安装python包,导致了python里面的包不兼容,用管理工具卸载也下载不掉,重新安装也安装不上,没有办法只能卸掉python重装. 安装Anaconda Anaconda指的 ...
- Httpd服务入门知识-Httpd服务常见配置案例之配置持久连接
Httpd服务入门知识-Httpd服务常见配置案例之配置持久连接 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看默认的持久连接时间 [root@node101.yinzhe ...