上一篇文章一直有提到一个Permission参数,以及Peremission.json文件,现在我们就来介绍一个它
并非每次的查询都需要定义在Permission文件中,我们的原则是:
1、由客户端直接发起的查询(pubic.erp.js中的EntityTable和clientEx.execQuerry等方法)一定要配置,并且默认为严格模式
2、需要查询多张表的和特别的列的,需要配置
一个完整的文件格式如下:
{
"query1":{
TableSql:"A0_Users a join A0_RealName b on b.UserId = a.UserId",
Fields:{
StatusText:["case Status when '0' then '未处理' when '1' then '已处理' end"],
Mobile:["b.Mobile","b.Mobile like '%{0}%'"]
}
},
"query2":{
Fields:{
StartDate :["convert(varchar(10),StartDate,120)","StartDate between '{0}' and '{1}'","StartDate"]
},
NotAllowQuery:["Password","列2"],
NotAllowSaving:["*"],
NotAllowDelete:false,
Defaults:"{UserId:{loginUserId}}"
}
}
指定了两个查询,query1和query2,也就是之前说的配置项,QuerySingle中的permission参数,这样就能自定义查询
TableSql:需要查询的表,如果只是单表,不需要指定,多表的情况最好重名一下,比如A0_Users a
Fields:对特别的字段进行配置,比如日期显示,状态的case显示,日期的查询条件,格式为长度3的字符串数组,["查询表达式","条件表达式","排序表达式"]
Defaults:默认会带入的查询条件,比如上面的{UserId:{LoginUserId}}用来限制只能查询登录用户的,
NotAllowQuery:哪些字段不允许查询,默认无限制
NotAllowSaving:哪些字段不需要保存和更新,默认所有不允许
NotAllowDelete:是否不允许删除,默认不允许
query1中的StatusText列,是表中没有的,在查询的时候,会转换为配置的case
query2中的StartDate在查询的时候会转日期格式,做where条件的时候会格式化为StartData between '日期' and ‘日期’(需要在QuerySingle或者QueryMany中的where动态类中传入两个日期,new {StartData="2016-01-01|2016-06-01"},以竖线隔开)
{LoginUserId}:代表登录用户的ID,可用在配置中的所有地方
------------------------------扩展-------------------------------
设计中并不包含分组功能的实现,不过我们可以通过列的配置达到,比如
"Home-AgencyProfits":{
TableSql:"A0_Agencys a join A0_AgencyBusiness b on b.AgencyCode = a.AgencyCode join A1_AgencyProfits c on c.AgencyBusinessId= b.Id join A0_Business d on d.Id=b.BusinessID",
Fields:{
Money:["sum(Money)"],
TotalMoney:["sum(TotalMoney)"],
GroupBy:["","1=1 group by AgencyBusinessId,a.AgencyCode,a.ParentCode,a.Company,b.Id, c.Status,c.SettlementTime,c.SettlementUser,d.Title"]
}
}
这里的groupby是通过where条件来实现的,所有会加上1=1(因为还有其它条件),sum是通过查询条件来实现的,另外需要注意,此时使用entityTable,主键和order必须要是group by语句中分组依据的列,比如上面的AgencyCode,并且如果表格中没显示该列,则显示在queryCols中也定义